semantifold 0.10.0 → 0.11.0
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/README.md +1 -1
- package/build/src/backends/kotlin.d.ts +1 -1
- package/build/src/backends/kotlin.js +2 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +29 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +23 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +45 -4
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +54 -3
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +55 -5
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +18 -6
- package/build/src/semantic/effects.js +3 -1
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +11 -1
- package/build/src/semantic/types.d.ts +52 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +14 -2
- package/build/src/semantic/validate.js +18 -1
- package/build/src/toolchains.js +3 -3
- package/docs/adr-expression-breadth.md +186 -0
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +11 -3
- package/docs/parser-qualification.md +1 -1
- package/docs/testing.md +2 -2
- package/package.json +1 -1
- package/src/backends/kotlin.js +1 -1
- package/src/backends/shared.js +30 -0
- package/src/frontends/java.js +24 -0
- package/src/frontends/javascript-typescript.js +49 -2
- package/src/frontends/php.js +61 -2
- package/src/frontends/ruby.js +62 -2
- package/src/language-registry.js +17 -5
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +8 -0
- package/src/semantic/types.js +14 -1
- package/src/semantic/validate.js +26 -0
- package/src/toolchains.js +2 -2
|
@@ -284,6 +284,27 @@ function convertExpression(node, filename, source, context, expectedType) {
|
|
|
284
284
|
}, { operator: nodeLocation(operatorNode, filename, source) }), /** @type {import("../semantic/operators.js").AdaptedOperation} */ (javaBinaryOperations.get(operator)));
|
|
285
285
|
return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(semantic));
|
|
286
286
|
}
|
|
287
|
+
if (node.name == "TernaryExpression") {
|
|
288
|
+
const children = directChildren(node);
|
|
289
|
+
const question = children.find((child) => child.name == "?" || (child.name == "LogicOp" && nodeText(child, source) == "?"));
|
|
290
|
+
const colon = children.find((child) => child.name == ":" || (child.name == "LogicOp" && nodeText(child, source) == ":"));
|
|
291
|
+
const named = children.filter((child) => child !== question && child !== colon);
|
|
292
|
+
if (!question || !colon || named.length != 3)
|
|
293
|
+
return unsupportedSyntax("java", "ternary expression", location);
|
|
294
|
+
return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(withParserRanges({
|
|
295
|
+
alternate: convertExpression(named[2], filename, source, context),
|
|
296
|
+
condition: convertExpression(named[0], filename, source, context),
|
|
297
|
+
consequent: convertExpression(named[1], filename, source, context),
|
|
298
|
+
kind: /** @type {const} */ ("ConditionalExpression"),
|
|
299
|
+
location
|
|
300
|
+
}, {
|
|
301
|
+
alternate: nodeLocation(named[2], filename, source),
|
|
302
|
+
colon: nodeLocation(colon, filename, source),
|
|
303
|
+
condition: nodeLocation(named[0], filename, source),
|
|
304
|
+
consequent: nodeLocation(named[1], filename, source),
|
|
305
|
+
operator: nodeLocation(question, filename, source)
|
|
306
|
+
})));
|
|
307
|
+
}
|
|
287
308
|
if (node.name == "MethodInvocation") {
|
|
288
309
|
if (isEqualsInvocation(node, source) && !isZeroArgumentRecordMemberInvocation(node, filename, source, context)) {
|
|
289
310
|
const methodName = requiredChild(node, "MethodName", filename, source);
|
|
@@ -532,6 +553,7 @@ function isSupportedExpressionNode(node) {
|
|
|
532
553
|
"StringLiteral",
|
|
533
554
|
"UnaryExpression",
|
|
534
555
|
"BinaryExpression",
|
|
556
|
+
"TernaryExpression",
|
|
535
557
|
"MethodInvocation",
|
|
536
558
|
"ObjectCreationExpression",
|
|
537
559
|
"FieldAccess",
|
|
@@ -2282,4 +2304,4 @@ export function inspectJavaModule({ filename, source }) {
|
|
|
2282
2304
|
});
|
|
2283
2305
|
return { exports, imports, nativeName: `${packageName}.${className}` };
|
|
2284
2306
|
}
|
|
2285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUVqUiwrQ0FBK0M7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDLElBQUksRUFBRSxJQUFJO0lBQ1YsR0FBRyxFQUFFLEdBQUc7SUFDUixJQUFJLEVBQUUsSUFBSTtJQUNWLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFF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Q0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUM1SyxDQUFDLENBQUMsQ0FBQTtJQUVKLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsSUFBSSxTQUFTLEVBQUUsRUFBQyxDQUFBO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtwYXJzZXJ9IGZyb20gXCJAbGV6ZXIvamF2YVwiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpYywgbWlzc2luZ1R5cGUsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHt3aXRoQWRhcHRlZE9wZXJhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiXG5pbXBvcnQge3dpdGhQYXJzZXJSYW5nZXN9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVJldHVyblR5cGUsIHNvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUmV0dXJuVHlwZSwgbGlzdFR5cGUsIG1hcFR5cGUsIG9wdGlvbmFsVHlwZSwgb3JkZXJlZE1hcFR5cGUsIG93bmVkUmVzb3VyY2VUeXBlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCBzYW1lVmFsdWVUeXBlLCB0eXBlVmFyaWFibGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcblxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pn0gKi9cbmNvbnN0IHNpbXBsZVN0cmluZ0VzY2FwZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgXCJcXFwiXCI6IFwiXFxcIlwiLFxuICBcIidcIjogXCInXCIsXG4gIFwiXFxcXFwiOiBcIlxcXFxcIixcbiAgYjogXCJcXGJcIixcbiAgZjogXCJcXGZcIixcbiAgbjogXCJcXG5cIixcbiAgcjogXCJcXHJcIixcbiAgczogXCIgXCIsXG4gIHQ6IFwiXFx0XCJcbn0pXG5jb25zdCBqYXZhQmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiJiZcIiwgXCJBbmRcIl0sXG4gIFtcInx8XCIsIFwiT3JcIl0sXG4gIFtcIj09XCIsIFwiSmF2YUVxdWFsXCJdLFxuICBbXCIhPVwiLCBcIkphdmFOb3RFcXVhbFwiXSxcbiAgW1wiPFwiLCBcIkxlc3NUaGFuXCJdLFxuICBbXCI8PVwiLCBcIkxlc3NUaGFuT3JFcXVhbFwiXSxcbiAgW1wiPlwiLCBcIkdyZWF0ZXJUaGFuXCJdLFxuICBbXCI+PVwiLCBcIkdyZWF0ZXJUaGFuT3JFcXVhbFwiXVxuXSlcbmNvbnN0IHJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXCJjbG9uZVwiLCBcImVxdWFsc1wiLCBcImZpbmFsaXplXCIsIFwiZ2V0Q2xhc3NcIiwgXCJoYXNoQ29kZVwiLCBcIm5vdGlmeVwiLCBcIm5vdGlmeUFsbFwiLCBcInRvU3RyaW5nXCIsIFwid2FpdFwiXSlcblxuLyoqXG4gKiBAdHlwZWRlZiBKYXZhQ29udmVyc2lvbkNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5kaW5nVHlwZT59IGJpbmRpbmdzIC0gRXhwbGljaXRseSB0eXBlZCB2aXNpYmxlIGJpbmRpbmdzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBbY3VycmVudENsYXNzXSAtIEVuY2xvc2luZyByZWZlcmVuY2UgY2xhc3MuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IHNvdXJjZSBuYW1lLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtTZXQ8c3RyaW5nPn0gZXJhc2VkQmluZGluZ05hbWVzIC0gU291cmNlIGJpbmRpbmdzIGNvbnN1bWVkIGJ5IGV4YWN0IHNlbWFudGljIGZvbGRzIGluIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIEV4cGxpY2l0IG1vZHVsZSBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkcyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCB1bmRlZmluZWR9IHJldHVyblR5cGUgLSBFbmNsb3NpbmcgcmV0dXJuIHR5cGUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBKYXZhRnVuY3Rpb25TaWduYXR1cmVcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gQ29tcGxldGUgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBuYW1lTG9jYXRpb24gLSBQYXJzZXItb3duZWQgbmFtZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gRnVuY3Rpb24gbmFtZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBTZW1hbnRpYyBwYXJhbWV0ZXJzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gcmV0dXJuVHlwZSAtIFNlbWFudGljIHJldHVybiB0eXBlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGRpcmVjdCBjaGlsZCBzeW50YXggbm9kZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBzeW50YXggbm9kZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gQ2hpbGQgc3ludGF4IG5vZGVzLlxuICovXG5mdW5jdGlvbiBkaXJlY3RDaGlsZHJlbihub2RlKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cblxuICBmb3IgKGxldCBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpIGNoaWxkcmVuLnB1c2goY2hpbGQpXG5cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogUmV0dXJucyBzdHJ1Y3R1cmFsIGRpcmVjdCBjaGlsZHJlbiwgZXhjbHVkaW5nIGtub3duIGdyYW1tYXIgZGVsaW1pdGVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyZW50IHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBOYW1lZCBjaGlsZHJlbi5cbiAqL1xuZnVuY3Rpb24gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpIHtcbiAgcmV0dXJuIGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+ICFbXCJ7XCIsIFwifVwiLCBcIihcIiwgXCIpXCIsIFwiLFwiLCBcIjtcIiwgXCIuXCJdLmluY2x1ZGVzKGNoaWxkLm5hbWUpKVxufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBkZXNjZW5kYW50IHN5bnRheCBub2RlcyB3aXRoIGEgZ2l2ZW4gbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUm9vdCBzeW50YXggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTm9kZSBuYW1lLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBNYXRjaGluZyBkZXNjZW5kYW50cy5cbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGFudHMobm9kZSwgbmFtZSkge1xuICBjb25zdCBtYXRjaGVzID0gW11cblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRpcmVjdENoaWxkcmVuKG5vZGUpKSB7XG4gICAgaWYgKGNoaWxkLm5hbWUgPT0gbmFtZSkgbWF0Y2hlcy5wdXNoKGNoaWxkKVxuICAgIG1hdGNoZXMucHVzaCguLi5kZXNjZW5kYW50cyhjaGlsZCwgbmFtZSkpXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG4vKipcbiAqIFJlcXVpcmVzIG9uZSBkaXJlY3QgY2hpbGQgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyZW50IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENoaWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gQ2hpbGQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRDaGlsZChub2RlLCBuYW1lLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNoaWxkID0gbm9kZS5nZXRDaGlsZChuYW1lKVxuXG4gIGlmICghY2hpbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYCR7bm9kZS5uYW1lfSB3aXRob3V0ICR7bmFtZX1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIGNoaWxkXG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5vcm1hbGl6ZWQgTGV6ZXIgbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFNvdXJjZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZS5mcm9tLCBub2RlLnRvKVxufVxuXG4vKipcbiAqIFJldHVybnMgc291cmNlIHRleHQgYmVsb25naW5nIHRvIGEgc3ludGF4IG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3N0cmluZ30gTm9kZSB0ZXh0LlxuICovXG5mdW5jdGlvbiBub2RlVGV4dChub2RlLCBzb3VyY2UpIHtcbiAgcmV0dXJuIHNvdXJjZS5zbGljZShub2RlLmZyb20sIG5vZGUudG8pXG59XG5cbi8qKlxuICogUHJvdmVzIGFuIGV4YWN0IHBhcnNlci1zdHJ1Y3R1cmVkIEphdmEgcXVhbGlmaWVkIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIElkZW50aWZpZXIgb3IgZmllbGQtYWNjZXNzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBFeGFjdCBzdHJ1Y3R1cmFsIG5hbWUgcGFydHMuXG4gKi9cbmZ1bmN0aW9uIHF1YWxpZmllZE5hbWVQYXJ0cyhub2RlLCBzb3VyY2UpIHtcbiAgaWYgKFtcIklkZW50aWZpZXJcIiwgXCJUeXBlTmFtZVwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSByZXR1cm4gW25vZGVUZXh0KG5vZGUsIHNvdXJjZSldXG4gIGlmICghW1wiRmllbGRBY2Nlc3NcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAyKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGxlZnQgPSBxdWFsaWZpZWROYW1lUGFydHMoY2hpbGRyZW5bMF0sIHNvdXJjZSlcbiAgY29uc3QgcmlnaHQgPSBxdWFsaWZpZWROYW1lUGFydHMoY2hpbGRyZW5bMV0sIHNvdXJjZSlcblxuICByZXR1cm4gbGVmdCAmJiByaWdodCA/IFsuLi5sZWZ0LCAuLi5yaWdodF0gOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIG9ubHkgYWNjZXB0ZWQgSmF2YSBPcHRpb25hbCB0eXBlL2ZhY3Rvcnkgc3ltYm9sIHNwZWxsaW5ncy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyc2VyLXF1YWxpZmllZCBzeW1ib2wgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpZGVudGlmaWVzIGphdmEudXRpbC5PcHRpb25hbCBvciBPcHRpb25hbC5cbiAqL1xuZnVuY3Rpb24gaXNKYXZhT3B0aW9uYWxTeW1ib2wobm9kZSwgc291cmNlKSB7XG4gIGNvbnN0IHBhcnRzID0gcXVhbGlmaWVkTmFtZVBhcnRzKG5vZGUsIHNvdXJjZSlcblxuICByZXR1cm4gcGFydHM/LmpvaW4oXCIuXCIpID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgcGFydHM/LmpvaW4oXCIuXCIpID09IFwiT3B0aW9uYWxcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIEphdmEgZXhwcmVzc2lvbiBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBbZXhwZWN0ZWRUeXBlXSAtIENvbnRleHR1YWwgc2VtYW50aWMgdHlwZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZTogbm9kZVRleHQobm9kZSwgc291cmNlKX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwidGhpc1wiKSB7XG4gICAgaWYgKCFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY2VpdmVyIG91dHNpZGUgYSByZWZlcmVuY2UgY2xhc3NcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkZpZWxkQWNjZXNzXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gY2hpbGRyZW5bMF1cbiAgICBjb25zdCBtZW1iZXIgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IHJlY2VpdmVyPy5uYW1lICE9IFwidGhpc1wiIHx8IG1lbWJlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIGlmIChyZWNlaXZlciAmJiBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHJpdmF0ZSByZWZlcmVuY2UtY2xhc3MgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImZpZWxkIGFjY2VzcyBvdXRzaWRlIHRoZSBkZWNsYXJpbmcgcmVjZWl2ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpKVxuXG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5rbm93biBwcml2YXRlIGZpZWxkICcke25vZGVUZXh0KG1lbWJlciwgc291cmNlKX0nYCwgbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2ZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSwgbG9jYXRpb24sXG4gICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZVRleHQobm9kZSwgc291cmNlKSA9PSBcInRydWVcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogZGVjb2RlU3RyaW5nTGl0ZXJhbChub2RlLCBmaWxlbmFtZSwgc291cmNlKX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwibnVsbFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibnVsbCByZWZlcmVuY2VcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCB0eXBlTm9kZSA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBbXCJHZW5lcmljVHlwZVwiLCBcIlR5cGVOYW1lXCIsIFwiU2NvcGVkVHlwZU5hbWVcIl0uaW5jbHVkZXMoY2hpbGQubmFtZSkpXG4gICAgY29uc3QgbmFtZU5vZGUgPSB0eXBlTm9kZT8ubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4odHlwZU5vZGUpWzBdIDogdHlwZU5vZGVcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBuYW1lTm9kZSA/IGNvbnRleHQucmVjb3JkTmFtZXMuZ2V0KG5vZGVUZXh0KG5hbWVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCF0eXBlTm9kZSB8fCAhbmFtZU5vZGUgfHwgIWFyZ3VtZW50TGlzdCB8fCAhZGVjbGFyYXRpb24gfHwgbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNvbnN0cnVjdGlvbiBvZiBhbiB1bmtub3duIG5vbWluYWwgb3IgYW5vbnltb3VzIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBhcmd1bWVudE5vZGVzID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBjb25zdCBjbGFzc0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSwgbG9jYXRpb24sXG4gICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvd25lZCByZXNvdXJjZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50c05vZGUgPSB0eXBlTm9kZS5nZXRDaGlsZChcIlR5cGVBcmd1bWVudHNcIilcblxuICAgIGlmICh0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiAmJiAhdHlwZUFyZ3VtZW50c05vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyByZWNvcmQgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzTm9kZVxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4odHlwZUFyZ3VtZW50c05vZGUpLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KFxuICAgICAgICBhcmd1bWVudCwgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycykpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCB0eXBlQXJndW1lbnRzLCBpbmRleCkpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZENvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjb3JkOiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlQXJndW1lbnRzKVxuICAgIH0sIHtyZWNvcmQ6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBvcGVyYXRvck5vZGUgPSBub2RlLmdldENoaWxkKFwiTG9naWNPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQXJpdGhPcFwiKVxuICAgIGNvbnN0IG9wZXJhbmQgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkxvZ2ljT3BcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJpdGhPcFwiKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JOb2RlID8gbm9kZVRleHQob3BlcmF0b3JOb2RlLCBzb3VyY2UpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIW9wZXJhdG9yTm9kZSB8fCAhb3BlcmFuZCB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCAob3BlcmF0b3IgIT0gXCIhXCIgJiYgb3BlcmF0b3IgIT0gXCItXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0b3IgPT0gXCIhXCIgJiYgb3BlcmFuZC5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiICYmIGlzRXF1YWxzSW52b2NhdGlvbihvcGVyYW5kLCBzb3VyY2UpICYmXG4gICAgICAhaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gY29udmVydFN0cmluZ0VxdWFsaXR5KG9wZXJhbmQsIHRydWUsIGxvY2F0aW9uLCBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgb3BlcmFuZDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSksIG9wZXJhdG9yID09IFwiIVwiID8gXCJOb3RcIiA6IFwiTmVnYXRlXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IG5hbWVkID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3Qgb3BlcmF0b3JOb2RlID0gbm9kZS5nZXRDaGlsZChcIkNvbXBhcmVPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQXJpdGhPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiTG9naWNPcFwiKSA/PyBub2RlLmdldENoaWxkKFwiQml0T3BcIilcblxuICAgIGlmICghb3BlcmF0b3JOb2RlIHx8IG5hbWVkLmxlbmd0aCAhPSAzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYmluYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBvcGVyYW5kcyA9IFtuYW1lZFswXSwgbmFtZWRbMl1dXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRPcGVyYW5kID0gb3BlcmFuZHMuZmluZCgob3BlcmFuZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUob3BlcmFuZCkpXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRPcGVyYW5kKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHVuc3VwcG9ydGVkT3BlcmFuZC5uYW1lLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRPcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9kZVRleHQob3BlcmF0b3JOb2RlLCBzb3VyY2UpXG5cbiAgICBpZiAoIWphdmFCaW5hcnlPcGVyYXRpb25zLmhhcyhvcGVyYXRvcikpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGJpbmFyeSAke29wZXJhdG9yfWAsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24ob3BlcmFuZHNbMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAoamF2YUJpbmFyeU9wZXJhdGlvbnMuZ2V0KG9wZXJhdG9yKSkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIikge1xuICAgIGlmIChpc0VxdWFsc0ludm9jYXRpb24obm9kZSwgc291cmNlKSAmJiAhaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShub2RlLCBmYWxzZSwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IG1ldGhvZCA9IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCByZWNlaXZlclRleHQgPSByZWNlaXZlciA/IG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpIDogXCJcIlxuXG4gICAgaWYgKHJlY2VpdmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIG1ldGhvZCA9PSBcImdldE1lc3NhZ2VcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwICYmXG4gICAgICBjb250ZXh0LmJpbmRpbmdzLmdldChyZWNlaXZlclRleHQpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IHJlY2VpdmVyVGV4dH0sIHtcbiAgICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBbXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwidG9TdHJpbmdcIiwgXCJjbG9uZVwiLCBcIm5vdGlmeVwiLCBcIm5vdGlmeUFsbFwiLCBcIndhaXRcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlZmxlY3RpdmUgb3IgT2JqZWN0IG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWZlcmVuY2VUeXBlfSAqLyAoXG4gICAgICAgIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgY29uc3QgZGVjbGFyZWRNZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZClcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmVkTWV0aG9kPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IGRlY2xhcmVkTWV0aG9kPy5pZCA/PyBtZXRob2QsXG4gICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgaXNKYXZhT3B0aW9uYWxTeW1ib2wocmVjZWl2ZXIsIHNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAobWV0aG9kID09IFwiZW1wdHlcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGFic2VuY2U6IGZhY3RvcnlMb2NhdGlvbixcbiAgICAgICAgICBmYWN0b3J5OiBmYWN0b3J5TG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT0gXCJvZlwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZClcbiAgICAgICAgfSwge2ZhY3Rvcnk6IGZhY3RvcnlMb2NhdGlvbiwgc29tZTogZmFjdG9yeUxvY2F0aW9ufSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5zdXBwb3J0ZWQgT3B0aW9uYWwuJHttZXRob2R9YCwgZmFjdG9yeUxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXJUZXh0KT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIClcbiAgICAgIGNvbnN0IG9wZXJhdGlvbkxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChtZXRob2QgPT0gXCJpc1ByZXNlbnRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbElzUHJlc2VudFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09IFwiZ2V0XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICB1bndyYXA6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVuc3VwcG9ydGVkIE9wdGlvbmFsLiR7bWV0aG9kfWAsIG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJvZlwiICYmIHJlY2VpdmVyVGV4dCA9PSBcImphdmEudXRpbC5MaXN0XCIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVsZW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSkpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtmYWN0b3J5OiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwib2ZcIiAmJiByZWNlaXZlclRleHQgPT0gXCJqYXZhLnV0aWwuTWFwXCIpIHtcbiAgICAgIGlmIChhcmd1bWVudE5vZGVzLmxlbmd0aCAlIDIgIT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIk1hcC5vZiBvZGQgYXJndW1lbnQgY291bnRcIiwgbG9jYXRpb24pXG4gICAgICBpZiAoYXJndW1lbnROb2Rlcy5sZW5ndGggPiAyMCkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiamF2YS51dGlsLk1hcC5vZiBzdXBwb3J0cyBhdCBtb3N0IHRlbiBlbnRyaWVzXCIsIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICAgICAgY29uc3Qga2V5Tm9kZSA9IGFyZ3VtZW50Tm9kZXNbaW5kZXhdXG5cbiAgICAgICAgaWYgKGtleU5vZGUubmFtZSAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYXAga2V5IG90aGVyIHRoYW4gYSBzdHJpbmcgbGl0ZXJhbFwiLCBub2RlTG9jYXRpb24oa2V5Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gZGlyZWN0Q2hpbGRyZW4oYXJndW1lbnRMaXN0KS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIixcIiAmJlxuICAgICAgICAgIGNoaWxkLmZyb20gPj0ga2V5Tm9kZS50byAmJiBjaGlsZC50byA8PSBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0uZnJvbSlcblxuICAgICAgICBpZiAoIXNlcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKFwiTGV6ZXIgb21pdHRlZCB0aGUgSmF2YSBNYXAub2YgZW50cnkgc2VwYXJhdG9yLlwiKVxuICAgICAgICBlbnRyaWVzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2V5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0cmluZ0xpdGVyYWx9ICovIChjb252ZXJ0RXhwcmVzc2lvbihrZXlOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwga2V5Tm9kZS5mcm9tLCBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0udG8pLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oc2VwYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZW50cmllcywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgIGZhY3Rvcnk6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcImdldFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgPyBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiIHx8XG4gICAgICAgICghcmVjZWl2ZXJUeXBlICYmIGFyZ3VtZW50Tm9kZXNbMF0ubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgICBrZXk6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExvb2t1cEV4cHJlc3Npb25cIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RJbmRleEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZmFpbC1vbi1hYnNlbmNlXCIpXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJzaXplXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgZmllbGQ6IG1ldGhvZCxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIHJlY2VpdmVyVGV4dCA9PSBcIk1haW5cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcyAmJiAhY29udGV4dC5iaW5kaW5ncy5oYXMocmVjZWl2ZXJUZXh0KSkge1xuICAgICAgY29uc3QgbG9jYWxTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobWV0aG9kKVxuXG4gICAgICBpZiAobG9jYWxTaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oY2hpbGQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGxvY2FsU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG1ldGhvZCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBxdWFsaWZpZWROYW1lID0gYCR7cmVjZWl2ZXJUZXh0fS4ke21ldGhvZH1gXG4gICAgICBjb25zdCBxdWFsaWZpZWRTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQocXVhbGlmaWVkTmFtZSlcblxuICAgICAgaWYgKHF1YWxpZmllZFNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgcXVhbGlmaWVkU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IHF1YWxpZmllZE5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGZpZWxkOiBtZXRob2QsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGNvbnN0IHVuc3VwcG9ydGVkUmVjZWl2ZXIgPSByZWNlaXZlclxuXG4gICAgaWYgKHVuc3VwcG9ydGVkUmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtZXRob2QgaW52b2NhdGlvbiByZWNlaXZlclwiLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRSZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGFyZ3VtZW50Tm9kZXMuZmluZCgoY2hpbGQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKGNoaWxkKSlcblxuICAgIGlmICh1bnN1cHBvcnRlZEFyZ3VtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBtZXRob2QgYXJndW1lbnQgJHt1bnN1cHBvcnRlZEFyZ3VtZW50Lm5hbWV9YCwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2lnbmF0dXJlPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgbm9kZS5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIG9uZSBwYXJzZXItbmF0aXZlIEphdmEgc3RyaW5nIGVxdWFsaXR5IGludm9jYXRpb24gZm9ybS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGludm9jYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaW52b2NhdGlvbiBzcGVsbHMgYC5lcXVhbHNgIHdpdGggYSByZWNlaXZlci5cbiAqL1xuZnVuY3Rpb24gaXNFcXVhbHNJbnZvY2F0aW9uKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBtZXRob2ROYW1lICE9IG51bGwgJiYgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSA9PSBcImVxdWFsc1wiICYmIHJlY2VpdmVycy5sZW5ndGggPT0gMVxufVxuXG4vKipcbiAqIERpc3Rpbmd1aXNoZXMgYSB6ZXJvLWFyZ3VtZW50IG5vbWluYWwgZmllbGQgYWNjZXNzb3IgZnJvbSBKYXZhIHN0cmluZyBlcXVhbGl0eSBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIE1ldGhvZCBpbnZvY2F0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgYSBrbm93biByZWNvcmQgcmVjZWl2ZXIgd2l0aCBubyBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3VtZW50TGlzdCA9IG5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBhcmd1bWVudExpc3QgIT0gbnVsbCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCAmJiByZWNlaXZlciAhPSBudWxsICYmXG4gICAga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBKYXZhIGAuZXF1YWxzYCBvciBpdHMgZGlyZWN0bHkgbmVnYXRlZCBmb3JtIHdpdGhvdXQgc291cmNlLXRleHQgaW5mZXJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgbWV0aG9kIGludm9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG5lZ2F0ZWQgLSBXaGV0aGVyIGEgcGFyc2VyLW93bmVkIHVuYXJ5IG5vdCB3cmFwcyB0aGUgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gV2hvbGUgZXF1YWxpdHkgZXhwcmVzc2lvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG9wZXJhdG9yTG9jYXRpb24gLSBQYXJzZXItb3duZWQgb3BlcmF0b3IvbWV0aG9kIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gQWRhcHRlZCBlcXVhbGl0eSBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkobm9kZSwgbmVnYXRlZCwgbG9jYXRpb24sIG9wZXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkFyZ3VtZW50TGlzdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gYXJndW1lbnRzXy5maW5kKChjaGlsZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUoY2hpbGQpKVxuXG4gIGlmIChyZWNlaXZlcnMubGVuZ3RoICE9IDEgfHwgYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fCB1bnN1cHBvcnRlZEFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInN0cmluZyBlcXVhbHMgaW52b2NhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPn0gKi9cbiAgY29uc3QgcmFuZ2VzID0ge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufVxuXG4gIGlmIChuZWdhdGVkKSB7XG4gICAgcmFuZ2VzLmVxdWFsaXR5T3BlcmF0b3IgPSBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cblxuICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgbG9jYXRpb24sXG4gICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH0sIHJhbmdlcyksIG5lZ2F0ZWQgPyBcIlN0cmluZ05vdEVxdWFsXCIgOiBcIlN0cmluZ0VxdWFsXCIpXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIExlemVyIG5vZGUgaXMgaW4gdGhlIGV4cHJlc3Npb24gc3Vic2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIFtcbiAgICBcIklkZW50aWZpZXJcIixcbiAgICBcIkludGVnZXJMaXRlcmFsXCIsXG4gICAgXCJCb29sZWFuTGl0ZXJhbFwiLFxuICAgIFwiU3RyaW5nTGl0ZXJhbFwiLFxuICAgIFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJNZXRob2RJbnZvY2F0aW9uXCIsXG4gICAgXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIixcbiAgICBcIkZpZWxkQWNjZXNzXCIsXG4gICAgXCJ0aGlzXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiXG4gIF0uaW5jbHVkZXMobm9kZS5uYW1lKVxufVxuXG4vKipcbiAqIEFwcGxpZXMgSmF2YSBVbmljb2RlIHRyYW5zbGF0aW9uIGJlZm9yZSB0b2tlbi1sZXZlbCBzdHJpbmcgZXNjYXBlIGRlY29kaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGxpdGVyYWwgLSBQYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIExpdGVyYWwgc291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge3N0cmluZ30gVW5pY29kZS10cmFuc2xhdGVkIGxpdGVyYWwuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zbGF0ZVVuaWNvZGVFc2NhcGVzKGxpdGVyYWwsIGxvY2F0aW9uKSB7XG4gIGxldCB0cmFuc2xhdGVkID0gXCJcIlxuICBsZXQgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IDBcbiAgbGV0IHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IGZhbHNlXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpdGVyYWwubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cbiAgICBjb25zdCBlbGlnaWJsZSA9IGNoYXJhY3RlciA9PSBcIlxcXFxcIiAmJiAocHJldmlvdXNXYXNVbmljb2RlRXNjYXBlIHx8IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgJSAyID09IDApXG5cbiAgICBpZiAoZWxpZ2libGUgJiYgbGl0ZXJhbFtpbmRleCArIDFdID09IFwidVwiKSB7XG4gICAgICBsZXQgZGlnaXRzU3RhcnQgPSBpbmRleCArIDJcblxuICAgICAgd2hpbGUgKGxpdGVyYWxbZGlnaXRzU3RhcnRdID09IFwidVwiKSBkaWdpdHNTdGFydCsrXG5cbiAgICAgIGNvbnN0IGhleGFkZWNpbWFsID0gbGl0ZXJhbC5zbGljZShkaWdpdHNTdGFydCwgZGlnaXRzU3RhcnQgKyA0KVxuICAgICAgY29uc3QgaXNIZXhhZGVjaW1hbCA9IGhleGFkZWNpbWFsLmxlbmd0aCA9PSA0ICYmIFsuLi5oZXhhZGVjaW1hbF0uZXZlcnkoKGRpZ2l0KSA9PlxuICAgICAgICAoZGlnaXQgPj0gXCIwXCIgJiYgZGlnaXQgPD0gXCI5XCIpIHx8IChkaWdpdCA+PSBcIkFcIiAmJiBkaWdpdCA8PSBcIkZcIikgfHwgKGRpZ2l0ID49IFwiYVwiICYmIGRpZ2l0IDw9IFwiZlwiKVxuICAgICAgKVxuXG4gICAgICBpZiAoIWlzSGV4YWRlY2ltYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVkQ2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoaGV4YWRlY2ltYWwsIDE2KSlcblxuICAgICAgdHJhbnNsYXRlZCArPSB0cmFuc2xhdGVkQ2hhcmFjdGVyXG4gICAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gdHJhbnNsYXRlZENoYXJhY3RlciA9PSBcIlxcXFxcIiA/IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgKyAxIDogMFxuICAgICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gdHJ1ZVxuICAgICAgaW5kZXggPSBkaWdpdHNTdGFydCArIDNcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdHJhbnNsYXRlZCArPSBjaGFyYWN0ZXJcbiAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gY2hhcmFjdGVyID09IFwiXFxcXFwiID8gY29uc2VjdXRpdmVCYWNrc2xhc2hlcyArIDEgOiAwXG4gICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cmFuc2xhdGVkXG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgYWNjZXB0ZWQgZXNjYXBlcyBmcm9tIG9uZSBwYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgU3RyaW5nTGl0ZXJhbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERlY29kZWQgVW5pY29kZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsaXRlcmFsID0gdHJhbnNsYXRlVW5pY29kZUVzY2FwZXMobm9kZVRleHQobm9kZSwgc291cmNlKSwgbG9jYXRpb24pXG4gIGxldCB2YWx1ZSA9IFwiXCJcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGl0ZXJhbC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT0gXCJcXFwiXCIgfHwgY2hhcmFjdGVyID09IFwiXFxuXCIgfHwgY2hhcmFjdGVyID09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgIHZhbHVlICs9IGNoYXJhY3RlclxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggKyAxID49IGxpdGVyYWwubGVuZ3RoIC0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImludmFsaWQgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBlc2NhcGVkID0gbGl0ZXJhbFsrK2luZGV4XVxuICAgIGNvbnN0IHNpbXBsZSA9IHNpbXBsZVN0cmluZ0VzY2FwZXNbZXNjYXBlZF1cblxuICAgIGlmIChzaW1wbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgKz0gc2ltcGxlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChlc2NhcGVkID49IFwiMFwiICYmIGVzY2FwZWQgPD0gXCI3XCIpIHtcbiAgICAgIGxldCBvY3RhbCA9IGVzY2FwZWRcbiAgICAgIGNvbnN0IG1heGltdW1MZW5ndGggPSBlc2NhcGVkIDw9IFwiM1wiID8gMyA6IDJcblxuICAgICAgd2hpbGUgKG9jdGFsLmxlbmd0aCA8IG1heGltdW1MZW5ndGggJiYgbGl0ZXJhbFtpbmRleCArIDFdID49IFwiMFwiICYmIGxpdGVyYWxbaW5kZXggKyAxXSA8PSBcIjdcIikge1xuICAgICAgICBvY3RhbCArPSBsaXRlcmFsWysraW5kZXhdXG4gICAgICB9XG5cbiAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KG9jdGFsLCA4KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoIWhhc09ubHlVbmljb2RlU2NhbGFycyh2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IEphdmEgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lICE9IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlcyA9IGRpcmVjdENoaWxkcmVuKHN0YXRlbWVudCkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcInJldHVyblwiICYmIGNoaWxkLm5hbWUgIT0gXCI7XCIpXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBleHByZXNzaW9uTm9kZXMubGVuZ3RoID09IDEgPyBleHByZXNzaW9uTm9kZXNbMF0gOiB1bmRlZmluZWRcblxuICBpZiAoZXhwcmVzc2lvbk5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZCA9IGV4cHJlc3Npb25Ob2Rlc1swXVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgXCJqYXZhXCIsXG4gICAgICB1bnN1cHBvcnRlZD8ubmFtZSA/PyBcInJldHVybiBleHByZXNzaW9uXCIsXG4gICAgICB1bnN1cHBvcnRlZCA/IG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvblxuICAgIClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGV4cHJlc3Npb24gPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZSB8IHVuZGVmaW5lZH0gKi8gKGNvbnRleHQucmV0dXJuVHlwZSlcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBsb2NhbCBkZWNsYXJhdGlvbiBvciBhc3NpZ25tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgb3IgcHJpdmF0ZS1maWVsZCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRvcnMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIilcbiAgICBjb25zdCB0eXBlTm9kZSA9IGRlY2xhcmF0aW9uVHlwZShzdGF0ZW1lbnQpXG4gICAgY29uc3QgdmFyTm9kZSA9IHN0YXRlbWVudC5nZXRDaGlsZChcInZhclwiKVxuICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG1vZGlmaWVyQ2hpbGRyZW4gPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKSA6IFtdXG5cbiAgICBpZiAodmFyTm9kZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInZhciBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24odmFyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibXVsdGlwbGUgbG9jYWwgZGVjbGFyYXRvcnNcIiwgbG9jYXRpb24pXG4gICAgaWYgKCF0eXBlTm9kZSB8fCB0eXBlTm9kZS5uYW1lID09IFwiQXJyYXlUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBsb2NhbCB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIGlmIChtb2RpZmllckNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiZmluYWxcIikgfHwgbW9kaWZpZXJDaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgbG9jYWwgbW9kaWZpZXJzXCIsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IGRlY2xhcmF0b3JzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQoZGVjbGFyYXRvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGRlY2xhcmF0b3IuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBkZWNsYXJhdG9yLmdldENoaWxkcmVuKFwiRGltZW5zaW9uXCIpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXJOb2RlcyA9IGRpcmVjdENoaWxkcmVuKGRlY2xhcmF0b3IpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG5cbiAgICBpZiAoZGltZW5zaW9ucy5sZW5ndGggPiAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYXJyYXkgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICghYXNzaWdubWVudCB8fCBub2RlVGV4dChhc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8IGluaXRpYWxpemVyTm9kZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bmluaXRpYWxpemVkIGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKVxuXG4gICAgaWYgKGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImxvY2FsIGJpbmRpbmcgY29sbGlkZXMgd2l0aCBhIGNvbnN1bWVkIHNvdXJjZSBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjb252ZXJ0RXhwcmVzc2lvbihpbml0aWFsaXplck5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyLFxuICAgICAga2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG1vZGlmaWVyQ2hpbGRyZW4ubGVuZ3RoID09IDAsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpXG5cbiAgICBpZiAoIWFzc2lnbm1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXNzaWdubWVudClcbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IHRhcmdldCA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGNoaWxkcmVuLmF0KC0xKVxuXG4gICAgaWYgKCFvcGVyYXRvciB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNvbXBvdW5kIGFzc2lnbm1lbnRcIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICh0YXJnZXQ/Lm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBjb25zdCB0YXJnZXRDaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbih0YXJnZXQpXG4gICAgICBjb25zdCByZWNlaXZlciA9IHRhcmdldENoaWxkcmVuWzBdXG4gICAgICBjb25zdCBtZW1iZXIgPSB0YXJnZXRDaGlsZHJlblsxXVxuICAgICAgY29uc3QgZmllbGQgPSB0YXJnZXRDaGlsZHJlbi5sZW5ndGggPT0gMiAmJiByZWNlaXZlcj8ubmFtZSA9PSBcInRoaXNcIiAmJiBtZW1iZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgPyBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlVGV4dChtZW1iZXIsIHNvdXJjZSkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghZmllbGQgfHwgIWV4cHJlc3Npb24gfHwgZXhwcmVzc2lvbiA9PSB0YXJnZXQgfHwgZXhwcmVzc2lvbiA9PSBvcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHJpdmF0ZSBmaWVsZCB3cml0ZSBvdXRzaWRlIHRoZSBkZWNsYXJpbmcgcmVjZWl2ZXJcIiwgbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICAgIGZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiksIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSxcbiAgICAgIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC5uYW1lICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHRhcmdldD8ubmFtZSA/PyBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIHRhcmdldCA/IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgaWYgKCFleHByZXNzaW9uIHx8IGV4cHJlc3Npb24gPT0gdGFyZ2V0IHx8IGV4cHJlc3Npb24gPT0gb3BlcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJhc3NpZ25tZW50IGV4cHJlc3Npb25cIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlVGV4dCh0YXJnZXQsIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IG5vZGVUZXh0KHRhcmdldCwgc291cmNlKVxuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gY29udGV4dC5iaW5kaW5ncy5nZXQodGFyZ2V0TmFtZSlcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICBiaW5kaW5nVHlwZT8ua2luZCA9PSBcIkVycm9yVHlwZVwiID8gdW5kZWZpbmVkIDogYmluZGluZ1R5cGUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBleHByZXNzaW9uOiB2YWx1ZSxcbiAgICAgIGtpbmQ6IFwiQXNzaWdubWVudFN0YXRlbWVudFwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXQ6IHRhcmdldEV4cHJlc3Npb25cbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgZGlyZWN0IEphdmEgYmxvY2sgY2hpbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlRocm93U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVJhaXNlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVRyeShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJFbmhhbmNlZEZvclN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEZvckVhY2goc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5uYW1lID09IFwiQ29udGludWVTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGxhYmVsID0gc3RhdGVtZW50LmdldENoaWxkKFwiTGFiZWxcIilcblxuICAgIGlmIChsYWJlbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgbGFiZWxlZCAke3N0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn1gLFxuICAgICAgbm9kZUxvY2F0aW9uKGxhYmVsLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBrZXl3b3JkID0gcmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihrZXl3b3JkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChcbiAgICAgICAgc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiXG4gICAgICApLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgaWYgKHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICBjb25zdCBpbnZvY2F0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiTWV0aG9kSW52b2NhdGlvblwiKVxuXG4gICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBpbnZvY2F0aW9uLmdldENoaWxkKFwiRmllbGRBY2Nlc3NcIilcbiAgICBjb25zdCBtZXRob2ROYW1lID0gaW52b2NhdGlvbi5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcblxuICAgIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk1ldGhvZENhbGxFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oaW52b2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgKSxcbiAgICAgICAga2luZDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHRocm93IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SYWlzZVN0YXRlbWVudH0gU2VtYW50aWMgcmFpc2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhUmFpc2Uoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uc3RydWN0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0aW9uPy5nZXRDaGlsZChcIlR5cGVOYW1lXCIpXG4gIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjb25zdHJ1Y3Rpb24/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpIDogW11cbiAgY29uc3QgZGVjbGFyYXRpb24gPSB0eXBlTm9kZSA/IGNvbnRleHQuZXJyb3JOYW1lcy5nZXQobm9kZVRleHQodHlwZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFjb25zdHJ1Y3Rpb24gfHwgIXR5cGVOb2RlIHx8ICFhcmd1bWVudHNOb2RlIHx8ICFkZWNsYXJhdGlvbiB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8IGNvbnN0cnVjdGlvbi5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0aHJvdyBvdGhlciB0aGFuIGV4YWN0IGRlY2xhcmVkIGVycm9yIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBcInRocm93XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGNhdGNoIHdpdGggbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSB0cnkgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gU2VtYW50aWMgZXhhY3QgaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUcnkoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IGNhdGNoZXMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJDYXRjaENsYXVzZVwiKVxuXG4gIGlmICghYm9keSB8fCBjYXRjaGVzLmxlbmd0aCAhPSAxIHx8IHN0YXRlbWVudC5nZXRDaGlsZChcIkZpbmFsbHlDbGF1c2VcIikgfHwgc3RhdGVtZW50LmdldENoaWxkKFwiUmVzb3VyY2VTcGVjaWZpY2F0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRyeSB3aXRob3V0IG9uZSBjYXRjaCBhbmQgbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgaGFuZGxlciA9IGNhdGNoZXNbMF1cbiAgY29uc3QgcGFyYW1ldGVyID0gaGFuZGxlci5nZXRDaGlsZChcIkNhdGNoRm9ybWFsUGFyYW1ldGVyXCIpXG4gIGNvbnN0IGNhdWdodCA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJDYXRjaFR5cGVcIilcbiAgY29uc3QgdHlwZU5vZGVzID0gY2F1Z2h0ID8gc3RydWN0dXJhbENoaWxkcmVuKGNhdWdodCkgOiBbXVxuICBjb25zdCBkZWZpbml0aW9uID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgY2F0Y2hCb2R5ID0gaGFuZGxlci5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVzWzBdXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gIGlmICghcGFyYW1ldGVyIHx8ICFjYXVnaHQgfHwgdHlwZU5vZGVzLmxlbmd0aCAhPSAxIHx8IHR5cGVOb2RlPy5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCAhZGVmaW5pdGlvbiB8fCAhY2F0Y2hCb2R5IHx8ICFkZWNsYXJhdGlvbiB8fFxuICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJicm9hZCwgbXVsdGlwbGUsIG9yIG1hbGZvcm1lZCBjYXRjaFwiLCBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgdHlwZTogY2F1Z2h0TG9jYXRpb25cbiAgfSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzKX1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIGNhdGNoVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IGNhdGNoVHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KSxcbiAgICBjYXRjaEJvZHk6IGNvbnZlcnRCbG9jayhjYXRjaEJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGNhdGNoQ29udGV4dCksXG4gICAgY2F0Y2hUeXBlLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSwgdHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgSmF2YSBlbmhhbmNlZC1mb3Igc3ludGF4IG92ZXIgb25lIHJlc29sdmVkIGBMaXN0PFQ+YC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gRW5oYW5jZWQtZm9yIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBzcGVjID0gbm9kZS5nZXRDaGlsZChcIkZvclNwZWNcIilcbiAgY29uc3QgYm9keSA9IGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbmRMYXN0KChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkZvclNwZWNcIiAmJiBjaGlsZC5uYW1lICE9IFwiZm9yXCIpXG5cbiAgaWYgKCFzcGVjKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgc3BlY2lmaWNhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKCFib2R5IHx8IGJvZHkubmFtZSAhPSBcIkJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3Igd2l0aG91dCBibG9jayBib2R5XCIsIGJvZHkgPyBub2RlTG9jYXRpb24oYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihzcGVjKVxuICBjb25zdCBjb2xvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMl0gOiB1bmRlZmluZWRcbiAgY29uc3QgYmluZGluZ05vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBjb2xvbkluZGV4ID49IDAgPyBjaGlsZHJlbltjb2xvbkluZGV4ICsgMV0gOiB1bmRlZmluZWRcblxuICBpZiAoIXR5cGVOb2RlIHx8ICFiaW5kaW5nTm9kZSB8fCBiaW5kaW5nTm9kZS5uYW1lICE9IFwiRGVmaW5pdGlvblwiIHx8ICFjb2xsZWN0aW9uTm9kZSB8fFxuICAgIGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpLmxlbmd0aCAhPSAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBiaW5kaW5nTm9kZSA/PyBjb2xsZWN0aW9uTm9kZSA/PyBzcGVjXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGVuaGFuY2VkIGZvciBzcGVjaWZpY2F0aW9uXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKGNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiTW9kaWZpZXJzXCIpKSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3IgbW9kaWZpZXJzXCIsIG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25Ob2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtYXBOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKGNvbGxlY3Rpb25Ob2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwVHlwZV8gPSBtYXBOb2RlID8ga25vd25FeHByZXNzaW9uVHlwZShtYXBOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgYXJndW1lbnRMaXN0ICYmIG1hcE5vZGU/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJzZXF1ZW5jZWRFbnRyeVNldFwiICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmXG4gICAgICBtYXBUeXBlXz8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKSA6IFtdXG4gICAgICBjb25zdCBlbnRyeUFyZ3VtZW50cyA9IGVudHJ5VHlwZVsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihlbnRyeVR5cGVbMV0pIDogW11cbiAgICAgIGNvbnN0IHBhcnNlZEtleVR5cGUgPSBlbnRyeUFyZ3VtZW50c1swXVxuICAgICAgICA/IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGVudHJ5QXJndW1lbnRzWzBdLCBcIk1hcCBlbnRyeSBrZXlcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGFyc2VkVmFsdWVUeXBlID0gZW50cnlBcmd1bWVudHNbMV1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1sxXSwgXCJNYXAgZW50cnkgdmFsdWVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoZW50cnlUeXBlLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGVudHJ5VHlwZVswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5NYXAuRW50cnlcIiB8fCBlbnRyeUFyZ3VtZW50cy5sZW5ndGggIT0gMiB8fFxuICAgICAgICAhcGFyc2VkS2V5VHlwZSB8fCAhcGFyc2VkVmFsdWVUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcnNlZEtleVR5cGUsIG1hcFR5cGVfLmtleVR5cGUpIHx8XG4gICAgICAgICFzYW1lVmFsdWVUeXBlKHBhcnNlZFZhbHVlVHlwZSwgbWFwVHlwZV8udmFsdWVUeXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgZW50cnkgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keVN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICAgICAgaWYgKGJvZHlTdGF0ZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHBhaXIgYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlOYW1lID0gbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNvbnRleHQuYmluZGluZ3MuaGFzKGVudHJ5TmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGVudHJ5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksXG4gICAgICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcykuYWRkKGVudHJ5TmFtZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleUJpbmRpbmcgPSBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKFxuICAgICAgICBib2R5U3RhdGVtZW50c1swXSwgZW50cnlOYW1lLCBcImdldEtleVwiLCBtYXBUeXBlXy5rZXlUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuICAgICAgY29uc3QgdmFsdWVCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMV0sIGVudHJ5TmFtZSwgXCJnZXRWYWx1ZVwiLCBtYXBUeXBlXy52YWx1ZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0XG4gICAgICApXG5cbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlCaW5kaW5nLm5hbWUsIGtleUJpbmRpbmcudHlwZSlcbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgdmFsdWVCaW5kaW5nLnR5cGUpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IGNvbnZlcnRTdGF0ZW1lbnRzKGJvZHlTdGF0ZW1lbnRzLnNsaWNlKDIpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICAgICAgfSxcbiAgICAgICAga2V5QmluZGluZyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlQmluZGluZ1xuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgW1wiZW50cnlTZXRcIiwgXCJzZXF1ZW5jZWRFbnRyeVNldFwiXS5pbmNsdWRlcyhub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVub3JkZXJlZCBvciB1bnN1cHBvcnRlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyZWRUeXBlID0gY29udmVydEphdmFUeXBlQXJndW1lbnQodHlwZU5vZGUsIGBJdGVyYXRpb24gYmluZGluZyAnJHtub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKX0nYCwgYmluZGluZ0xvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIiAmJiBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YVwiLCBcIkl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKSxcbiAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUoZGVjbGFyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKGNvbGxlY3Rpb25Ob2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW1tdXRhYmxlIGxvY2FsIGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBvcmRlcmVkLW1hcCBlbnRyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBQYWlyLWJpbmRpbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZW50cnlOYW1lIC0gRW5oYW5jZWQtZm9yIGVudHJ5IGJpbmRpbmcgbmFtZS5cbiAqIEBwYXJhbSB7XCJnZXRLZXlcIiB8IFwiZ2V0VmFsdWVcIn0gYWNjZXNzb3IgLSBSZXF1aXJlZCBlbnRyeSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGV4cGVjdGVkVHlwZSAtIENhbm9uaWNhbCBiaW5kaW5nIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZ30gUGFpciBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKHN0YXRlbWVudCwgZW50cnlOYW1lLCBhY2Nlc3NvciwgZXhwZWN0ZWRUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBkZWZpbml0aW9uID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yPy5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gIGNvbnN0IGluaXRpYWxpemVyID0gZGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gaW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihpbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBub2RlVGV4dChtb2RpZmllcnMgPz8gc3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fFxuICAgIGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8ICFkZWZpbml0aW9uIHx8ICFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgIWluaXRpYWxpemVyIHx8XG4gICAgaW5pdGlhbGl6ZXIubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IGFjY2Vzc29yIHx8XG4gICAgIWFyZ3VtZW50TGlzdCB8fCBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggIT0gMCB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpICE9IGVudHJ5TmFtZSB8fCAhdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nYCwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyBjb2xsaXNpb25gLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTWFwIGl0ZXJhdGlvbiBiaW5kaW5nICcke25hbWV9J2AsIGxvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKCFzYW1lVmFsdWVUeXBlKHR5cGUsIGV4cGVjdGVkVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nIHR5cGVgLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgIG5hbWUsXG4gICAgdHlwZVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHByZXNzaW9uIHR5cGVzIGVzdGFibGlzaGVkIGJ5IEphdmEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID09IDEgPyBrbm93bkV4cHJlc3Npb25UeXBlKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMiAmJiBjaGlsZHJlblswXS5uYW1lID09IFwidGhpc1wiICYmIGNoaWxkcmVuWzFdLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQoY2hpbGRyZW5bMV0sIHNvdXJjZSkpPy50eXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgIXJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PlxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkpXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+XG4gICAgICAgICAgbWV0aG9kLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1YWxpZmllZCA9IGAke25vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpfS4ke25vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSl9YFxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZClcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gc2lnbmF0dXJlID8ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHJldHVyblR5cGVcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgcmVjZWl2ZXIgJiYgYXJndW1lbnRMaXN0ICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJnZXRcIikge1xuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMCAmJiByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gcmVjZWl2ZXJUeXBlLmVsZW1lbnRUeXBlXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkgPz8gLTFcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclR5cGUuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQgJiYgdHlwZU5vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGU/LmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBkaXJlY3Qgc3RydWN0dXJhbCBjaGlsZHJlbiBvZiBvbmUgSmF2YSBibG9jayBpbiBzb3VyY2Ugb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSAhPSBcIkJsb2NrXCIgJiYgbm9kZS5uYW1lICE9IFwiQ29uc3RydWN0b3JCb2R5XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBleHBlY3RlZCBibG9jaywgcmVjZWl2ZWQgJHtub2RlLm5hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmEgc3RhdGVtZW50IHNlcXVlbmNlLCBmb2xkaW5nIHRoZSBleGFjdCBwcm90ZWN0ZWQgb3JkZXJlZC1tYXAgY29uc3RydWN0aW9uIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU2VtYW50aWMgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudHMoc3RhdGVtZW50cywgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBjb252ZXJ0ZWQgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aDspIHtcbiAgICBjb25zdCBvcmRlcmVkID0gY29udmVydEphdmFPcmRlcmVkTWFwU2VxdWVuY2Uoc3RhdGVtZW50cywgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3JkZXJlZCkge1xuICAgICAgY29udmVydGVkLnB1c2gob3JkZXJlZC5zdGF0ZW1lbnQpXG4gICAgICBpbmRleCA9IG9yZGVyZWQubmV4dEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50c1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgaW5kZXggKz0gMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIGNvbnN0cnVjdGlvbiB0aHJvdWdoIGEgcHJpdmF0ZSBMaW5rZWRIYXNoTWFwIGJhY2tpbmcgZm9sbG93ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIFNlcXVlbmNlZE1hcCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IHN0YXRlbWVudHMgLSBEaXJlY3QgYmxvY2sgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIENhbmRpZGF0ZSBiYWNraW5nLWRlY2xhcmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7e3N0YXRlbWVudDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiwgbmV4dEluZGV4OiBudW1iZXJ9IHwgdW5kZWZpbmVkfSBGb2xkZWQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIHN0YXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhY2tpbmdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW3N0YXJ0XVxuICBjb25zdCBiYWNraW5nVHlwZU5vZGUgPSBiYWNraW5nU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoYmFja2luZ1N0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IGJhY2tpbmdUeXBlQ2hpbGRyZW4gPSBiYWNraW5nVHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdUeXBlTm9kZSkgOiBbXVxuXG4gIGlmIChiYWNraW5nVHlwZUNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGJhY2tpbmdUeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmFja2luZ1N0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmFja2luZ01vZGlmaWVycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3JzID0gYmFja2luZ1N0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBiYWNraW5nRGVjbGFyYXRvciA9IGJhY2tpbmdEZWNsYXJhdG9yc1swXVxuICBjb25zdCBiYWNraW5nRGVmaW5pdGlvbiA9IGJhY2tpbmdEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgYmFja2luZ0Fzc2lnbm1lbnQgPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBiYWNraW5nSW5pdGlhbGl6ZXIgPSBiYWNraW5nRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oYmFja2luZ0RlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGUgPSBiYWNraW5nSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbiA9IGNvbnN0cnVjdGlvblR5cGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uVHlwZSkgOiBbXVxuICBjb25zdCBjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgPSBiYWNraW5nSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGJhY2tpbmdBcmd1bWVudHNOb2RlID0gYmFja2luZ1R5cGVDaGlsZHJlblsxXVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzID0gYmFja2luZ0FyZ3VtZW50c05vZGU/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmFja2luZ0FyZ3VtZW50c05vZGUpIDogW11cblxuICBpZiAobm9kZVRleHQoYmFja2luZ01vZGlmaWVycyA/PyBiYWNraW5nU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fCBiYWNraW5nRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHxcbiAgICAhYmFja2luZ0RlZmluaXRpb24gfHwgIWJhY2tpbmdBc3NpZ25tZW50IHx8IG5vZGVUZXh0KGJhY2tpbmdBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFiYWNraW5nSW5pdGlhbGl6ZXIgfHxcbiAgICBiYWNraW5nSW5pdGlhbGl6ZXIubmFtZSAhPSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiIHx8IGJhY2tpbmdJbml0aWFsaXplci5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSB8fFxuICAgIGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiIHx8XG4gICAgc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlblsxXSkubGVuZ3RoICE9IDAgfHwgIWNvbnN0cnVjdGlvbkFyZ3VtZW50cyB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25Bcmd1bWVudHMpLmxlbmd0aCAhPSAwIHx8IGJhY2tpbmdBcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgTGlua2VkSGFzaE1hcCBiYWNraW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmFja2luZ05hbWUgPSBub2RlVGV4dChiYWNraW5nRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhiYWNraW5nTmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGJhY2tpbmdOYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBiYWNraW5nIGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiYWNraW5nRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMF0sIFwiT3JkZXJlZCBtYXAga2V5XCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHZhbHVlVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMV0sIFwiT3JkZXJlZCBtYXAgdmFsdWVcIiwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGxldCBpbmRleCA9IHN0YXJ0ICsgMVxuXG4gIHdoaWxlIChpbmRleCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgcHV0U3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgICBjb25zdCBpbnZvY2F0aW9uID0gcHV0U3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgPyBwdXRTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpIDogbnVsbFxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gaW52b2NhdGlvblxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW52b2NhdGlvbikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghaW52b2NhdGlvbiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBiYWNraW5nTmFtZSB8fFxuICAgICAgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInB1dFwiKSBicmVha1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggIT0gMiB8fCBhcmd1bWVudHNfWzBdLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwdXRcIiwgbm9kZUxvY2F0aW9uKHB1dFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGtleVR5cGUpXG4gICAgICApLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGluZGV4ICs9IDFcbiAgfVxuXG4gIGNvbnN0IHNlYWxTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICBjb25zdCBzZWFsVHlwZU5vZGUgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoc2VhbFN0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IHNlYWxEZWNsYXJhdG9ycyA9IHNlYWxTdGF0ZW1lbnQ/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIikgOiBbXVxuICBjb25zdCBzZWFsRGVjbGFyYXRvciA9IHNlYWxEZWNsYXJhdG9yc1swXVxuICBjb25zdCBzZWFsRGVmaW5pdGlvbiA9IHNlYWxEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3Qgc2VhbEFzc2lnbm1lbnQgPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBzZWFsSW5pdGlhbGl6ZXIgPSBzZWFsRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oc2VhbERlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNlYWxNZXRob2QgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCBzZWFsQXJndW1lbnRzTm9kZSA9IHNlYWxJbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50cyA9IHNlYWxBcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxBcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxSZWNlaXZlciA9IHNlYWxJbml0aWFsaXplcj8ubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFzZWFsU3RhdGVtZW50IHx8IG5vZGVUZXh0KHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICAhc2VhbFR5cGVOb2RlIHx8IHNlYWxEZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhc2VhbERlZmluaXRpb24gfHwgIXNlYWxBc3NpZ25tZW50IHx8IG5vZGVUZXh0KHNlYWxBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8XG4gICAgc2VhbEluaXRpYWxpemVyPy5uYW1lICE9IFwiTWV0aG9kSW52b2NhdGlvblwiIHx8IG5vZGVUZXh0KHNlYWxSZWNlaXZlciA/PyBzZWFsU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkNvbGxlY3Rpb25zXCIgfHxcbiAgICAhc2VhbE1ldGhvZCB8fCBub2RlVGV4dChzZWFsTWV0aG9kLCBzb3VyY2UpICE9IFwidW5tb2RpZmlhYmxlU2VxdWVuY2VkTWFwXCIgfHwgc2VhbEFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIHNlYWxBcmd1bWVudHNbMF0ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChzZWFsQXJndW1lbnRzWzBdLCBzb3VyY2UpICE9IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KHNlYWxEZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gYmFja2luZ05hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgYmluZGluZyBjb2xsaXNpb25cIiwgbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib3VuZGFyeVR5cGUgPSBjb252ZXJ0VHlwZShzZWFsVHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24oc2VhbFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3Qgc2VhbFR5cGVDaGlsZHJlbiA9IHNlYWxUeXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZU5vZGUpIDogW11cbiAgY29uc3Qgc2VhbFR5cGVBcmd1bWVudHMgPSBzZWFsVHlwZUNoaWxkcmVuWzFdPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxUeXBlQ2hpbGRyZW5bMV0pIDogW11cblxuICBpZiAoc2VhbFR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChzZWFsVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcFwiIHx8XG4gICAgc2VhbFR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIgfHwgYm91bmRhcnlUeXBlLmtpbmQgIT0gXCJNYXBUeXBlXCIgfHwgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLmtleVR5cGUsIGtleVR5cGUpIHx8XG4gICAgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLnZhbHVlVHlwZSwgdmFsdWVUeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBib3VuZGFyeSB0eXBlIG1pc21hdGNoXCIsIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBvcmRlcmVkTWFwVHlwZShcbiAgICBib3VuZGFyeVR5cGUua2V5VHlwZSxcbiAgICBib3VuZGFyeVR5cGUudmFsdWVUeXBlLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbm9kZUxvY2F0aW9uKHNlYWxUeXBlQXJndW1lbnRzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICApXG5cbiAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcbiAgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuYWRkKGJhY2tpbmdOYW1lKVxuICByZXR1cm4ge1xuICAgIG5leHRJbmRleDogaW5kZXggKyAxLFxuICAgIHN0YXRlbWVudDogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiYWNraW5nSW5pdGlhbGl6ZXIuZnJvbSwgc2VhbEluaXRpYWxpemVyLnRvKVxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihiYWNraW5nSW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ1N0YXRlbWVudC5mcm9tLCBzZWFsU3RhdGVtZW50LnRvKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oc2VhbERlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlYWxBc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBKYXZhIHNjYWxhciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBKYXZhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlQXJndW1lbnQobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVycy5nZXQobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICBpZiAodHlwZVBhcmFtZXRlcj8uaWQpIHJldHVybiB0eXBlVmFyaWFibGUodHlwZVBhcmFtZXRlci5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBub2RlVGV4dChub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHNjYWxhciA9IHNwZWxsaW5nID09IFwiSW50ZWdlclwiID8gXCJpbnRlZ2VyXCIgOiBzcGVsbGluZyA9PSBcIkJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogc3BlbGxpbmcgPT0gXCJTdHJpbmdcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoIXNjYWxhcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gdHlwZSBhcmd1bWVudFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSAqLyAoc2NhbGFyKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gc291cmNlVHlwZSAtIEphdmEgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlPy5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwiamF2YVwiLCBcInZvaWRcIiwgc3ViamVjdCwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRpcmVjdCBKYXZhIGRlY2xhcmF0aW9uIHR5cGUgbm9kZSBzdXBwb3J0ZWQgYnkgc2NhbGFyIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gVHlwZSBzeW50YXggbm9kZS5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25UeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZ2V0Q2hpbGQoXCJHZW5lcmljVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiUHJpbWl0aXZlVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiVHlwZU5hbWVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlNjb3BlZFR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IEphdmEgdHlwZS1wYXJhbWV0ZXIgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGVQYXJhbWV0ZXJzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgcmV0dXJuIHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBjaGlsZHJlblswXVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGRlZmluaXRpb24/Lm5hbWUgIT0gXCJEZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJib3VuZGVkLCBhbm5vdGF0ZWQsIG9yIG1hbGZvcm1lZCB0eXBlIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWU6IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFkYXB0aW5nIGFueSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1FcnJvcl0gLSBXaGV0aGVyIHB1YmxpYyBwcm9ncmFtIHZpc2liaWxpdHkgaXMgYWRtaXR0ZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW1FcnJvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJUZXh0ID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkuam9pbihcIiBcIikgOiBcIlwiXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBzdXBlcmNsYXNzQ2hpbGRyZW4gPSBzdXBlcmNsYXNzID8gc3RydWN0dXJhbENoaWxkcmVuKHN1cGVyY2xhc3MpIDogW11cbiAgY29uc3QgcGFyZW50ID0gc3VwZXJjbGFzc0NoaWxkcmVuLmF0KC0xKVxuICBjb25zdCBib2R5ID0gbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKVxuICBjb25zdCBtZW1iZXJzID0gYm9keSA/IHN0cnVjdHVyYWxDaGlsZHJlbihib2R5KSA6IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbWVtYmVyc1swXVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3I/LmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyID8gZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlcikgOiBudWxsXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJDb25zdHJ1Y3RvckJvZHlcIilcbiAgY29uc3QgY29uc3RydWN0b3JTdGF0ZW1lbnRzID0gY29uc3RydWN0b3JCb2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yQm9keSkgOiBbXVxuICBjb25zdCBzdXBlckNhbGwgPSBjb25zdHJ1Y3RvclN0YXRlbWVudHNbMF1cbiAgY29uc3Qgc3VwZXJBcmd1bWVudHMgPSBzdXBlckNhbGw/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHN1cGVyVmFsdWVzID0gc3VwZXJBcmd1bWVudHMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJBcmd1bWVudHMpIDogW11cblxuICBpZiAoKHByb2dyYW1FcnJvciA/ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllclRleHQpIDogbW9kaWZpZXJUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICAhc3VwZXJjbGFzcyB8fCBzdXBlcmNsYXNzQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyZW50Py5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgIT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCAhYm9keSB8fCBtZW1iZXJzLmxlbmd0aCAhPSAxIHx8XG4gICAgY29uc3RydWN0b3I/Lm5hbWUgIT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIgfHxcbiAgICAocHJvZ3JhbUVycm9yID8gbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gY29uc3RydWN0b3IsIHNvdXJjZSkgIT0gXCJwdWJsaWNcIiA6IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpKSB8fFxuICAgIGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpID8/IG5vZGUsIHNvdXJjZSkgIT0gZGVjbGFyYXRpb24ubmFtZSB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1wiIHx8XG4gICAgbm9kZVRleHQocGFyYW1ldGVyTmFtZSA/PyBub2RlLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiIHx8ICFjb25zdHJ1Y3RvckJvZHkgfHwgY29uc3RydWN0b3JTdGF0ZW1lbnRzLmxlbmd0aCAhPSAxIHx8XG4gICAgc3VwZXJDYWxsPy5uYW1lICE9IFwiRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb25cIiB8fCAhc3VwZXJDYWxsLmdldENoaWxkKFwic3VwZXJcIikgfHwgc3VwZXJWYWx1ZXMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlclZhbHVlc1swXS5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGVUZXh0KHN1cGVyVmFsdWVzWzBdLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBwYWNrYWdlLXByaXZhdGUgSmF2YSByZWZlcmVuY2UgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UtbWV0aG9kIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ29uc3RydWN0b3Igb3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuXG4gIGlmIChtb2RpZmllcnMgfHwgbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIikgfHxcbiAgICBjb25zdHJ1Y3RvciAhPSAobm9kZS5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSB8fCBjb25zdHJ1Y3RvciAmJiBuYW1lICE9IGRlY2xhcmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXIpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZU5vZGUgPSBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUgIT0gXCJGb3JtYWxQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIkRpbWVuc2lvblwiKSB8fCAhcGFyYW1ldGVyTmFtZU5vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCByZWZlcmVuY2UgY2xhc3MgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gbm9kZVRleHQocGFyYW1ldGVyTmFtZU5vZGUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpfSxcbiAgICB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZTogY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycyxcbiAgICAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBjb252ZXJ0UmV0dXJuVHlwZShkZWNsYXJhdGlvblR5cGUobm9kZSksIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBib3VuZGVkIGZpbmFsL3ByaXZhdGUtZmllbGQgSmF2YSByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50cnlQb2ludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5nZXRDaGlsZChcIkZvcm1hbFBhcmFtZXRlcnNcIilcbiAgY29uc3QgZGVmaW5pdGlvbiA9IG5vZGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHJldHVyblR5cGUgPSBub2RlLmdldENoaWxkKFwidm9pZFwiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkFycmF5VHlwZVwiKVxuICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcblxuICBpZiAobW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBzdGF0aWNcIiB8fCAhcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1tdXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJhcmdzXCIgfHwgIWRlZmluaXRpb24gfHwgbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKSAhPSBcIm1haW5cIiB8fCAhcmV0dXJuVHlwZSB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBub2RlLmdldENoaWxkKFwiVGhyb3dzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KCksXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9KVxuXG4gIHJldHVybiB7Ym9keSwga2luZDogXCJFbnRyeVBvaW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBwcmludCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gRXhwcmVzc2lvbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gU2VtYW50aWMgcHJpbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGNvbnN0IHByaW50SW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICBpZiAoIXByaW50SW52b2NhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3QgZmllbGRBY2Nlc3MgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICBjb25zdCBtZXRob2ROYW1lID0gcHJpbnRJbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIHdpdGhvdXQgU3lzdGVtLm91dC5wcmludGxuXCIsIG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChwcmludEludm9jYXRpb24sIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaW50bG4gd2l0aG91dCBvbmUgc3VwcG9ydGVkIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudExpc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJpbnRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbjogcHJpbnRMb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YSBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCByZWNvcmRUb2tlbiA9IGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHRyZWUudG9wTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY29yZFRva2VuKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiSmF2YSByZWNvcmQgZGVjbGFyYXRpb24gdW5kZXIgdGhlIHBpbm5lZCBwYXJzZXJcIiwgbm9kZUxvY2F0aW9uKHJlY29yZFRva2VuLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3JhbSkgcmV0dXJuIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUodHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpXG5cbiAgY29uc3QgcHJvZ3JhbU1lbWJlcnMgPSB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcHJvZ3JhbU1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA9IHByb2dyYW1NZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1haW5DbGFzc2VzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwiTWFpblwiKVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWFpbkNsYXNzZXNbMF1cblxuICBpZiAoIWNsYXNzRGVjbGFyYXRpb24gfHwgbWFpbkNsYXNzZXMubGVuZ3RoICE9IDEgfHwgdW5leHBlY3RlZFByb2dyYW1NZW1iZXIgfHwgY2xhc3NEZWNsYXJhdGlvbnMuYXQoLTEpICE9IGNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcGlsYXRpb24gdW5pdCBvdGhlciB0aGFuIHJlY29yZCBjbGFzc2VzIGZvbGxvd2VkIGJ5IG9uZSBNYWluIGNsYXNzXCIsXG4gICAgICBub2RlTG9jYXRpb24odW5leHBlY3RlZFByb2dyYW1NZW1iZXIgPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc05hbWUgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01vZGlmaWVycyA9IGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgY2xhc3NNb2RpZmllck5hbWVzID0gY2xhc3NNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBpZiAobm9kZVRleHQoY2xhc3NOYW1lLCBzb3VyY2UpICE9IFwiTWFpblwiIHx8IGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInB1YmxpYyBmaW5hbCBNYWluIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSB0YXNrMDM0SmF2YU1haW5NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVtYmVyID0gbWVtYmVycy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIilcblxuICBpZiAodW5zdXBwb3J0ZWRNZW1iZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRNZW1iZXIubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkTWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbWV0aG9kcyA9IG1lbWJlcnNcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBtYWluTWV0aG9kID0gbWFpbk1ldGhvZHNbMF1cbiAgY29uc3QgZnVuY3Rpb25NZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZCkgPT4gbWV0aG9kICE9IG1haW5NZXRob2QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZnVuY3Rpb25NZXRob2RzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY2xhc3Mgd2l0aG91dCBhIHNlbWFudGljIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoIW1haW5NZXRob2QgfHwgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IG9uZSB1bmFtYmlndW91cyBtYWluXCIsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IG5vbWluYWxOb2RlcyA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uICE9IGNsYXNzRGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBub21pbmFsTm9kZXMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICAgIHJldHVybiBwYXJlbnQgJiYgbm9kZVRleHQocGFyZW50LCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCJcbiAgfSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiZcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSkpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAgIG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiICYmIG5vZGVUZXh0KG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBtZW1iZXIsIHNvdXJjZSkgPT0gXCJwcml2YXRlXCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMoZGVjbGFyYXRpb24pKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoZXJyb3JOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKHJlY29yZE5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlY29yZE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChyZWNvcmROb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCByZWZlcmVuY2VEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb25dKSkpKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlZmVyZW5jZURlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChlcnJvckRlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YUVycm9yKGVycm9yTm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChyZWZlcmVuY2VEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChyZWNvcmROb2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGZhbHNlLCBgZnVuY3Rpb246JHtpbmRleH1gLCByZWZlcmVuY2VEZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbG9jYXRpb24pKVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhjbGFzc05vZGUsIHJlZmVyZW5jZURlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBjb252ZXJ0RW50cnlQb2ludChtYWluTWV0aG9kLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCxcbiAgICBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZClcblxuICByZXR1cm4ge2VudHJ5UG9pbnQsIGZ1bmN0aW9ucywga2luZDogXCJNb2R1bGVcIiwgbG9jYXRpb24sIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIHRvcC1sZXZlbCBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgcHJvZ3JhbSBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBwcm9ncmFtIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIikgcmV0dXJuIG1lbWJlcnNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcImphdmFcIiwgXCJ0b3BcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCB0b3AtbGV2ZWwgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZXMgPSBbXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCIsXG4gICAgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiXVxuICBjb25zdCBtYXRjaGVzID0gbmFtZXMuZXZlcnkoKG5hbWUsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4ICsgMV0/Lm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1lbWJlcnNbaW5kZXggKyAxXSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbbmFtZXMubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtdG9wLWVuZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBtZW1iZXJzLnNsaWNlKG5hbWVzLmxlbmd0aCArIDIpXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIE1haW4tbWVtYmVyIHN1cHBvcnQgZW1pdHRlZCBmb3IgdGhlIGJ1aWx0LWluIHByb2JlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gbWVtYmVycyAtIFBhcnNlZCBNYWluIG1lbWJlcnMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IFBvcnRhYmxlIE1haW4gbWVtYmVycy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFNYWluTWVtYmVycyhtZW1iZXJzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgfHwgbm9kZVRleHQobWVtYmVyc1swXSwgc291cmNlKSAhPSBcIi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwibWVtYmVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJGaWVsZERlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSxcbiAgICBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzW2luZGV4ICsgMV1cbiAgICBpZiAobWVtYmVyPy5uYW1lICE9IGtpbmQpIHJldHVybiBmYWxzZVxuICAgIGlmIChraW5kID09IFwiRmllbGREZWNsYXJhdGlvblwiKSByZXR1cm4gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpLmluY2x1ZGVzKGAgJHtuYW1lfSA9YClcbiAgICByZXR1cm4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lXG4gIH0pXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbZXhwZWN0ZWQubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShleHBlY3RlZC5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbHJlYWR5LXF1YWxpZmllZCBjYW5vbmljYWwgSmF2YSBjb21waWxhdGlvbiB1bml0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHJvb3QgLSBFcnJvci1mcmVlIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBwcm9ncmFtIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZShyb290LCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpIHtcbiAgaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChzdHJ1Y3R1cmFsQ2hpbGRyZW4ocm9vdCkuZmluZCgobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJOYW1lcyA9IGNsYXNzTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzTW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCBtYWluTWV0aG9kcyA9IG1lbWJlcnMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBpc0Vycm9yID0gQm9vbGVhbihzdXBlcmNsYXNzICYmIG5vZGVUZXh0KHN1cGVyY2xhc3MsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIilcbiAgY29uc3QgaXNSZWNvcmQgPSAhaXNFcnJvciAmJiBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInNlbGVjdGVkIGVudHJ5IGNsYXNzIHdpdGhvdXQgcHVibGljIGZpbmFsIHZpc2liaWxpdHlcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IG9uZSBtYWluIG1ldGhvZFwiLCBsb2NhdGlvbilcbiAgaWYgKCFwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24obWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoKGlzUmVjb3JkIHx8IGlzRXJyb3IpICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9taW5hbCBjbGFzcyBjb250YWluaW5nIG1haW5cIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBpc0Vycm9yID8gW3tcbiAgICBpZDogXCJlcnJvcjowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpXG4gIH1dIDogW11cblxuICBjb25zdCByZWNvcmRUeXBlUGFyYW1ldGVycyA9IGlzUmVjb3JkXG4gICAgPyBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgXCJyZWNvcmQ6MFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IGlzUmVjb3JkID8gW3tcbiAgICBmaWVsZHM6IFtdLFxuICAgIGlkOiBcInJlY29yZDowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAuLi4ocmVjb3JkVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHJlY29yZFR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSA6IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0ucmVjb3JkcylcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbS5lcnJvcnMgPz8gW10pXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gY29udmVydEphdmFFcnJvcihjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucHJvZ3JhbS5yZWNvcmRzLnZhbHVlcygpLCAuLi5yZWNvcmREZWNsYXJhdGlvbnNdXG4gICAgLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGNvbnZlcnRKYXZhUmVjb3JkKGNsYXNzRGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTWV0aG9kcyA9IGlzUmVjb3JkIHx8IGlzRXJyb3IgPyBbXSA6IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJiAhbWFpbk1ldGhvZHMuaW5jbHVkZXMobWVtYmVyKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHRydWUsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICAvKiogQHR5cGUge1tzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZV1bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXMgPSBbLi4ucHJvZ3JhbS5mdW5jdGlvbnNdLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSwgLi4uaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXNdKVxuXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVtcHR5QmxvY2sgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBbXX1cbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2dyYW0uaXNFbnRyeVxuICAgID8gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG4gICAgOiB7Ym9keTogZW1wdHlCbG9jaywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGRpcmVjdCBwYWNrYWdlL2ltcG9ydC9jbGFzcyBub2RlcyBmcm9tIHRoZSBwaW5uZWQgTGV6ZXIgZ3JhbW1hci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgSmF2YSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpXG4gIGNvbnN0IHBhY2thZ2VzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIlBhY2thZ2VEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbXBvcnRzTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgY29uc3QgY2xhc3NlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGludmFsaWQgPSBtZW1iZXJzLmZpbmQoKG5vZGUpID0+ICFbXCJQYWNrYWdlRGVjbGFyYXRpb25cIiwgXCJJbXBvcnREZWNsYXJhdGlvblwiLCBcIkNsYXNzRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSlcbiAgY29uc3QgcGFja2FnZU5vZGUgPSBwYWNrYWdlc1swXVxuICBjb25zdCBjbGFzc05vZGUgPSBjbGFzc2VzWzBdXG5cbiAgaWYgKCFwYWNrYWdlTm9kZSB8fCBwYWNrYWdlcy5sZW5ndGggIT0gMSB8fCAhY2xhc3NOb2RlIHx8IGNsYXNzZXMubGVuZ3RoICE9IDEgfHwgaW52YWxpZCB8fFxuICAgIG1lbWJlcnMuaW5kZXhPZihwYWNrYWdlTm9kZSkgIT0gMCB8fCBtZW1iZXJzLmluZGV4T2YoY2xhc3NOb2RlKSAhPSBtZW1iZXJzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib25lIHBhY2thZ2UgZm9sbG93ZWQgYnkgaW1wb3J0cyBhbmQgb25lIHB1YmxpYyBjbGFzc1wiLFxuICAgICAgbm9kZUxvY2F0aW9uKGludmFsaWQgPz8gcGFja2FnZXNbMV0gPz8gY2xhc3Nlc1sxXSA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhY2thZ2VOYW1lTm9kZSA9IHBhY2thZ2VOb2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcbiAgY29uc3QgY2xhc3NOYW1lTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2xhc3NOb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lTm9kZSA/IG5vZGVUZXh0KHBhY2thZ2VOYW1lTm9kZSwgc291cmNlKSA6IFwiXCJcbiAgY29uc3QgY2xhc3NOYW1lID0gbm9kZVRleHQoY2xhc3NOYW1lTm9kZSwgc291cmNlKVxuICBjb25zdCBleHBlY3RlZFN1ZmZpeCA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX0vJHtjbGFzc05hbWV9LmphdmFgXG5cbiAgaWYgKCFwYWNrYWdlTmFtZU5vZGUgfHwgIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChleHBlY3RlZFN1ZmZpeCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicGFja2FnZS9wYXRoL3B1YmxpYy1jbGFzcyBjb250cmFjdFwiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBpbXBvcnRzID0gaW1wb3J0c05vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBub2RlLmdldENoaWxkKFwiSWRlbnRpZmllclwiKVxuXG4gICAgaWYgKCFuYW1lIHx8IG5vZGUuZ2V0Q2hpbGQoXCJzdGF0aWNcIikgfHwgbm9kZS5nZXRDaGlsZChcIkFzdGVyaXNrXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RhdGljIG9yIHdpbGRjYXJkIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHNwZWNpZmllciA9IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIuc3BsaXQoXCIuXCIpLmF0KC0xKSA/PyBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IHJlY29yZENsYXNzID0gY2xhc3NNZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGV4cG9ydHMgPSByZWNvcmRDbGFzc1xuICAgID8gbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInB1YmxpYyBmaW5hbFwiXG4gICAgICA/IFt7ZXhwb3J0ZWROYW1lOiBjbGFzc05hbWUsIGxvY2FsTmFtZTogY2xhc3NOYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgICA6IFtdXG4gICAgOiBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIgPyBbXSA6IGNsYXNzTWVtYmVycy5mbGF0TWFwKChtZW1iZXIpID0+IHtcbiAgICAgIGlmIChtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpIHJldHVybiBbXVxuICAgICAgY29uc3QgbmFtZSA9IHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVycyA9IG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgICAgY29uc3QgbWV0aG9kTW9kaWZpZXJOYW1lcyA9IG1ldGhvZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtZXRob2RNb2RpZmllcnMpLm1hcCgoe25hbWU6IG1vZGlmaWVyTmFtZX0pID0+IG1vZGlmaWVyTmFtZSkgOiBbXVxuXG4gICAgICBpZiAobm9kZVRleHQobmFtZSwgc291cmNlKSA9PSBcIm1haW5cIiB8fCBtZXRob2RNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpID09IFwicHJpdmF0ZSBzdGF0aWNcIikgcmV0dXJuIFtdXG5cbiAgICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYWxOYW1lOiBub2RlVGV4dChuYW1lLCBzb3VyY2UpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgfSlcblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IGAke3BhY2thZ2VOYW1lfS4ke2NsYXNzTmFtZX1gfVxufVxuIl19
|
|
2307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUVqUiwrQ0FBK0M7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDLElBQUksRUFBRSxJQUFJO0lBQ1YsR0FBRyxFQUFFLEdBQUc7SUFDUixJQUFJLEVBQUUsSUFBSTtJQUNWLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFF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LEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDbEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNwRCxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFFbEksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1lBRXBHLE9BQU8sQ0FBQyxFQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDNUssQ0FBQyxDQUFDLENBQUE7SUFFSixPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLElBQUksU0FBUyxFQUFFLEVBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2VyfSBmcm9tIFwiQGxlemVyL2phdmFcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWMsIG1pc3NpbmdUeXBlLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCBzb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7Y2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcywgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBzaW1wbGVTdHJpbmdFc2NhcGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFwiXFxcIlwiOiBcIlxcXCJcIixcbiAgXCInXCI6IFwiJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXCIsXG4gIGI6IFwiXFxiXCIsXG4gIGY6IFwiXFxmXCIsXG4gIG46IFwiXFxuXCIsXG4gIHI6IFwiXFxyXCIsXG4gIHM6IFwiIFwiLFxuICB0OiBcIlxcdFwiXG59KVxuY29uc3QgamF2YUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIiYmXCIsIFwiQW5kXCJdLFxuICBbXCJ8fFwiLCBcIk9yXCJdLFxuICBbXCI9PVwiLCBcIkphdmFFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJKYXZhTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUNvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gW2N1cnJlbnRDbGFzc10gLSBFbmNsb3NpbmcgcmVmZXJlbmNlIGNsYXNzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U2V0PHN0cmluZz59IGVyYXNlZEJpbmRpbmdOYW1lcyAtIFNvdXJjZSBiaW5kaW5ncyBjb25zdW1lZCBieSBleGFjdCBzZW1hbnRpYyBmb2xkcyBpbiB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBFeHBsaWNpdCBtb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgdW5kZWZpbmVkfSByZXR1cm5UeXBlIC0gRW5jbG9zaW5nIHJldHVybiB0eXBlLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENvbXBsZXRlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbmFtZUxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG5hbWUgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJldHVyblR5cGUgLSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBkaXJlY3QgY2hpbGQgc3ludGF4IG5vZGVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IENoaWxkIHN5bnRheCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gZGlyZWN0Q2hpbGRyZW4obm9kZSkge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG5cbiAgZm9yIChsZXQgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSBjaGlsZHJlbi5wdXNoKGNoaWxkKVxuXG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIFJldHVybnMgc3RydWN0dXJhbCBkaXJlY3QgY2hpbGRyZW4sIGV4Y2x1ZGluZyBrbm93biBncmFtbWFyIGRlbGltaXRlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBzeW50YXggbm9kZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTmFtZWQgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKSB7XG4gIHJldHVybiBkaXJlY3RDaGlsZHJlbihub2RlKS5maWx0ZXIoKGNoaWxkKSA9PiAhW1wie1wiLCBcIn1cIiwgXCIoXCIsIFwiKVwiLCBcIixcIiwgXCI7XCIsIFwiLlwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZGVzY2VuZGFudCBzeW50YXggbm9kZXMgd2l0aCBhIGdpdmVuIG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFJvb3Qgc3ludGF4IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5vZGUgbmFtZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTWF0Y2hpbmcgZGVzY2VuZGFudHMuXG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRhbnRzKG5vZGUsIG5hbWUpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBkaXJlY3RDaGlsZHJlbihub2RlKSkge1xuICAgIGlmIChjaGlsZC5uYW1lID09IG5hbWUpIG1hdGNoZXMucHVzaChjaGlsZClcbiAgICBtYXRjaGVzLnB1c2goLi4uZGVzY2VuZGFudHMoY2hpbGQsIG5hbWUpKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgZGlyZWN0IGNoaWxkIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDaGlsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IENoaWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkQ2hpbGQobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZCA9IG5vZGUuZ2V0Q2hpbGQobmFtZSlcblxuICBpZiAoIWNoaWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGAke25vZGUubmFtZX0gd2l0aG91dCAke25hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiBjaGlsZFxufVxuXG4vKipcbiAqIFJldHVybnMgYSBub3JtYWxpemVkIExlemVyIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUuZnJvbSwgbm9kZS50bylcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHNvdXJjZSB0ZXh0IGJlbG9uZ2luZyB0byBhIHN5bnRheCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE5vZGUgdGV4dC5cbiAqL1xuZnVuY3Rpb24gbm9kZVRleHQobm9kZSwgc291cmNlKSB7XG4gIHJldHVybiBzb3VyY2Uuc2xpY2Uobm9kZS5mcm9tLCBub2RlLnRvKVxufVxuXG4vKipcbiAqIFByb3ZlcyBhbiBleGFjdCBwYXJzZXItc3RydWN0dXJlZCBKYXZhIHF1YWxpZmllZCBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBJZGVudGlmaWVyIG9yIGZpZWxkLWFjY2VzcyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gRXhhY3Qgc3RydWN0dXJhbCBuYW1lIHBhcnRzLlxuICovXG5mdW5jdGlvbiBxdWFsaWZpZWROYW1lUGFydHMobm9kZSwgc291cmNlKSB7XG4gIGlmIChbXCJJZGVudGlmaWVyXCIsIFwiVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIFtub2RlVGV4dChub2RlLCBzb3VyY2UpXVxuICBpZiAoIVtcIkZpZWxkQWNjZXNzXCIsIFwiU2NvcGVkVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMikgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBsZWZ0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzBdLCBzb3VyY2UpXG4gIGNvbnN0IHJpZ2h0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzFdLCBzb3VyY2UpXG5cbiAgcmV0dXJuIGxlZnQgJiYgcmlnaHQgPyBbLi4ubGVmdCwgLi4ucmlnaHRdIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBvbmx5IGFjY2VwdGVkIEphdmEgT3B0aW9uYWwgdHlwZS9mYWN0b3J5IHN5bWJvbCBzcGVsbGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlci1xdWFsaWZpZWQgc3ltYm9sIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaWRlbnRpZmllcyBqYXZhLnV0aWwuT3B0aW9uYWwgb3IgT3B0aW9uYWwuXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YU9wdGlvbmFsU3ltYm9sKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBwYXJ0cyA9IHF1YWxpZmllZE5hbWVQYXJ0cyhub2RlLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcImphdmEudXRpbC5PcHRpb25hbFwiIHx8IHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcIk9wdGlvbmFsXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBKYXZhIGV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBDb250ZXh0dWFsIHNlbWFudGljIHR5cGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyZW50aGVzaXplZCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSl9LCB7bmFtZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInRoaXNcIikge1xuICAgIGlmICghY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNlaXZlciBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgbWVtYmVyID0gY2hpbGRyZW5bMV1cblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcInRoaXNcIiB8fCBtZW1iZXI/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgIWNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBpZiAocmVjZWl2ZXIgJiYga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaXZhdGUgcmVmZXJlbmNlLWNsYXNzIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJmaWVsZCBhY2Nlc3Mgb3V0c2lkZSB0aGUgZGVjbGFyaW5nIHJlY2VpdmVyXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGVUZXh0KG1lbWJlciwgc291cmNlKSlcblxuICAgIGlmICghZmllbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVua25vd24gcHJpdmF0ZSBmaWVsZCAnJHtub2RlVGV4dChtZW1iZXIsIHNvdXJjZSl9J2AsIG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG5cbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkgPT0gXCJ0cnVlXCJ9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIm51bGxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm51bGwgcmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgdHlwZU5vZGUgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gW1wiR2VuZXJpY1R5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKGNoaWxkLm5hbWUpKVxuICAgIGNvbnN0IG5hbWVOb2RlID0gdHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKVswXSA6IHR5cGVOb2RlXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghdHlwZU5vZGUgfHwgIW5hbWVOb2RlIHx8ICFhcmd1bWVudExpc3QgfHwgIWRlY2xhcmF0aW9uIHx8IG5vZGUuZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb25zdHJ1Y3Rpb24gb2YgYW4gdW5rbm93biBub21pbmFsIG9yIGFub255bW91cyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKX0sIHtjbGFzczogY2xhc3NMb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3duZWQgcmVzb3VyY2UgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGUuZ2V0Q2hpbGQoXCJUeXBlQXJndW1lbnRzXCIpXG5cbiAgICBpZiAodHlwZU5vZGUubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIgJiYgIXR5cGVBcmd1bWVudHNOb2RlKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGdlbmVyaWMgcmVjb3JkIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50c05vZGVcbiAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgYXJndW1lbnQsIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgdHlwZUFyZ3VtZW50cywgaW5kZXgpKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY29yZDogcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3Qgb3BlcmF0b3JOb2RlID0gbm9kZS5nZXRDaGlsZChcIkxvZ2ljT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkFyaXRoT3BcIilcbiAgICBjb25zdCBvcGVyYW5kID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJMb2dpY09wXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyaXRoT3BcIilcbiAgICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yTm9kZSA/IG5vZGVUZXh0KG9wZXJhdG9yTm9kZSwgc291cmNlKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFvcGVyYXRvck5vZGUgfHwgIW9wZXJhbmQgfHwgY2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgKG9wZXJhdG9yICE9IFwiIVwiICYmIG9wZXJhdG9yICE9IFwiLVwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdG9yID09IFwiIVwiICYmIG9wZXJhbmQubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIiAmJiBpc0VxdWFsc0ludm9jYXRpb24ob3BlcmFuZCwgc291cmNlKSAmJlxuICAgICAgIWlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihvcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShvcGVyYW5kLCB0cnVlLCBsb2NhdGlvbiwgbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pLCBvcGVyYXRvciA9PSBcIiFcIiA/IFwiTm90XCIgOiBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBuYW1lZCA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IG9wZXJhdG9yTm9kZSA9IG5vZGUuZ2V0Q2hpbGQoXCJDb21wYXJlT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkFyaXRoT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkxvZ2ljT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkJpdE9wXCIpXG5cbiAgICBpZiAoIW9wZXJhdG9yTm9kZSB8fCBuYW1lZC5sZW5ndGggIT0gMykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImJpbmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbbmFtZWRbMF0sIG5hbWVkWzJdXVxuICAgIGNvbnN0IHVuc3VwcG9ydGVkT3BlcmFuZCA9IG9wZXJhbmRzLmZpbmQoKG9wZXJhbmQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKG9wZXJhbmQpKVxuXG4gICAgaWYgKHVuc3VwcG9ydGVkT3BlcmFuZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCB1bnN1cHBvcnRlZE9wZXJhbmQubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkT3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBjb25zdCBvcGVyYXRvciA9IG5vZGVUZXh0KG9wZXJhdG9yTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKCFqYXZhQmluYXJ5T3BlcmF0aW9ucy5oYXMob3BlcmF0b3IpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBiaW5hcnkgJHtvcGVyYXRvcn1gLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmRzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmRzWzFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGphdmFCaW5hcnlPcGVyYXRpb25zLmdldChvcGVyYXRvcikpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJUZXJuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI/XCIgfHwgKGNoaWxkLm5hbWUgPT0gXCJMb2dpY09wXCIgJiYgbm9kZVRleHQoY2hpbGQsIHNvdXJjZSkgPT0gXCI/XCIpKVxuICAgIGNvbnN0IGNvbG9uID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIgfHwgKGNoaWxkLm5hbWUgPT0gXCJMb2dpY09wXCIgJiYgbm9kZVRleHQoY2hpbGQsIHNvdXJjZSkgPT0gXCI6XCIpKVxuICAgIGNvbnN0IG5hbWVkID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQgIT09IHF1ZXN0aW9uICYmIGNoaWxkICE9PSBjb2xvbilcblxuICAgIGlmICghcXVlc3Rpb24gfHwgIWNvbG9uIHx8IG5hbWVkLmxlbmd0aCAhPSAzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidGVybmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYWx0ZXJuYXRlOiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFsyXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5hbWVkWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5hbWVkWzFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgYWx0ZXJuYXRlOiBub2RlTG9jYXRpb24obmFtZWRbMl0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29sb246IG5vZGVMb2NhdGlvbihjb2xvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25kaXRpb246IG5vZGVMb2NhdGlvbihuYW1lZFswXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obmFtZWRbMV0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihxdWVzdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiKSB7XG4gICAgaWYgKGlzRXF1YWxzSW52b2NhdGlvbihub2RlLCBzb3VyY2UpICYmICFpc1plcm9Bcmd1bWVudFJlY29yZE1lbWJlckludm9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gY29udmVydFN0cmluZ0VxdWFsaXR5KG5vZGUsIGZhbHNlLCBsb2NhdGlvbiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJBcmd1bWVudExpc3RcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudE5vZGVzID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgICBjb25zdCByZWNlaXZlciA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWV0aG9kID0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHJlY2VpdmVyVGV4dCA9IHJlY2VpdmVyID8gbm9kZVRleHQocmVjZWl2ZXIsIHNvdXJjZSkgOiBcIlwiXG5cbiAgICBpZiAocmVjZWl2ZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbWV0aG9kID09IFwiZ2V0TWVzc2FnZVwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDAgJiZcbiAgICAgIGNvbnRleHQuYmluZGluZ3MuZ2V0KHJlY2VpdmVyVGV4dCk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvck1lc3NhZ2VSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogcmVjZWl2ZXJMb2NhdGlvbiwgbmFtZTogcmVjZWl2ZXJUZXh0fSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIFtcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJ0b1N0cmluZ1wiLCBcImNsb25lXCIsIFwibm90aWZ5XCIsIFwibm90aWZ5QWxsXCIsIFwid2FpdFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicmVmbGVjdGl2ZSBvciBPYmplY3QgbWVtYmVyIGFjY2Vzc1wiLCBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlZmVyZW5jZVR5cGV9ICovIChcbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG4gICAgICBjb25zdCBkZWNsYXJlZE1ldGhvZCA9IGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXJUeXBlLmRlY2xhcmF0aW9uSWQpPy5tZXRob2RzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbWV0aG9kKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRNZXRob2Q/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG1ldGhvZDogZGVjbGFyZWRNZXRob2Q/LmlkID8/IG1ldGhvZCxcbiAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBpc0phdmFPcHRpb25hbFN5bWJvbChyZWNlaXZlciwgc291cmNlKSkge1xuICAgICAgY29uc3QgZmFjdG9yeUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChtZXRob2QgPT0gXCJlbXB0eVwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgICAgYWJzZW5jZTogZmFjdG9yeUxvY2F0aW9uLFxuICAgICAgICAgIGZhY3Rvcnk6IGZhY3RvcnlMb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PSBcIm9mXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkKVxuICAgICAgICB9LCB7ZmFjdG9yeTogZmFjdG9yeUxvY2F0aW9uLCBzb21lOiBmYWN0b3J5TG9jYXRpb259KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGB1bnN1cHBvcnRlZCBPcHRpb25hbC4ke21ldGhvZH1gLCBmYWN0b3J5TG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlcj8ubmFtZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChyZWNlaXZlclRleHQpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIGNvbnN0IG9wZXJhbmQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuICAgICAgY29uc3Qgb3BlcmF0aW9uTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgaWYgKG1ldGhvZCA9PSBcImlzUHJlc2VudFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0aW9uTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT0gXCJnZXRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgIHVud3JhcDogb3BlcmF0aW9uTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5zdXBwb3J0ZWQgT3B0aW9uYWwuJHttZXRob2R9YCwgb3BlcmF0aW9uTG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcIm9mXCIgJiYgcmVjZWl2ZXJUZXh0ID09IFwiamF2YS51dGlsLkxpc3RcIikge1xuICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZWxlbWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKSksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJvZlwiICYmIHJlY2VpdmVyVGV4dCA9PSBcImphdmEudXRpbC5NYXBcIikge1xuICAgICAgaWYgKGFyZ3VtZW50Tm9kZXMubGVuZ3RoICUgMiAhPSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiTWFwLm9mIG9kZCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICAgIGlmIChhcmd1bWVudE5vZGVzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJqYXZhLnV0aWwuTWFwLm9mIHN1cHBvcnRzIGF0IG1vc3QgdGVuIGVudHJpZXNcIiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgICAgICBjb25zdCBrZXlOb2RlID0gYXJndW1lbnROb2Rlc1tpbmRleF1cblxuICAgICAgICBpZiAoa2V5Tm9kZS5uYW1lICE9IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXlOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBkaXJlY3RDaGlsZHJlbihhcmd1bWVudExpc3QpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiLFwiICYmXG4gICAgICAgICAgY2hpbGQuZnJvbSA+PSBrZXlOb2RlLnRvICYmIGNoaWxkLnRvIDw9IGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXS5mcm9tKVxuXG4gICAgICAgIGlmICghc2VwYXJhdG9yKSB0aHJvdyBuZXcgRXJyb3IoXCJMZXplciBvbWl0dGVkIHRoZSBKYXZhIE1hcC5vZiBlbnRyeSBzZXBhcmF0b3IuXCIpXG4gICAgICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBrZXk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKGNvbnZlcnRFeHByZXNzaW9uKGtleU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBFbnRyeVwiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBrZXlOb2RlLmZyb20sIGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXS50byksXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdmFsdWVUeXBlKVxuICAgICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihzZXBhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtlbnRyaWVzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgZmFjdG9yeTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwiZ2V0XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIubmFtZSA9PSBcIklkZW50aWZpZXJcIiA/IGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgfHxcbiAgICAgICAgKCFyZWNlaXZlclR5cGUgJiYgYXJndW1lbnROb2Rlc1swXS5uYW1lID09IFwiU3RyaW5nTGl0ZXJhbFwiKSkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGluZGV4OiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJmYWlsLW9uLWFic2VuY2VcIilcbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcInNpemVcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbWV0aG9kLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgcmVjZWl2ZXJUZXh0ID09IFwiTWFpblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzICYmICFjb250ZXh0LmJpbmRpbmdzLmhhcyhyZWNlaXZlclRleHQpKSB7XG4gICAgICBjb25zdCBsb2NhbFNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChtZXRob2QpXG5cbiAgICAgIGlmIChsb2NhbFNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgbG9jYWxTaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogbWV0aG9kLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIpIHtcbiAgICAgIGNvbnN0IHF1YWxpZmllZE5hbWUgPSBgJHtyZWNlaXZlclRleHR9LiR7bWV0aG9kfWBcbiAgICAgIGNvbnN0IHF1YWxpZmllZFNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChxdWFsaWZpZWROYW1lKVxuXG4gICAgICBpZiAocXVhbGlmaWVkU2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudE5vZGVzLm1hcCgoY2hpbGQsIGluZGV4KSA9PlxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBxdWFsaWZpZWRTaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogcXVhbGlmaWVkTmFtZSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG1ldGhvZCxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRSZWNlaXZlciA9IHJlY2VpdmVyXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRSZWNlaXZlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1ldGhvZCBpbnZvY2F0aW9uIHJlY2VpdmVyXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gYXJndW1lbnROb2Rlcy5maW5kKChjaGlsZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUoY2hpbGQpKVxuXG4gICAgaWYgKHVuc3VwcG9ydGVkQXJndW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYG1ldGhvZCBhcmd1bWVudCAke3Vuc3VwcG9ydGVkQXJndW1lbnQubmFtZX1gLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRBcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmU/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBub2RlLm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgb25lIHBhcnNlci1uYXRpdmUgSmF2YSBzdHJpbmcgZXF1YWxpdHkgaW52b2NhdGlvbiBmb3JtLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgaW52b2NhdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHNwZWxscyBgLmVxdWFsc2Agd2l0aCBhIHJlY2VpdmVyLlxuICovXG5mdW5jdGlvbiBpc0VxdWFsc0ludm9jYXRpb24obm9kZSwgc291cmNlKSB7XG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCByZWNlaXZlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG5cbiAgcmV0dXJuIG1ldGhvZE5hbWUgIT0gbnVsbCAmJiBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpID09IFwiZXF1YWxzXCIgJiYgcmVjZWl2ZXJzLmxlbmd0aCA9PSAxXG59XG5cbi8qKlxuICogRGlzdGluZ3Vpc2hlcyBhIHplcm8tYXJndW1lbnQgbm9taW5hbCBmaWVsZCBhY2Nlc3NvciBmcm9tIEphdmEgc3RyaW5nIGVxdWFsaXR5IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGludm9jYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBpcyBhIGtub3duIHJlY29yZCByZWNlaXZlciB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCByZWNlaXZlciA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG5cbiAgcmV0dXJuIGFyZ3VtZW50TGlzdCAhPSBudWxsICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmIHJlY2VpdmVyICE9IG51bGwgJiZcbiAgICBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIEphdmEgYC5lcXVhbHNgIG9yIGl0cyBkaXJlY3RseSBuZWdhdGVkIGZvcm0gd2l0aG91dCBzb3VyY2UtdGV4dCBpbmZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlciBtZXRob2QgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbmVnYXRlZCAtIFdoZXRoZXIgYSBwYXJzZXItb3duZWQgdW5hcnkgbm90IHdyYXBzIHRoZSBpbnZvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBXaG9sZSBlcXVhbGl0eSBleHByZXNzaW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3BlcmF0b3JMb2NhdGlvbiAtIFBhcnNlci1vd25lZCBvcGVyYXRvci9tZXRob2QgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBBZGFwdGVkIGVxdWFsaXR5IGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShub2RlLCBuZWdhdGVkLCBsb2NhdGlvbiwgb3BlcmF0b3JMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICBjb25zdCByZWNlaXZlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHVuc3VwcG9ydGVkQXJndW1lbnQgPSBhcmd1bWVudHNfLmZpbmQoKGNoaWxkKSA9PiAhaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShjaGlsZCkpXG5cbiAgaWYgKHJlY2VpdmVycy5sZW5ndGggIT0gMSB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8IHVuc3VwcG9ydGVkQXJndW1lbnQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RyaW5nIGVxdWFscyBpbnZvY2F0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+fSAqL1xuICBjb25zdCByYW5nZXMgPSB7b3BlcmF0b3I6IG9wZXJhdG9yTG9jYXRpb259XG5cbiAgaWYgKG5lZ2F0ZWQpIHtcbiAgICByYW5nZXMuZXF1YWxpdHlPcGVyYXRvciA9IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuXG4gIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgbGVmdDogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICByaWdodDogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgfSwgcmFuZ2VzKSwgbmVnYXRlZCA/IFwiU3RyaW5nTm90RXF1YWxcIiA6IFwiU3RyaW5nRXF1YWxcIilcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgTGV6ZXIgbm9kZSBpcyBpbiB0aGUgZXhwcmVzc2lvbiBzdWJzZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUobm9kZSkge1xuICByZXR1cm4gW1xuICAgIFwiSWRlbnRpZmllclwiLFxuICAgIFwiSW50ZWdlckxpdGVyYWxcIixcbiAgICBcIkJvb2xlYW5MaXRlcmFsXCIsXG4gICAgXCJTdHJpbmdMaXRlcmFsXCIsXG4gICAgXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICBcIlRlcm5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJNZXRob2RJbnZvY2F0aW9uXCIsXG4gICAgXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIixcbiAgICBcIkZpZWxkQWNjZXNzXCIsXG4gICAgXCJ0aGlzXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiXG4gIF0uaW5jbHVkZXMobm9kZS5uYW1lKVxufVxuXG4vKipcbiAqIEFwcGxpZXMgSmF2YSBVbmljb2RlIHRyYW5zbGF0aW9uIGJlZm9yZSB0b2tlbi1sZXZlbCBzdHJpbmcgZXNjYXBlIGRlY29kaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGxpdGVyYWwgLSBQYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIExpdGVyYWwgc291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge3N0cmluZ30gVW5pY29kZS10cmFuc2xhdGVkIGxpdGVyYWwuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zbGF0ZVVuaWNvZGVFc2NhcGVzKGxpdGVyYWwsIGxvY2F0aW9uKSB7XG4gIGxldCB0cmFuc2xhdGVkID0gXCJcIlxuICBsZXQgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IDBcbiAgbGV0IHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IGZhbHNlXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpdGVyYWwubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cbiAgICBjb25zdCBlbGlnaWJsZSA9IGNoYXJhY3RlciA9PSBcIlxcXFxcIiAmJiAocHJldmlvdXNXYXNVbmljb2RlRXNjYXBlIHx8IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgJSAyID09IDApXG5cbiAgICBpZiAoZWxpZ2libGUgJiYgbGl0ZXJhbFtpbmRleCArIDFdID09IFwidVwiKSB7XG4gICAgICBsZXQgZGlnaXRzU3RhcnQgPSBpbmRleCArIDJcblxuICAgICAgd2hpbGUgKGxpdGVyYWxbZGlnaXRzU3RhcnRdID09IFwidVwiKSBkaWdpdHNTdGFydCsrXG5cbiAgICAgIGNvbnN0IGhleGFkZWNpbWFsID0gbGl0ZXJhbC5zbGljZShkaWdpdHNTdGFydCwgZGlnaXRzU3RhcnQgKyA0KVxuICAgICAgY29uc3QgaXNIZXhhZGVjaW1hbCA9IGhleGFkZWNpbWFsLmxlbmd0aCA9PSA0ICYmIFsuLi5oZXhhZGVjaW1hbF0uZXZlcnkoKGRpZ2l0KSA9PlxuICAgICAgICAoZGlnaXQgPj0gXCIwXCIgJiYgZGlnaXQgPD0gXCI5XCIpIHx8IChkaWdpdCA+PSBcIkFcIiAmJiBkaWdpdCA8PSBcIkZcIikgfHwgKGRpZ2l0ID49IFwiYVwiICYmIGRpZ2l0IDw9IFwiZlwiKVxuICAgICAgKVxuXG4gICAgICBpZiAoIWlzSGV4YWRlY2ltYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVkQ2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoaGV4YWRlY2ltYWwsIDE2KSlcblxuICAgICAgdHJhbnNsYXRlZCArPSB0cmFuc2xhdGVkQ2hhcmFjdGVyXG4gICAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gdHJhbnNsYXRlZENoYXJhY3RlciA9PSBcIlxcXFxcIiA/IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgKyAxIDogMFxuICAgICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gdHJ1ZVxuICAgICAgaW5kZXggPSBkaWdpdHNTdGFydCArIDNcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdHJhbnNsYXRlZCArPSBjaGFyYWN0ZXJcbiAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gY2hhcmFjdGVyID09IFwiXFxcXFwiID8gY29uc2VjdXRpdmVCYWNrc2xhc2hlcyArIDEgOiAwXG4gICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cmFuc2xhdGVkXG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgYWNjZXB0ZWQgZXNjYXBlcyBmcm9tIG9uZSBwYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgU3RyaW5nTGl0ZXJhbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERlY29kZWQgVW5pY29kZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsaXRlcmFsID0gdHJhbnNsYXRlVW5pY29kZUVzY2FwZXMobm9kZVRleHQobm9kZSwgc291cmNlKSwgbG9jYXRpb24pXG4gIGxldCB2YWx1ZSA9IFwiXCJcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGl0ZXJhbC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT0gXCJcXFwiXCIgfHwgY2hhcmFjdGVyID09IFwiXFxuXCIgfHwgY2hhcmFjdGVyID09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgIHZhbHVlICs9IGNoYXJhY3RlclxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggKyAxID49IGxpdGVyYWwubGVuZ3RoIC0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImludmFsaWQgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBlc2NhcGVkID0gbGl0ZXJhbFsrK2luZGV4XVxuICAgIGNvbnN0IHNpbXBsZSA9IHNpbXBsZVN0cmluZ0VzY2FwZXNbZXNjYXBlZF1cblxuICAgIGlmIChzaW1wbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgKz0gc2ltcGxlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChlc2NhcGVkID49IFwiMFwiICYmIGVzY2FwZWQgPD0gXCI3XCIpIHtcbiAgICAgIGxldCBvY3RhbCA9IGVzY2FwZWRcbiAgICAgIGNvbnN0IG1heGltdW1MZW5ndGggPSBlc2NhcGVkIDw9IFwiM1wiID8gMyA6IDJcblxuICAgICAgd2hpbGUgKG9jdGFsLmxlbmd0aCA8IG1heGltdW1MZW5ndGggJiYgbGl0ZXJhbFtpbmRleCArIDFdID49IFwiMFwiICYmIGxpdGVyYWxbaW5kZXggKyAxXSA8PSBcIjdcIikge1xuICAgICAgICBvY3RhbCArPSBsaXRlcmFsWysraW5kZXhdXG4gICAgICB9XG5cbiAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KG9jdGFsLCA4KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoIWhhc09ubHlVbmljb2RlU2NhbGFycyh2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IEphdmEgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lICE9IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlcyA9IGRpcmVjdENoaWxkcmVuKHN0YXRlbWVudCkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcInJldHVyblwiICYmIGNoaWxkLm5hbWUgIT0gXCI7XCIpXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBleHByZXNzaW9uTm9kZXMubGVuZ3RoID09IDEgPyBleHByZXNzaW9uTm9kZXNbMF0gOiB1bmRlZmluZWRcblxuICBpZiAoZXhwcmVzc2lvbk5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZCA9IGV4cHJlc3Npb25Ob2Rlc1swXVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgXCJqYXZhXCIsXG4gICAgICB1bnN1cHBvcnRlZD8ubmFtZSA/PyBcInJldHVybiBleHByZXNzaW9uXCIsXG4gICAgICB1bnN1cHBvcnRlZCA/IG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvblxuICAgIClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGV4cHJlc3Npb24gPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZSB8IHVuZGVmaW5lZH0gKi8gKGNvbnRleHQucmV0dXJuVHlwZSlcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBsb2NhbCBkZWNsYXJhdGlvbiBvciBhc3NpZ25tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgb3IgcHJpdmF0ZS1maWVsZCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRvcnMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIilcbiAgICBjb25zdCB0eXBlTm9kZSA9IGRlY2xhcmF0aW9uVHlwZShzdGF0ZW1lbnQpXG4gICAgY29uc3QgdmFyTm9kZSA9IHN0YXRlbWVudC5nZXRDaGlsZChcInZhclwiKVxuICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG1vZGlmaWVyQ2hpbGRyZW4gPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKSA6IFtdXG5cbiAgICBpZiAodmFyTm9kZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInZhciBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24odmFyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibXVsdGlwbGUgbG9jYWwgZGVjbGFyYXRvcnNcIiwgbG9jYXRpb24pXG4gICAgaWYgKCF0eXBlTm9kZSB8fCB0eXBlTm9kZS5uYW1lID09IFwiQXJyYXlUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBsb2NhbCB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIGlmIChtb2RpZmllckNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiZmluYWxcIikgfHwgbW9kaWZpZXJDaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgbG9jYWwgbW9kaWZpZXJzXCIsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IGRlY2xhcmF0b3JzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQoZGVjbGFyYXRvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGRlY2xhcmF0b3IuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBkZWNsYXJhdG9yLmdldENoaWxkcmVuKFwiRGltZW5zaW9uXCIpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXJOb2RlcyA9IGRpcmVjdENoaWxkcmVuKGRlY2xhcmF0b3IpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG5cbiAgICBpZiAoZGltZW5zaW9ucy5sZW5ndGggPiAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYXJyYXkgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICghYXNzaWdubWVudCB8fCBub2RlVGV4dChhc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8IGluaXRpYWxpemVyTm9kZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bmluaXRpYWxpemVkIGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKVxuXG4gICAgaWYgKGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImxvY2FsIGJpbmRpbmcgY29sbGlkZXMgd2l0aCBhIGNvbnN1bWVkIHNvdXJjZSBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjb252ZXJ0RXhwcmVzc2lvbihpbml0aWFsaXplck5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyLFxuICAgICAga2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG1vZGlmaWVyQ2hpbGRyZW4ubGVuZ3RoID09IDAsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpXG5cbiAgICBpZiAoIWFzc2lnbm1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXNzaWdubWVudClcbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IHRhcmdldCA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGNoaWxkcmVuLmF0KC0xKVxuXG4gICAgaWYgKCFvcGVyYXRvciB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNvbXBvdW5kIGFzc2lnbm1lbnRcIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICh0YXJnZXQ/Lm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBjb25zdCB0YXJnZXRDaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbih0YXJnZXQpXG4gICAgICBjb25zdCByZWNlaXZlciA9IHRhcmdldENoaWxkcmVuWzBdXG4gICAgICBjb25zdCBtZW1iZXIgPSB0YXJnZXRDaGlsZHJlblsxXVxuICAgICAgY29uc3QgZmllbGQgPSB0YXJnZXRDaGlsZHJlbi5sZW5ndGggPT0gMiAmJiByZWNlaXZlcj8ubmFtZSA9PSBcInRoaXNcIiAmJiBtZW1iZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgPyBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlVGV4dChtZW1iZXIsIHNvdXJjZSkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghZmllbGQgfHwgIWV4cHJlc3Npb24gfHwgZXhwcmVzc2lvbiA9PSB0YXJnZXQgfHwgZXhwcmVzc2lvbiA9PSBvcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHJpdmF0ZSBmaWVsZCB3cml0ZSBvdXRzaWRlIHRoZSBkZWNsYXJpbmcgcmVjZWl2ZXJcIiwgbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICAgIGZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiksIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSxcbiAgICAgIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC5uYW1lICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHRhcmdldD8ubmFtZSA/PyBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIHRhcmdldCA/IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgaWYgKCFleHByZXNzaW9uIHx8IGV4cHJlc3Npb24gPT0gdGFyZ2V0IHx8IGV4cHJlc3Npb24gPT0gb3BlcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJhc3NpZ25tZW50IGV4cHJlc3Npb25cIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlVGV4dCh0YXJnZXQsIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IG5vZGVUZXh0KHRhcmdldCwgc291cmNlKVxuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gY29udGV4dC5iaW5kaW5ncy5nZXQodGFyZ2V0TmFtZSlcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICBiaW5kaW5nVHlwZT8ua2luZCA9PSBcIkVycm9yVHlwZVwiID8gdW5kZWZpbmVkIDogYmluZGluZ1R5cGUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBleHByZXNzaW9uOiB2YWx1ZSxcbiAgICAgIGtpbmQ6IFwiQXNzaWdubWVudFN0YXRlbWVudFwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXQ6IHRhcmdldEV4cHJlc3Npb25cbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgZGlyZWN0IEphdmEgYmxvY2sgY2hpbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlRocm93U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVJhaXNlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVRyeShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJFbmhhbmNlZEZvclN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEZvckVhY2goc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5uYW1lID09IFwiQ29udGludWVTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGxhYmVsID0gc3RhdGVtZW50LmdldENoaWxkKFwiTGFiZWxcIilcblxuICAgIGlmIChsYWJlbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgbGFiZWxlZCAke3N0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn1gLFxuICAgICAgbm9kZUxvY2F0aW9uKGxhYmVsLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBrZXl3b3JkID0gcmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihrZXl3b3JkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChcbiAgICAgICAgc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiXG4gICAgICApLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgaWYgKHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICBjb25zdCBpbnZvY2F0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiTWV0aG9kSW52b2NhdGlvblwiKVxuXG4gICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBpbnZvY2F0aW9uLmdldENoaWxkKFwiRmllbGRBY2Nlc3NcIilcbiAgICBjb25zdCBtZXRob2ROYW1lID0gaW52b2NhdGlvbi5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcblxuICAgIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk1ldGhvZENhbGxFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oaW52b2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgKSxcbiAgICAgICAga2luZDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHRocm93IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SYWlzZVN0YXRlbWVudH0gU2VtYW50aWMgcmFpc2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhUmFpc2Uoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uc3RydWN0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0aW9uPy5nZXRDaGlsZChcIlR5cGVOYW1lXCIpXG4gIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjb25zdHJ1Y3Rpb24/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpIDogW11cbiAgY29uc3QgZGVjbGFyYXRpb24gPSB0eXBlTm9kZSA/IGNvbnRleHQuZXJyb3JOYW1lcy5nZXQobm9kZVRleHQodHlwZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFjb25zdHJ1Y3Rpb24gfHwgIXR5cGVOb2RlIHx8ICFhcmd1bWVudHNOb2RlIHx8ICFkZWNsYXJhdGlvbiB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8IGNvbnN0cnVjdGlvbi5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0aHJvdyBvdGhlciB0aGFuIGV4YWN0IGRlY2xhcmVkIGVycm9yIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBcInRocm93XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGNhdGNoIHdpdGggbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSB0cnkgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gU2VtYW50aWMgZXhhY3QgaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUcnkoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IGNhdGNoZXMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJDYXRjaENsYXVzZVwiKVxuXG4gIGlmICghYm9keSB8fCBjYXRjaGVzLmxlbmd0aCAhPSAxIHx8IHN0YXRlbWVudC5nZXRDaGlsZChcIkZpbmFsbHlDbGF1c2VcIikgfHwgc3RhdGVtZW50LmdldENoaWxkKFwiUmVzb3VyY2VTcGVjaWZpY2F0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRyeSB3aXRob3V0IG9uZSBjYXRjaCBhbmQgbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgaGFuZGxlciA9IGNhdGNoZXNbMF1cbiAgY29uc3QgcGFyYW1ldGVyID0gaGFuZGxlci5nZXRDaGlsZChcIkNhdGNoRm9ybWFsUGFyYW1ldGVyXCIpXG4gIGNvbnN0IGNhdWdodCA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJDYXRjaFR5cGVcIilcbiAgY29uc3QgdHlwZU5vZGVzID0gY2F1Z2h0ID8gc3RydWN0dXJhbENoaWxkcmVuKGNhdWdodCkgOiBbXVxuICBjb25zdCBkZWZpbml0aW9uID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgY2F0Y2hCb2R5ID0gaGFuZGxlci5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVzWzBdXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gIGlmICghcGFyYW1ldGVyIHx8ICFjYXVnaHQgfHwgdHlwZU5vZGVzLmxlbmd0aCAhPSAxIHx8IHR5cGVOb2RlPy5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCAhZGVmaW5pdGlvbiB8fCAhY2F0Y2hCb2R5IHx8ICFkZWNsYXJhdGlvbiB8fFxuICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJicm9hZCwgbXVsdGlwbGUsIG9yIG1hbGZvcm1lZCBjYXRjaFwiLCBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgdHlwZTogY2F1Z2h0TG9jYXRpb25cbiAgfSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzKX1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIGNhdGNoVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IGNhdGNoVHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KSxcbiAgICBjYXRjaEJvZHk6IGNvbnZlcnRCbG9jayhjYXRjaEJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGNhdGNoQ29udGV4dCksXG4gICAgY2F0Y2hUeXBlLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSwgdHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgSmF2YSBlbmhhbmNlZC1mb3Igc3ludGF4IG92ZXIgb25lIHJlc29sdmVkIGBMaXN0PFQ+YC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gRW5oYW5jZWQtZm9yIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBzcGVjID0gbm9kZS5nZXRDaGlsZChcIkZvclNwZWNcIilcbiAgY29uc3QgYm9keSA9IGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbmRMYXN0KChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkZvclNwZWNcIiAmJiBjaGlsZC5uYW1lICE9IFwiZm9yXCIpXG5cbiAgaWYgKCFzcGVjKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgc3BlY2lmaWNhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKCFib2R5IHx8IGJvZHkubmFtZSAhPSBcIkJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3Igd2l0aG91dCBibG9jayBib2R5XCIsIGJvZHkgPyBub2RlTG9jYXRpb24oYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihzcGVjKVxuICBjb25zdCBjb2xvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMl0gOiB1bmRlZmluZWRcbiAgY29uc3QgYmluZGluZ05vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBjb2xvbkluZGV4ID49IDAgPyBjaGlsZHJlbltjb2xvbkluZGV4ICsgMV0gOiB1bmRlZmluZWRcblxuICBpZiAoIXR5cGVOb2RlIHx8ICFiaW5kaW5nTm9kZSB8fCBiaW5kaW5nTm9kZS5uYW1lICE9IFwiRGVmaW5pdGlvblwiIHx8ICFjb2xsZWN0aW9uTm9kZSB8fFxuICAgIGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpLmxlbmd0aCAhPSAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBiaW5kaW5nTm9kZSA/PyBjb2xsZWN0aW9uTm9kZSA/PyBzcGVjXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGVuaGFuY2VkIGZvciBzcGVjaWZpY2F0aW9uXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKGNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiTW9kaWZpZXJzXCIpKSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3IgbW9kaWZpZXJzXCIsIG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25Ob2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtYXBOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKGNvbGxlY3Rpb25Ob2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwVHlwZV8gPSBtYXBOb2RlID8ga25vd25FeHByZXNzaW9uVHlwZShtYXBOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgYXJndW1lbnRMaXN0ICYmIG1hcE5vZGU/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJzZXF1ZW5jZWRFbnRyeVNldFwiICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmXG4gICAgICBtYXBUeXBlXz8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKSA6IFtdXG4gICAgICBjb25zdCBlbnRyeUFyZ3VtZW50cyA9IGVudHJ5VHlwZVsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihlbnRyeVR5cGVbMV0pIDogW11cbiAgICAgIGNvbnN0IHBhcnNlZEtleVR5cGUgPSBlbnRyeUFyZ3VtZW50c1swXVxuICAgICAgICA/IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGVudHJ5QXJndW1lbnRzWzBdLCBcIk1hcCBlbnRyeSBrZXlcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGFyc2VkVmFsdWVUeXBlID0gZW50cnlBcmd1bWVudHNbMV1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1sxXSwgXCJNYXAgZW50cnkgdmFsdWVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoZW50cnlUeXBlLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGVudHJ5VHlwZVswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5NYXAuRW50cnlcIiB8fCBlbnRyeUFyZ3VtZW50cy5sZW5ndGggIT0gMiB8fFxuICAgICAgICAhcGFyc2VkS2V5VHlwZSB8fCAhcGFyc2VkVmFsdWVUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcnNlZEtleVR5cGUsIG1hcFR5cGVfLmtleVR5cGUpIHx8XG4gICAgICAgICFzYW1lVmFsdWVUeXBlKHBhcnNlZFZhbHVlVHlwZSwgbWFwVHlwZV8udmFsdWVUeXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgZW50cnkgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keVN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICAgICAgaWYgKGJvZHlTdGF0ZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHBhaXIgYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlOYW1lID0gbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNvbnRleHQuYmluZGluZ3MuaGFzKGVudHJ5TmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGVudHJ5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksXG4gICAgICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcykuYWRkKGVudHJ5TmFtZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleUJpbmRpbmcgPSBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKFxuICAgICAgICBib2R5U3RhdGVtZW50c1swXSwgZW50cnlOYW1lLCBcImdldEtleVwiLCBtYXBUeXBlXy5rZXlUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuICAgICAgY29uc3QgdmFsdWVCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMV0sIGVudHJ5TmFtZSwgXCJnZXRWYWx1ZVwiLCBtYXBUeXBlXy52YWx1ZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0XG4gICAgICApXG5cbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlCaW5kaW5nLm5hbWUsIGtleUJpbmRpbmcudHlwZSlcbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgdmFsdWVCaW5kaW5nLnR5cGUpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IGNvbnZlcnRTdGF0ZW1lbnRzKGJvZHlTdGF0ZW1lbnRzLnNsaWNlKDIpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICAgICAgfSxcbiAgICAgICAga2V5QmluZGluZyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlQmluZGluZ1xuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgW1wiZW50cnlTZXRcIiwgXCJzZXF1ZW5jZWRFbnRyeVNldFwiXS5pbmNsdWRlcyhub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVub3JkZXJlZCBvciB1bnN1cHBvcnRlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyZWRUeXBlID0gY29udmVydEphdmFUeXBlQXJndW1lbnQodHlwZU5vZGUsIGBJdGVyYXRpb24gYmluZGluZyAnJHtub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKX0nYCwgYmluZGluZ0xvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIiAmJiBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YVwiLCBcIkl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKSxcbiAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUoZGVjbGFyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKGNvbGxlY3Rpb25Ob2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW1tdXRhYmxlIGxvY2FsIGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBvcmRlcmVkLW1hcCBlbnRyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBQYWlyLWJpbmRpbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZW50cnlOYW1lIC0gRW5oYW5jZWQtZm9yIGVudHJ5IGJpbmRpbmcgbmFtZS5cbiAqIEBwYXJhbSB7XCJnZXRLZXlcIiB8IFwiZ2V0VmFsdWVcIn0gYWNjZXNzb3IgLSBSZXF1aXJlZCBlbnRyeSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGV4cGVjdGVkVHlwZSAtIENhbm9uaWNhbCBiaW5kaW5nIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZ30gUGFpciBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKHN0YXRlbWVudCwgZW50cnlOYW1lLCBhY2Nlc3NvciwgZXhwZWN0ZWRUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBkZWZpbml0aW9uID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yPy5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gIGNvbnN0IGluaXRpYWxpemVyID0gZGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gaW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihpbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBub2RlVGV4dChtb2RpZmllcnMgPz8gc3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fFxuICAgIGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8ICFkZWZpbml0aW9uIHx8ICFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgIWluaXRpYWxpemVyIHx8XG4gICAgaW5pdGlhbGl6ZXIubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IGFjY2Vzc29yIHx8XG4gICAgIWFyZ3VtZW50TGlzdCB8fCBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggIT0gMCB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpICE9IGVudHJ5TmFtZSB8fCAhdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nYCwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyBjb2xsaXNpb25gLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTWFwIGl0ZXJhdGlvbiBiaW5kaW5nICcke25hbWV9J2AsIGxvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKCFzYW1lVmFsdWVUeXBlKHR5cGUsIGV4cGVjdGVkVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nIHR5cGVgLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgIG5hbWUsXG4gICAgdHlwZVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHByZXNzaW9uIHR5cGVzIGVzdGFibGlzaGVkIGJ5IEphdmEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID09IDEgPyBrbm93bkV4cHJlc3Npb25UeXBlKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMiAmJiBjaGlsZHJlblswXS5uYW1lID09IFwidGhpc1wiICYmIGNoaWxkcmVuWzFdLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQoY2hpbGRyZW5bMV0sIHNvdXJjZSkpPy50eXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgIXJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PlxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkpXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+XG4gICAgICAgICAgbWV0aG9kLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1YWxpZmllZCA9IGAke25vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpfS4ke25vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSl9YFxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZClcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gc2lnbmF0dXJlID8ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHJldHVyblR5cGVcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgcmVjZWl2ZXIgJiYgYXJndW1lbnRMaXN0ICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJnZXRcIikge1xuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMCAmJiByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gcmVjZWl2ZXJUeXBlLmVsZW1lbnRUeXBlXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkgPz8gLTFcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclR5cGUuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQgJiYgdHlwZU5vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGU/LmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBkaXJlY3Qgc3RydWN0dXJhbCBjaGlsZHJlbiBvZiBvbmUgSmF2YSBibG9jayBpbiBzb3VyY2Ugb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSAhPSBcIkJsb2NrXCIgJiYgbm9kZS5uYW1lICE9IFwiQ29uc3RydWN0b3JCb2R5XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBleHBlY3RlZCBibG9jaywgcmVjZWl2ZWQgJHtub2RlLm5hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmEgc3RhdGVtZW50IHNlcXVlbmNlLCBmb2xkaW5nIHRoZSBleGFjdCBwcm90ZWN0ZWQgb3JkZXJlZC1tYXAgY29uc3RydWN0aW9uIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU2VtYW50aWMgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudHMoc3RhdGVtZW50cywgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBjb252ZXJ0ZWQgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aDspIHtcbiAgICBjb25zdCBvcmRlcmVkID0gY29udmVydEphdmFPcmRlcmVkTWFwU2VxdWVuY2Uoc3RhdGVtZW50cywgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3JkZXJlZCkge1xuICAgICAgY29udmVydGVkLnB1c2gob3JkZXJlZC5zdGF0ZW1lbnQpXG4gICAgICBpbmRleCA9IG9yZGVyZWQubmV4dEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50c1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgaW5kZXggKz0gMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIGNvbnN0cnVjdGlvbiB0aHJvdWdoIGEgcHJpdmF0ZSBMaW5rZWRIYXNoTWFwIGJhY2tpbmcgZm9sbG93ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIFNlcXVlbmNlZE1hcCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IHN0YXRlbWVudHMgLSBEaXJlY3QgYmxvY2sgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIENhbmRpZGF0ZSBiYWNraW5nLWRlY2xhcmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7e3N0YXRlbWVudDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiwgbmV4dEluZGV4OiBudW1iZXJ9IHwgdW5kZWZpbmVkfSBGb2xkZWQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIHN0YXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhY2tpbmdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW3N0YXJ0XVxuICBjb25zdCBiYWNraW5nVHlwZU5vZGUgPSBiYWNraW5nU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoYmFja2luZ1N0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IGJhY2tpbmdUeXBlQ2hpbGRyZW4gPSBiYWNraW5nVHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdUeXBlTm9kZSkgOiBbXVxuXG4gIGlmIChiYWNraW5nVHlwZUNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGJhY2tpbmdUeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmFja2luZ1N0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmFja2luZ01vZGlmaWVycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3JzID0gYmFja2luZ1N0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBiYWNraW5nRGVjbGFyYXRvciA9IGJhY2tpbmdEZWNsYXJhdG9yc1swXVxuICBjb25zdCBiYWNraW5nRGVmaW5pdGlvbiA9IGJhY2tpbmdEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgYmFja2luZ0Fzc2lnbm1lbnQgPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBiYWNraW5nSW5pdGlhbGl6ZXIgPSBiYWNraW5nRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oYmFja2luZ0RlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGUgPSBiYWNraW5nSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbiA9IGNvbnN0cnVjdGlvblR5cGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uVHlwZSkgOiBbXVxuICBjb25zdCBjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgPSBiYWNraW5nSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGJhY2tpbmdBcmd1bWVudHNOb2RlID0gYmFja2luZ1R5cGVDaGlsZHJlblsxXVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzID0gYmFja2luZ0FyZ3VtZW50c05vZGU/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmFja2luZ0FyZ3VtZW50c05vZGUpIDogW11cblxuICBpZiAobm9kZVRleHQoYmFja2luZ01vZGlmaWVycyA/PyBiYWNraW5nU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fCBiYWNraW5nRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHxcbiAgICAhYmFja2luZ0RlZmluaXRpb24gfHwgIWJhY2tpbmdBc3NpZ25tZW50IHx8IG5vZGVUZXh0KGJhY2tpbmdBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFiYWNraW5nSW5pdGlhbGl6ZXIgfHxcbiAgICBiYWNraW5nSW5pdGlhbGl6ZXIubmFtZSAhPSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiIHx8IGJhY2tpbmdJbml0aWFsaXplci5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSB8fFxuICAgIGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiIHx8XG4gICAgc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlblsxXSkubGVuZ3RoICE9IDAgfHwgIWNvbnN0cnVjdGlvbkFyZ3VtZW50cyB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25Bcmd1bWVudHMpLmxlbmd0aCAhPSAwIHx8IGJhY2tpbmdBcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgTGlua2VkSGFzaE1hcCBiYWNraW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmFja2luZ05hbWUgPSBub2RlVGV4dChiYWNraW5nRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhiYWNraW5nTmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGJhY2tpbmdOYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBiYWNraW5nIGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiYWNraW5nRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMF0sIFwiT3JkZXJlZCBtYXAga2V5XCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHZhbHVlVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMV0sIFwiT3JkZXJlZCBtYXAgdmFsdWVcIiwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGxldCBpbmRleCA9IHN0YXJ0ICsgMVxuXG4gIHdoaWxlIChpbmRleCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgcHV0U3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgICBjb25zdCBpbnZvY2F0aW9uID0gcHV0U3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgPyBwdXRTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpIDogbnVsbFxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gaW52b2NhdGlvblxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW52b2NhdGlvbikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghaW52b2NhdGlvbiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBiYWNraW5nTmFtZSB8fFxuICAgICAgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInB1dFwiKSBicmVha1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggIT0gMiB8fCBhcmd1bWVudHNfWzBdLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwdXRcIiwgbm9kZUxvY2F0aW9uKHB1dFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGtleVR5cGUpXG4gICAgICApLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGluZGV4ICs9IDFcbiAgfVxuXG4gIGNvbnN0IHNlYWxTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICBjb25zdCBzZWFsVHlwZU5vZGUgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoc2VhbFN0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IHNlYWxEZWNsYXJhdG9ycyA9IHNlYWxTdGF0ZW1lbnQ/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIikgOiBbXVxuICBjb25zdCBzZWFsRGVjbGFyYXRvciA9IHNlYWxEZWNsYXJhdG9yc1swXVxuICBjb25zdCBzZWFsRGVmaW5pdGlvbiA9IHNlYWxEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3Qgc2VhbEFzc2lnbm1lbnQgPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBzZWFsSW5pdGlhbGl6ZXIgPSBzZWFsRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oc2VhbERlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNlYWxNZXRob2QgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCBzZWFsQXJndW1lbnRzTm9kZSA9IHNlYWxJbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50cyA9IHNlYWxBcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxBcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxSZWNlaXZlciA9IHNlYWxJbml0aWFsaXplcj8ubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFzZWFsU3RhdGVtZW50IHx8IG5vZGVUZXh0KHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICAhc2VhbFR5cGVOb2RlIHx8IHNlYWxEZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhc2VhbERlZmluaXRpb24gfHwgIXNlYWxBc3NpZ25tZW50IHx8IG5vZGVUZXh0KHNlYWxBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8XG4gICAgc2VhbEluaXRpYWxpemVyPy5uYW1lICE9IFwiTWV0aG9kSW52b2NhdGlvblwiIHx8IG5vZGVUZXh0KHNlYWxSZWNlaXZlciA/PyBzZWFsU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkNvbGxlY3Rpb25zXCIgfHxcbiAgICAhc2VhbE1ldGhvZCB8fCBub2RlVGV4dChzZWFsTWV0aG9kLCBzb3VyY2UpICE9IFwidW5tb2RpZmlhYmxlU2VxdWVuY2VkTWFwXCIgfHwgc2VhbEFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIHNlYWxBcmd1bWVudHNbMF0ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChzZWFsQXJndW1lbnRzWzBdLCBzb3VyY2UpICE9IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KHNlYWxEZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gYmFja2luZ05hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgYmluZGluZyBjb2xsaXNpb25cIiwgbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib3VuZGFyeVR5cGUgPSBjb252ZXJ0VHlwZShzZWFsVHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24oc2VhbFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3Qgc2VhbFR5cGVDaGlsZHJlbiA9IHNlYWxUeXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZU5vZGUpIDogW11cbiAgY29uc3Qgc2VhbFR5cGVBcmd1bWVudHMgPSBzZWFsVHlwZUNoaWxkcmVuWzFdPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxUeXBlQ2hpbGRyZW5bMV0pIDogW11cblxuICBpZiAoc2VhbFR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChzZWFsVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcFwiIHx8XG4gICAgc2VhbFR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIgfHwgYm91bmRhcnlUeXBlLmtpbmQgIT0gXCJNYXBUeXBlXCIgfHwgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLmtleVR5cGUsIGtleVR5cGUpIHx8XG4gICAgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLnZhbHVlVHlwZSwgdmFsdWVUeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBib3VuZGFyeSB0eXBlIG1pc21hdGNoXCIsIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBvcmRlcmVkTWFwVHlwZShcbiAgICBib3VuZGFyeVR5cGUua2V5VHlwZSxcbiAgICBib3VuZGFyeVR5cGUudmFsdWVUeXBlLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbm9kZUxvY2F0aW9uKHNlYWxUeXBlQXJndW1lbnRzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICApXG5cbiAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcbiAgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuYWRkKGJhY2tpbmdOYW1lKVxuICByZXR1cm4ge1xuICAgIG5leHRJbmRleDogaW5kZXggKyAxLFxuICAgIHN0YXRlbWVudDogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiYWNraW5nSW5pdGlhbGl6ZXIuZnJvbSwgc2VhbEluaXRpYWxpemVyLnRvKVxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihiYWNraW5nSW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ1N0YXRlbWVudC5mcm9tLCBzZWFsU3RhdGVtZW50LnRvKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oc2VhbERlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlYWxBc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBKYXZhIHNjYWxhciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBKYXZhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlQXJndW1lbnQobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVycy5nZXQobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICBpZiAodHlwZVBhcmFtZXRlcj8uaWQpIHJldHVybiB0eXBlVmFyaWFibGUodHlwZVBhcmFtZXRlci5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBub2RlVGV4dChub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHNjYWxhciA9IHNwZWxsaW5nID09IFwiSW50ZWdlclwiID8gXCJpbnRlZ2VyXCIgOiBzcGVsbGluZyA9PSBcIkJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogc3BlbGxpbmcgPT0gXCJTdHJpbmdcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoIXNjYWxhcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gdHlwZSBhcmd1bWVudFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSAqLyAoc2NhbGFyKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gc291cmNlVHlwZSAtIEphdmEgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlPy5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwiamF2YVwiLCBcInZvaWRcIiwgc3ViamVjdCwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRpcmVjdCBKYXZhIGRlY2xhcmF0aW9uIHR5cGUgbm9kZSBzdXBwb3J0ZWQgYnkgc2NhbGFyIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gVHlwZSBzeW50YXggbm9kZS5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25UeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZ2V0Q2hpbGQoXCJHZW5lcmljVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiUHJpbWl0aXZlVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiVHlwZU5hbWVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlNjb3BlZFR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IEphdmEgdHlwZS1wYXJhbWV0ZXIgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGVQYXJhbWV0ZXJzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgcmV0dXJuIHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBjaGlsZHJlblswXVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGRlZmluaXRpb24/Lm5hbWUgIT0gXCJEZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJib3VuZGVkLCBhbm5vdGF0ZWQsIG9yIG1hbGZvcm1lZCB0eXBlIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWU6IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFkYXB0aW5nIGFueSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1FcnJvcl0gLSBXaGV0aGVyIHB1YmxpYyBwcm9ncmFtIHZpc2liaWxpdHkgaXMgYWRtaXR0ZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW1FcnJvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJUZXh0ID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkuam9pbihcIiBcIikgOiBcIlwiXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBzdXBlcmNsYXNzQ2hpbGRyZW4gPSBzdXBlcmNsYXNzID8gc3RydWN0dXJhbENoaWxkcmVuKHN1cGVyY2xhc3MpIDogW11cbiAgY29uc3QgcGFyZW50ID0gc3VwZXJjbGFzc0NoaWxkcmVuLmF0KC0xKVxuICBjb25zdCBib2R5ID0gbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKVxuICBjb25zdCBtZW1iZXJzID0gYm9keSA/IHN0cnVjdHVyYWxDaGlsZHJlbihib2R5KSA6IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbWVtYmVyc1swXVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3I/LmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyID8gZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlcikgOiBudWxsXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJDb25zdHJ1Y3RvckJvZHlcIilcbiAgY29uc3QgY29uc3RydWN0b3JTdGF0ZW1lbnRzID0gY29uc3RydWN0b3JCb2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yQm9keSkgOiBbXVxuICBjb25zdCBzdXBlckNhbGwgPSBjb25zdHJ1Y3RvclN0YXRlbWVudHNbMF1cbiAgY29uc3Qgc3VwZXJBcmd1bWVudHMgPSBzdXBlckNhbGw/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHN1cGVyVmFsdWVzID0gc3VwZXJBcmd1bWVudHMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJBcmd1bWVudHMpIDogW11cblxuICBpZiAoKHByb2dyYW1FcnJvciA/ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllclRleHQpIDogbW9kaWZpZXJUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICAhc3VwZXJjbGFzcyB8fCBzdXBlcmNsYXNzQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyZW50Py5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgIT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCAhYm9keSB8fCBtZW1iZXJzLmxlbmd0aCAhPSAxIHx8XG4gICAgY29uc3RydWN0b3I/Lm5hbWUgIT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIgfHxcbiAgICAocHJvZ3JhbUVycm9yID8gbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gY29uc3RydWN0b3IsIHNvdXJjZSkgIT0gXCJwdWJsaWNcIiA6IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpKSB8fFxuICAgIGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpID8/IG5vZGUsIHNvdXJjZSkgIT0gZGVjbGFyYXRpb24ubmFtZSB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1wiIHx8XG4gICAgbm9kZVRleHQocGFyYW1ldGVyTmFtZSA/PyBub2RlLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiIHx8ICFjb25zdHJ1Y3RvckJvZHkgfHwgY29uc3RydWN0b3JTdGF0ZW1lbnRzLmxlbmd0aCAhPSAxIHx8XG4gICAgc3VwZXJDYWxsPy5uYW1lICE9IFwiRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb25cIiB8fCAhc3VwZXJDYWxsLmdldENoaWxkKFwic3VwZXJcIikgfHwgc3VwZXJWYWx1ZXMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlclZhbHVlc1swXS5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGVUZXh0KHN1cGVyVmFsdWVzWzBdLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBwYWNrYWdlLXByaXZhdGUgSmF2YSByZWZlcmVuY2UgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UtbWV0aG9kIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ29uc3RydWN0b3Igb3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuXG4gIGlmIChtb2RpZmllcnMgfHwgbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIikgfHxcbiAgICBjb25zdHJ1Y3RvciAhPSAobm9kZS5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSB8fCBjb25zdHJ1Y3RvciAmJiBuYW1lICE9IGRlY2xhcmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXIpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZU5vZGUgPSBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUgIT0gXCJGb3JtYWxQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIkRpbWVuc2lvblwiKSB8fCAhcGFyYW1ldGVyTmFtZU5vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCByZWZlcmVuY2UgY2xhc3MgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gbm9kZVRleHQocGFyYW1ldGVyTmFtZU5vZGUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpfSxcbiAgICB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZTogY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycyxcbiAgICAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBjb252ZXJ0UmV0dXJuVHlwZShkZWNsYXJhdGlvblR5cGUobm9kZSksIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBib3VuZGVkIGZpbmFsL3ByaXZhdGUtZmllbGQgSmF2YSByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50cnlQb2ludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5nZXRDaGlsZChcIkZvcm1hbFBhcmFtZXRlcnNcIilcbiAgY29uc3QgZGVmaW5pdGlvbiA9IG5vZGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHJldHVyblR5cGUgPSBub2RlLmdldENoaWxkKFwidm9pZFwiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkFycmF5VHlwZVwiKVxuICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcblxuICBpZiAobW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBzdGF0aWNcIiB8fCAhcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1tdXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJhcmdzXCIgfHwgIWRlZmluaXRpb24gfHwgbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKSAhPSBcIm1haW5cIiB8fCAhcmV0dXJuVHlwZSB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBub2RlLmdldENoaWxkKFwiVGhyb3dzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KCksXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9KVxuXG4gIHJldHVybiB7Ym9keSwga2luZDogXCJFbnRyeVBvaW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBwcmludCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gRXhwcmVzc2lvbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gU2VtYW50aWMgcHJpbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGNvbnN0IHByaW50SW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICBpZiAoIXByaW50SW52b2NhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3QgZmllbGRBY2Nlc3MgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICBjb25zdCBtZXRob2ROYW1lID0gcHJpbnRJbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIHdpdGhvdXQgU3lzdGVtLm91dC5wcmludGxuXCIsIG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChwcmludEludm9jYXRpb24sIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaW50bG4gd2l0aG91dCBvbmUgc3VwcG9ydGVkIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudExpc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJpbnRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbjogcHJpbnRMb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YSBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCByZWNvcmRUb2tlbiA9IGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHRyZWUudG9wTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY29yZFRva2VuKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiSmF2YSByZWNvcmQgZGVjbGFyYXRpb24gdW5kZXIgdGhlIHBpbm5lZCBwYXJzZXJcIiwgbm9kZUxvY2F0aW9uKHJlY29yZFRva2VuLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3JhbSkgcmV0dXJuIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUodHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpXG5cbiAgY29uc3QgcHJvZ3JhbU1lbWJlcnMgPSB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcHJvZ3JhbU1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA9IHByb2dyYW1NZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1haW5DbGFzc2VzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwiTWFpblwiKVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWFpbkNsYXNzZXNbMF1cblxuICBpZiAoIWNsYXNzRGVjbGFyYXRpb24gfHwgbWFpbkNsYXNzZXMubGVuZ3RoICE9IDEgfHwgdW5leHBlY3RlZFByb2dyYW1NZW1iZXIgfHwgY2xhc3NEZWNsYXJhdGlvbnMuYXQoLTEpICE9IGNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcGlsYXRpb24gdW5pdCBvdGhlciB0aGFuIHJlY29yZCBjbGFzc2VzIGZvbGxvd2VkIGJ5IG9uZSBNYWluIGNsYXNzXCIsXG4gICAgICBub2RlTG9jYXRpb24odW5leHBlY3RlZFByb2dyYW1NZW1iZXIgPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc05hbWUgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01vZGlmaWVycyA9IGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgY2xhc3NNb2RpZmllck5hbWVzID0gY2xhc3NNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBpZiAobm9kZVRleHQoY2xhc3NOYW1lLCBzb3VyY2UpICE9IFwiTWFpblwiIHx8IGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInB1YmxpYyBmaW5hbCBNYWluIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSB0YXNrMDM0SmF2YU1haW5NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVtYmVyID0gbWVtYmVycy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIilcblxuICBpZiAodW5zdXBwb3J0ZWRNZW1iZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRNZW1iZXIubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkTWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbWV0aG9kcyA9IG1lbWJlcnNcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBtYWluTWV0aG9kID0gbWFpbk1ldGhvZHNbMF1cbiAgY29uc3QgZnVuY3Rpb25NZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZCkgPT4gbWV0aG9kICE9IG1haW5NZXRob2QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZnVuY3Rpb25NZXRob2RzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY2xhc3Mgd2l0aG91dCBhIHNlbWFudGljIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoIW1haW5NZXRob2QgfHwgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IG9uZSB1bmFtYmlndW91cyBtYWluXCIsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IG5vbWluYWxOb2RlcyA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uICE9IGNsYXNzRGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBub21pbmFsTm9kZXMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICAgIHJldHVybiBwYXJlbnQgJiYgbm9kZVRleHQocGFyZW50LCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCJcbiAgfSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiZcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSkpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAgIG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiICYmIG5vZGVUZXh0KG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBtZW1iZXIsIHNvdXJjZSkgPT0gXCJwcml2YXRlXCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMoZGVjbGFyYXRpb24pKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoZXJyb3JOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKHJlY29yZE5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlY29yZE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChyZWNvcmROb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCByZWZlcmVuY2VEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb25dKSkpKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlZmVyZW5jZURlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChlcnJvckRlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YUVycm9yKGVycm9yTm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChyZWZlcmVuY2VEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChyZWNvcmROb2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGZhbHNlLCBgZnVuY3Rpb246JHtpbmRleH1gLCByZWZlcmVuY2VEZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbG9jYXRpb24pKVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhjbGFzc05vZGUsIHJlZmVyZW5jZURlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBjb252ZXJ0RW50cnlQb2ludChtYWluTWV0aG9kLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCxcbiAgICBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZClcblxuICByZXR1cm4ge2VudHJ5UG9pbnQsIGZ1bmN0aW9ucywga2luZDogXCJNb2R1bGVcIiwgbG9jYXRpb24sIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIHRvcC1sZXZlbCBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgcHJvZ3JhbSBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBwcm9ncmFtIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIikgcmV0dXJuIG1lbWJlcnNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcImphdmFcIiwgXCJ0b3BcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCB0b3AtbGV2ZWwgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZXMgPSBbXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCIsXG4gICAgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiXVxuICBjb25zdCBtYXRjaGVzID0gbmFtZXMuZXZlcnkoKG5hbWUsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4ICsgMV0/Lm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1lbWJlcnNbaW5kZXggKyAxXSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbbmFtZXMubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtdG9wLWVuZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBtZW1iZXJzLnNsaWNlKG5hbWVzLmxlbmd0aCArIDIpXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIE1haW4tbWVtYmVyIHN1cHBvcnQgZW1pdHRlZCBmb3IgdGhlIGJ1aWx0LWluIHByb2JlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gbWVtYmVycyAtIFBhcnNlZCBNYWluIG1lbWJlcnMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IFBvcnRhYmxlIE1haW4gbWVtYmVycy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFNYWluTWVtYmVycyhtZW1iZXJzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgfHwgbm9kZVRleHQobWVtYmVyc1swXSwgc291cmNlKSAhPSBcIi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwibWVtYmVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJGaWVsZERlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSxcbiAgICBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzW2luZGV4ICsgMV1cbiAgICBpZiAobWVtYmVyPy5uYW1lICE9IGtpbmQpIHJldHVybiBmYWxzZVxuICAgIGlmIChraW5kID09IFwiRmllbGREZWNsYXJhdGlvblwiKSByZXR1cm4gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpLmluY2x1ZGVzKGAgJHtuYW1lfSA9YClcbiAgICByZXR1cm4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lXG4gIH0pXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbZXhwZWN0ZWQubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShleHBlY3RlZC5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbHJlYWR5LXF1YWxpZmllZCBjYW5vbmljYWwgSmF2YSBjb21waWxhdGlvbiB1bml0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHJvb3QgLSBFcnJvci1mcmVlIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBwcm9ncmFtIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZShyb290LCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpIHtcbiAgaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChzdHJ1Y3R1cmFsQ2hpbGRyZW4ocm9vdCkuZmluZCgobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJOYW1lcyA9IGNsYXNzTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzTW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCBtYWluTWV0aG9kcyA9IG1lbWJlcnMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBpc0Vycm9yID0gQm9vbGVhbihzdXBlcmNsYXNzICYmIG5vZGVUZXh0KHN1cGVyY2xhc3MsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIilcbiAgY29uc3QgaXNSZWNvcmQgPSAhaXNFcnJvciAmJiBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInNlbGVjdGVkIGVudHJ5IGNsYXNzIHdpdGhvdXQgcHVibGljIGZpbmFsIHZpc2liaWxpdHlcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IG9uZSBtYWluIG1ldGhvZFwiLCBsb2NhdGlvbilcbiAgaWYgKCFwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24obWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoKGlzUmVjb3JkIHx8IGlzRXJyb3IpICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9taW5hbCBjbGFzcyBjb250YWluaW5nIG1haW5cIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBpc0Vycm9yID8gW3tcbiAgICBpZDogXCJlcnJvcjowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpXG4gIH1dIDogW11cblxuICBjb25zdCByZWNvcmRUeXBlUGFyYW1ldGVycyA9IGlzUmVjb3JkXG4gICAgPyBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgXCJyZWNvcmQ6MFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IGlzUmVjb3JkID8gW3tcbiAgICBmaWVsZHM6IFtdLFxuICAgIGlkOiBcInJlY29yZDowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAuLi4ocmVjb3JkVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHJlY29yZFR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSA6IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0ucmVjb3JkcylcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbS5lcnJvcnMgPz8gW10pXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gY29udmVydEphdmFFcnJvcihjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucHJvZ3JhbS5yZWNvcmRzLnZhbHVlcygpLCAuLi5yZWNvcmREZWNsYXJhdGlvbnNdXG4gICAgLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGNvbnZlcnRKYXZhUmVjb3JkKGNsYXNzRGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTWV0aG9kcyA9IGlzUmVjb3JkIHx8IGlzRXJyb3IgPyBbXSA6IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJiAhbWFpbk1ldGhvZHMuaW5jbHVkZXMobWVtYmVyKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHRydWUsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICAvKiogQHR5cGUge1tzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZV1bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXMgPSBbLi4ucHJvZ3JhbS5mdW5jdGlvbnNdLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSwgLi4uaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXNdKVxuXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVtcHR5QmxvY2sgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBbXX1cbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2dyYW0uaXNFbnRyeVxuICAgID8gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG4gICAgOiB7Ym9keTogZW1wdHlCbG9jaywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGRpcmVjdCBwYWNrYWdlL2ltcG9ydC9jbGFzcyBub2RlcyBmcm9tIHRoZSBwaW5uZWQgTGV6ZXIgZ3JhbW1hci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgSmF2YSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpXG4gIGNvbnN0IHBhY2thZ2VzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIlBhY2thZ2VEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbXBvcnRzTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgY29uc3QgY2xhc3NlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGludmFsaWQgPSBtZW1iZXJzLmZpbmQoKG5vZGUpID0+ICFbXCJQYWNrYWdlRGVjbGFyYXRpb25cIiwgXCJJbXBvcnREZWNsYXJhdGlvblwiLCBcIkNsYXNzRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSlcbiAgY29uc3QgcGFja2FnZU5vZGUgPSBwYWNrYWdlc1swXVxuICBjb25zdCBjbGFzc05vZGUgPSBjbGFzc2VzWzBdXG5cbiAgaWYgKCFwYWNrYWdlTm9kZSB8fCBwYWNrYWdlcy5sZW5ndGggIT0gMSB8fCAhY2xhc3NOb2RlIHx8IGNsYXNzZXMubGVuZ3RoICE9IDEgfHwgaW52YWxpZCB8fFxuICAgIG1lbWJlcnMuaW5kZXhPZihwYWNrYWdlTm9kZSkgIT0gMCB8fCBtZW1iZXJzLmluZGV4T2YoY2xhc3NOb2RlKSAhPSBtZW1iZXJzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib25lIHBhY2thZ2UgZm9sbG93ZWQgYnkgaW1wb3J0cyBhbmQgb25lIHB1YmxpYyBjbGFzc1wiLFxuICAgICAgbm9kZUxvY2F0aW9uKGludmFsaWQgPz8gcGFja2FnZXNbMV0gPz8gY2xhc3Nlc1sxXSA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhY2thZ2VOYW1lTm9kZSA9IHBhY2thZ2VOb2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcbiAgY29uc3QgY2xhc3NOYW1lTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2xhc3NOb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lTm9kZSA/IG5vZGVUZXh0KHBhY2thZ2VOYW1lTm9kZSwgc291cmNlKSA6IFwiXCJcbiAgY29uc3QgY2xhc3NOYW1lID0gbm9kZVRleHQoY2xhc3NOYW1lTm9kZSwgc291cmNlKVxuICBjb25zdCBleHBlY3RlZFN1ZmZpeCA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX0vJHtjbGFzc05hbWV9LmphdmFgXG5cbiAgaWYgKCFwYWNrYWdlTmFtZU5vZGUgfHwgIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChleHBlY3RlZFN1ZmZpeCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicGFja2FnZS9wYXRoL3B1YmxpYy1jbGFzcyBjb250cmFjdFwiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBpbXBvcnRzID0gaW1wb3J0c05vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBub2RlLmdldENoaWxkKFwiSWRlbnRpZmllclwiKVxuXG4gICAgaWYgKCFuYW1lIHx8IG5vZGUuZ2V0Q2hpbGQoXCJzdGF0aWNcIikgfHwgbm9kZS5nZXRDaGlsZChcIkFzdGVyaXNrXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RhdGljIG9yIHdpbGRjYXJkIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHNwZWNpZmllciA9IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIuc3BsaXQoXCIuXCIpLmF0KC0xKSA/PyBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IHJlY29yZENsYXNzID0gY2xhc3NNZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGV4cG9ydHMgPSByZWNvcmRDbGFzc1xuICAgID8gbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInB1YmxpYyBmaW5hbFwiXG4gICAgICA/IFt7ZXhwb3J0ZWROYW1lOiBjbGFzc05hbWUsIGxvY2FsTmFtZTogY2xhc3NOYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgICA6IFtdXG4gICAgOiBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIgPyBbXSA6IGNsYXNzTWVtYmVycy5mbGF0TWFwKChtZW1iZXIpID0+IHtcbiAgICAgIGlmIChtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpIHJldHVybiBbXVxuICAgICAgY29uc3QgbmFtZSA9IHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVycyA9IG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgICAgY29uc3QgbWV0aG9kTW9kaWZpZXJOYW1lcyA9IG1ldGhvZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtZXRob2RNb2RpZmllcnMpLm1hcCgoe25hbWU6IG1vZGlmaWVyTmFtZX0pID0+IG1vZGlmaWVyTmFtZSkgOiBbXVxuXG4gICAgICBpZiAobm9kZVRleHQobmFtZSwgc291cmNlKSA9PSBcIm1haW5cIiB8fCBtZXRob2RNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpID09IFwicHJpdmF0ZSBzdGF0aWNcIikgcmV0dXJuIFtdXG5cbiAgICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYWxOYW1lOiBub2RlVGV4dChuYW1lLCBzb3VyY2UpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgfSlcblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IGAke3BhY2thZ2VOYW1lfS4ke2NsYXNzTmFtZX1gfVxufVxuIl19
|