mevento 1.2.2 → 1.4.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/esm2020/lib/mevento.mjs +24 -21
- package/fesm2015/mevento.mjs +23 -20
- package/fesm2015/mevento.mjs.map +1 -1
- package/fesm2020/mevento.mjs +23 -20
- package/fesm2020/mevento.mjs.map +1 -1
- package/lib/mevento.d.ts +21 -1
- package/package.json +1 -1
package/esm2020/lib/mevento.mjs
CHANGED
|
@@ -1198,19 +1198,8 @@ class ANodeVisitor {
|
|
|
1198
1198
|
}
|
|
1199
1199
|
}
|
|
1200
1200
|
export class NodeVisitor extends ANodeVisitor {
|
|
1201
|
-
visit(node) {
|
|
1202
|
-
const methodName = `visit${node.constructor.name}`;
|
|
1203
|
-
// const fn = Object.getPrototypeOf(this)[methodName];
|
|
1204
|
-
const fn = this._nodesVisitors[methodName];
|
|
1205
|
-
return fn?.call(this, node);
|
|
1206
|
-
}
|
|
1207
|
-
}
|
|
1208
|
-
export class MEvento extends NodeVisitor {
|
|
1209
1201
|
constructor() {
|
|
1210
1202
|
super();
|
|
1211
|
-
this._memory = {};
|
|
1212
|
-
this.debug = false;
|
|
1213
|
-
this._functionsRegistry = {};
|
|
1214
1203
|
this.registerVisitor(RootAST, this.visitRootAST);
|
|
1215
1204
|
this.registerVisitor(BlockStatementAST, this.visitBlockStatementAST);
|
|
1216
1205
|
this.registerVisitor(IdentifierAST, this.visitIdentifierAST);
|
|
@@ -1230,6 +1219,29 @@ export class MEvento extends NodeVisitor {
|
|
|
1230
1219
|
this.registerVisitor(ForLoopStatement, this.visitForLoopStatement);
|
|
1231
1220
|
this.registerVisitor(ForOfStatement, this.visitForOfStatement);
|
|
1232
1221
|
this.registerVisitor(BreakAST, this.visitBreakAST);
|
|
1222
|
+
}
|
|
1223
|
+
visit(node) {
|
|
1224
|
+
const methodName = `visit${node.constructor.name}`;
|
|
1225
|
+
// const fn = Object.getPrototypeOf(this)[methodName];
|
|
1226
|
+
const fn = this._nodesVisitors[methodName];
|
|
1227
|
+
return fn?.call(this, node);
|
|
1228
|
+
}
|
|
1229
|
+
assignProperty(owner, property, value) {
|
|
1230
|
+
if (Array.isArray(owner)) {
|
|
1231
|
+
owner[property] = value;
|
|
1232
|
+
}
|
|
1233
|
+
else if (typeof owner === 'object') {
|
|
1234
|
+
owner[property] = value;
|
|
1235
|
+
}
|
|
1236
|
+
else { }
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
export class MEvento extends NodeVisitor {
|
|
1240
|
+
constructor() {
|
|
1241
|
+
super();
|
|
1242
|
+
this._memory = {};
|
|
1243
|
+
this.debug = false;
|
|
1244
|
+
this._functionsRegistry = {};
|
|
1233
1245
|
this._functionsRegistry = { ...MEvento._globalFunctionsRegistry };
|
|
1234
1246
|
}
|
|
1235
1247
|
log(message) {
|
|
@@ -1277,15 +1289,6 @@ export class MEvento extends NodeVisitor {
|
|
|
1277
1289
|
}
|
|
1278
1290
|
return value;
|
|
1279
1291
|
}
|
|
1280
|
-
assignProperty(owner, property, value) {
|
|
1281
|
-
if (Array.isArray(owner)) {
|
|
1282
|
-
owner[property] = value;
|
|
1283
|
-
}
|
|
1284
|
-
else if (typeof owner === 'object') {
|
|
1285
|
-
owner[property] = value;
|
|
1286
|
-
}
|
|
1287
|
-
else { }
|
|
1288
|
-
}
|
|
1289
1292
|
visitExpressionStatementAST(node) {
|
|
1290
1293
|
const expr = node.expression;
|
|
1291
1294
|
return this.visit(expr);
|
|
@@ -1871,4 +1874,4 @@ export class MEventoAsync extends MEvento {
|
|
|
1871
1874
|
return ret;
|
|
1872
1875
|
}
|
|
1873
1876
|
}
|
|
1874
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsS0FBSyxDQUFDLEtBQVk7SUFDdkIsTUFBTSxJQUFJLEdBQ04saUJBQWlCLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNELFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDckIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDckMsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLEtBQVU7SUFDekIsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDdEMsQ0FBQztBQUNELFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDckMsQ0FBQztBQUNELFNBQVMsVUFBVSxDQUFDLElBQVM7SUFDekIsT0FBTyxJQUFJLEtBQUssSUFBSTtRQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBQUEsQ0FBQztBQUVGLFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJ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QUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO0lBQ3RELENBQUM7Q0FDSjtBQUdELE1BQU0sS0FBSzs7QUFDQSxXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixlQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixlQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixVQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixhQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixjQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFD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QUE2QjtJQUN4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUMzQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUM1QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUNsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztDQUNoRCxDQUFDO0FBMldOOztHQUVHO0FBRUgsTUFBTSxPQUFn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QUFDO1FBQ2xDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmZ1bmN0aW9uIGVycm9yKHRva2VuOiBUb2tlbikge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgICBgSW52YWxpZCB0b2tlbiAke3Rva2VuLnR5cGV9WyR7dG9rZW4udmFsdWV9XSBhdCAke3Rva2VuLmxpbmV9LCAke3Rva2VuLmNvbH1cXG5gO1xuICAgIHRocm93ICh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGlzTnVtKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuZnVuY3Rpb24gX2Jvb2xWYWx1ZSh0ZXN0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGVzdCAhPT0gbnVsbCAmJlxuICAgICAgICAoKGlzTnVtKHRlc3QpICYmIHRlc3QgIT09IDApIHx8XG4gICAgICAgICAgICAoaXNTdHJpbmcodGVzdCkgJiYgdGVzdC5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGlzQm9vbGVhbih0ZXN0KSAmJiB0ZXN0KSk7XG59O1xuXG5mdW5jdGlvbiBoYXNoQ29kZShzdHI6IHN0cmluZykge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGNocjtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2g7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaHIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbn07XG5leHBvcnQgY2xhc3MgVG9rZW5UeXBlIHtcbiAgICBzdGF0aWMgaWQgPSAwO1xuICAgIHN0YXRpYyBjb21tYSA9IDE7XG4gICAgc3RhdGljIHNlbWkgPSAyO1xuICAgIHN0YXRpYyBudW1iZXJDb25zdCA9IDM7XG4gICAgc3RhdGljIHN0cmluZ0NvbnN0ID0gNDtcbiAgICBzdGF0aWMgZXF1YWwgPSA1O1xuICAgIHN0YXRpYyBscGFyZW4gPSA2XG4gICAgc3RhdGljIHJwYXJlbiA9IDc7XG4gICAgc3RhdGljIGVvbCA9IDg7XG4gICAgc3RhdGljIGVvZiA9IDk7XG4gICAgc3RhdGljIGxicmFjZSA9IDEwO1xuICAgIHN0YXRpYyByYnJhY2UgPSAxMTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSAxMjtcbiAgICBzdGF0aWMgcmJyYWNrZXQgPSAxMztcbiAgICBzdGF0aWMgZ3JlYXQgPSAxNDtcbiAgICBzdGF0aWMgZ3JlYXRFcSA9IDE1O1xuICAgIHN0YXRpYyBsZXNzID0gMTY7XG4gICAgc3RhdGljIGxlc3NFcSA9IDE3O1xuICAgIHN0YXRpYyBlcWVxID0gMTg7XG4gICAgc3RhdGljIElGID0gMTk7XG4gICAgc3RhdGljIEVMU0UgPSAyMDtcbiAgICBzdGF0aWMgVFJVRSA9IDIxO1xuICAgIHN0YXRpYyBGQUxTRSA9IDIyO1xuICAgIHN0YXRpYyBOVUxMID0gMjM7XG4gICAgc3RhdGljIG5vdCA9IDI0O1xuICAgIHN0YXRpYyBub3RFcSA9IDI1O1xuICAgIHN0YXRpYyBhbmQgPSAyNjtcbiAgICBzdGF0aWMgb3IgPSAyNztcbiAgICBzdGF0aWMgcGx1cyA9IDI4O1xuICAgIHN0YXRpYyBtaW51cyA9IDI5O1xuICAgIHN0YXRpYyBkaXYgPSAzMDtcbiAgICBzdGF0aWMgbXVsdCA9IDMxO1xuICAgIHN0YXRpYyBtb2QgPSAzMjtcbiAgICBzdGF0aWMgaW52YWxpZCA9IDMzO1xuICAgIHN0YXRpYyBjb2xvbiA9IDM0O1xuICAgIHN0YXRpYyBXSElMRV9USUxMID0gMzU7XG4gICAgc3RhdGljIEZPUl9MT09QID0gMzY7XG4gICAgc3RhdGljIHVwID0gMzc7XG4gICAgc3RhdGljIGRvd24gPSAzODtcbiAgICBzdGF0aWMgd2l0aCA9IDM5O1xuICAgIHN0YXRpYyBpbiA9IDQwO1xuICAgIHN0YXRpYyBUSUxMID0gNDE7XG4gICAgc3RhdGljIEJSRUFLID0gNDI7XG59XG5cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gICAgdHlwZTogbnVtYmVyO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgbGluZT86IG51bWJlcjtcbiAgICBjb2w/OiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IodHlwZTogbnVtYmVyLCB2YWx1ZTogYW55LCBsaW5lOiBudW1iZXIgPSAxLCBjb2w6IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICB0aGlzLmNvbCA9IGNvbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb20odHlwZTogbnVtYmVyLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4odHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy50eXBlLnRvU3RyaW5nKCl9LCAke3RoaXMudmFsdWV9XWA7XG4gICAgfVxufVxuXG5cbmNsYXNzIENoYXJzIHtcbiAgICBzdGF0aWMgZXF1YWwgPSAnPScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgY29tbWEgPSAnLCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2VtaUNvbG9uID0gJzsnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGxwYXJlbiA9ICcoJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBycGFyZW4gPSAnKScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYmFja3NsYXNoID0gJ1xcXFwnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHF1b3RlID0gJ1wiJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzcXVvdGUgPSBcIidcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwbHVzID0gXCIrXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbWludXMgPSBcIi1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzdGFyID0gXCIqXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2xhc2ggPSBcIi9cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwZXJjZW50ID0gXCIlXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNlID0gXCJ7XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcmJyYWNlID0gXCJ9XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSBcIltcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IFwiXVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIG5vdCA9IFwiIVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGdyZWF0ID0gXCI+XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGVzcyA9IFwiPFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGFuZCA9IFwiJlwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBpcGUgPSBcInxcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb2xvbiA9IFwiOlwiLmNoYXJDb2RlQXQoMCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMZXhlckRpY3Rpb25hcnkge1xuICAgIGxhbmc6IHN0cmluZztcbiAgICBrZXl3b3JkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKGxhbmc6IHN0cmluZywga2V5d29yZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5rZXl3b3JkcyA9IHsgLi4ua2V5d29yZHMgfTtcbiAgICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICB9XG59XG5cbi8qKlxuICogTGV4aW5nID0+IFBhcnNpbmcgPT09PiBBU1QgPT09PiBXYWxraW5nXG4gKi9cbi8qKlxuICogTGV4ZXJcbiAqL1xuY2xhc3MgTGV4ZXIge1xuICAgIHN0YXRpYyBfZGVmYXVsdExhbmd1YWdlID0gbmV3IExleGVyRGljdGlvbmFyeShcImVuXCIsIHtcbiAgICAgICAgXCJpZlwiOiBcImlmXCIsXG4gICAgICAgIFwiZWxzZVwiOiBcImVsc2VcIixcbiAgICAgICAgXCJ0cnVlXCI6IFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCI6IFwiZmFsc2VcIixcbiAgICAgICAgXCJudWxsXCI6IFwibnVsbFwiLFxuICAgICAgICBcIndoaWxlXCI6IFwid2hpbGVcIixcbiAgICAgICAgXCJmb3JcIjogXCJmb3JcIixcbiAgICAgICAgXCJ3aXRoXCI6IFwid2l0aFwiLFxuICAgICAgICBcInVwXCI6IFwidXBcIixcbiAgICAgICAgXCJkb3duXCI6IFwiZG93blwiLFxuICAgICAgICBcInRpbGxcIjogXCJ0aWxsXCIsXG4gICAgICAgIFwiaW5cIjogXCJpblwiLFxuICAgICAgICBcImJyZWFrXCI6IFwiYnJlYWtcIixcbiAgICB9KTtcbiAgICBzdGF0aWMgbGFuZ3VhZ2VzOiBMZXhlckRpY3Rpb25hcnlbXSA9IFtcbiAgICAgICAgTGV4ZXIuX2RlZmF1bHRMYW5ndWFnZSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImZyXCIsIHtcbiAgICAgICAgICAgIFwic2lcIjogXCJpZlwiLFxuICAgICAgICAgICAgXCJzaW5vblwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidnJhaVwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZmF1eFwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBcIm51bFwiOiBcIm51bGxcIixcbiAgICAgICAgICAgIFwidGFucXVlXCI6IFwid2hpbGVcIixcbiAgICAgICAgICAgIFwicG91clwiOiBcImZvclwiLFxuICAgICAgICAgICAgXCJhdmVjXCI6IFwid2l0aFwiLFxuICAgICAgICAgICAgXCJtb25cIjogXCJ1cFwiLFxuICAgICAgICAgICAgXCJkZXNjXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJqdXNxdWFcIjogXCJ0aWxsXCIsXG4gICAgICAgICAgICBcImRhbnNcIjogXCJpblwiLFxuICAgICAgICAgICAgXCJjb3VwZXJcIjogXCJicmVha1wiLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImJtXCIsIHtcbiAgICAgICAgICAgIFwibmlpXCI6IFwiaWZcIixcbiAgICAgICAgICAgIFwibm90ZVwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidGllblwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZ2Fsb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJnYW5zYW5cIjogXCJudWxsXCIsXG4gICAgICAgICAgICBcImZvb1wiOiBcIndoaWxlXCIsXG4gICAgICAgICAgICBcInNlZ2lua2FcIjogXCJmb3JcIixcbiAgICAgICAgICAgIFwibmlpblwiOiBcIndpdGhcIixcbiAgICAgICAgICAgIFwia2F5XCI6IFwidXBcIixcbiAgICAgICAgICAgIFwia2FqXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJrYXRhXCI6IFwidGlsbFwiLFxuICAgICAgICAgICAgXCJrb25vXCI6IFwiaW5cIixcbiAgICAgICAgICAgIFwidGlrZVwiOiBcImJyZWFrXCIsXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgc3RhdGljIFJFU0VSVkVEOiB7IFtrZXk6IHN0cmluZ106IFRva2VuIH0gPSB7XG4gICAgICAgIFwiaWZcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuSUYsIFwiaWZcIiksXG4gICAgICAgIFwiZWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5FTFNFLCBcImVsc2VcIiksXG4gICAgICAgIFwidHJ1ZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5UUlVFLCB0cnVlKSxcbiAgICAgICAgXCJmYWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5GQUxTRSwgZmFsc2UpLFxuICAgICAgICBcIm51bGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuTlVMTCwgbnVsbCksXG4gICAgICAgIFwiZm9yXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkZPUl9MT09QLCBcImZvclwiKSxcbiAgICAgICAgXCJ3aGlsZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5XSElMRV9USUxMLCBcIndoaWxlXCIpLFxuICAgICAgICBcIndpdGhcIjogVG9rZW4uZnJvbShUb2tlblR5cGUud2l0aCwgXCJ3aXRoXCIpLFxuICAgICAgICBcInVwXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLnVwLCBcInVwXCIpLFxuICAgICAgICBcImRvd25cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuZG93biwgXCJkb3duXCIpLFxuICAgICAgICBcInRpbGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuVElMTCwgXCJ0aWxsXCIpLFxuICAgICAgICBcImluXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLmluLCBcImluXCIpLFxuICAgICAgICBcImJyZWFrXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkJSRUFLLCBcImJyZWFrXCIpLFxuICAgIH07XG4gICAgX2xhbmd1YWdlPzogTGV4ZXJEaWN0aW9uYXJ5O1xuICAgIF9zb3VyY2UhOiBzdHJpbmc7XG4gICAgX3Bvc2l0aW9uID0gMDtcbiAgICBfbGluZSA9IDE7XG4gICAgX2NvbCA9IDE7XG4gICAgX2N1cnJlbnRDaGFyID0gLTE7XG4gICAgZ2V0IHNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Jlc29sdmVMYW5ndWFnZSgpIHtcbiAgICAgICAgbGV0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5sZXNzKSB7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZSBzZXR0aW5nXG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmIChpZFRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5pZCkge1xuICAgICAgICAgICAgICAgIGVycm9yKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBpZFRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IExleGVyLmxhbmd1YWdlcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmxhbmcgPT09IGxhbmcpIHx8IExleGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBMZXhlci5fZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICAgICAgLy8gcmVzZXQgcmVhZGluZ1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZHZhbmNlKCkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbisrO1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fY29sKys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGljaygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA0OCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNTgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkU3RhcnQoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSAzNjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZCgpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9pc0lkKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRJZCA9IHRoaXMuX2xhbmd1YWdlXG4gICAgICAgICAgICA/ICh0aGlzLl9sYW5ndWFnZS5rZXl3b3Jkc1tyZXRdKSB8fCByZXRcbiAgICAgICAgICAgIDogcmV0O1xuICAgICAgICByZXR1cm4gTGV4ZXIuUkVTRVJWRURbdHJhbnNsYXRlZElkXSB8fCBuZXcgVG9rZW4oVG9rZW5UeXBlLmlkLCByZXQsIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xpbmVFbmQoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjID09PSAxMCB8fFxuICAgICAgICAgICAgYyA9PT0gMTMgfHxcbiAgICAgICAgICAgIFsnXFxuJywgJ1xccicsICdcXHUyMDI4JywgJ1xcdTIwMjknXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc1doaXRlU3BhY2UoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpLnRyaW0oKSA9PT0gXCJcIiAmJlxuICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShjKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzRGlnaXQoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIHJldHVybiBjID4gMCAmJiAoYyBeIDB4MzApIDw9IDk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NraXBXaGl0ZVNwYWNlKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5faXNXaGl0ZVNwYWNlKHRoaXMuX2N1cnJlbnRDaGFyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbnVtYmVyKCk6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fbGluZTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICBjb25zdCBiYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICBsZXQgYmFzZSA9IDEwO1xuICAgICAgICBpZiAoZmlyc3QgPT09ICcwJyAmJiBbJ2InLCAnQicsICd4JywgJ1gnLCAnbycsICdPJ10uaW5jbHVkZXMoYmMpKSB7XG4gICAgICAgICAgICAvLyBsb29rIGFoZWFkIHRvIHNlZSB0aGF0IHRoZSBudW1iZXIgaXMgdGFnZ2VkXG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGJjLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldCArPSBmaXJzdDtcbiAgICAgICAgICAgIGJhc2UgPSAxMDtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikgfHxcbiAgICAgICAgICAgIChiYXNlID09PSAxNiAmJlxuICAgICAgICAgICAgICAgIFsnQScsICdhJywgJ0InLCAnYicsICdDJywgJ2MnLCAnRCcsICdkJywgJ0UnLCAnZScsICdGJywgJ2YnXVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcikpKSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKSA9PT0gJy4nICYmIHRoaXMuX2lzRGlnaXQodGhpcy5fcGljaygpKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGJhc2UgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IobmV3IFRva2VuKFRva2VuVHlwZS5pZCwgYmMsIGxpbmUsIGxhc3RQKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9pc0RpZ2l0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5udW1iZXJDb25zdCwgcGFyc2VGbG9hdChyZXQpLCBsaW5lLCBsYXN0Qyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcbiAgICAgICAgICAgIFRva2VuVHlwZS5udW1iZXJDb25zdCwgcGFyc2VJbnQocmV0LCBiYXNlKSwgbGluZSwgbGFzdEMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xpdGVyYWxTdHJpbmcoc3RhcnRDaGFyOiBudW1iZXIpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBsZXQgbGFzdENoYXIgPSAtMTtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RMID0gdGhpcy5fbGluZTtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fcGljaygpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuYmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2NhcGUgY2hhclxuICAgICAgICAgICAgICAgIGlmIChbXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2hhcixcbiAgICAgICAgICAgICAgICAgICAgJ1xcXFwnLFxuICAgICAgICAgICAgICAgICAgICAnMCcsXG4gICAgICAgICAgICAgICAgICAgICdhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2InLFxuICAgICAgICAgICAgICAgICAgICAnZScsXG4gICAgICAgICAgICAgICAgICAgICdmJyxcbiAgICAgICAgICAgICAgICAgICAgJ24nLFxuICAgICAgICAgICAgICAgICAgICAncicsXG4gICAgICAgICAgICAgICAgICAgICd0JyxcbiAgICAgICAgICAgICAgICAgICAgJ3UnLFxuICAgICAgICAgICAgICAgICAgICAnVScsXG4gICAgICAgICAgICAgICAgICAgICd2JyxcbiAgICAgICAgICAgICAgICAgICAgJ3gnXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gc3RhcnRDaGFyICYmIGxhc3RDaGFyICE9PSBDaGFycy5iYWNrc2xhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyBlbmRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5zdHJpbmdDb25zdCwgcmV0LCBsYXN0TCwgbGFzdEMpO1xuICAgIH1cblxuICAgIC8vIGY9U1VCTUlUX0ZPUk0oeHh4KTtcbiAgICAvLyByID0gQ0FMTF9BUEkoQVBJX0lELCBmKTtcbiAgICAvLyBESVNQTEFZKFwiTVNHICNyXCIpXG4gICAgbmV4dFRva2VuKCk6IFRva2VuIHtcbiAgICAgICAgY29uc3QgbGFzdEwgPSB0aGlzLl9saW5lO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudENoYXIgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNMaW5lRW5kKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmUrKztcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2wgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lb2wsIFwiXFxuXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1doaXRlU3BhY2UodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpcFdoaXRlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RpZ2l0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0lkU3RhcnQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lcWVxLCBcIj09XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVxdWFsLCBcIj1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZ3JlYXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmdyZWF0RXEsIFwiPj1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZ3JlYXQsIFwiPlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sZXNzRXEsIFwiPD1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGVzcywgXCI8XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNlbWlDb2xvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5zZW1pLCBcIjtcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubHBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxwYXJlbiwgXCIoXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJwYXJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ycGFyZW4sIFwiKVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5jb21tYSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5jb21tYSwgXCIsXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxicmFjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sYnJhY2UsIFwie1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5yYnJhY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucmJyYWNlLCBcIn1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGJyYWNrZXQsIFwiW1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5yYnJhY2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5yYnJhY2tldCwgXCJdXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBsdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucGx1cywgXCIrXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLm1pbnVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm1pbnVzLCBcIi1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc2xhc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZGl2LCBcIi9cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc3Rhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5tdWx0LCBcIipcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGVyY2VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5tb2QsIFwiJVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5jb2xvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5jb2xvbiwgXCI6XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLm5vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubm90RXEsIFwiIT1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubm90LCBcIiFcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuYW5kICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMuYW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5hbmQsIFwiJiZcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGlwZSAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLnBpcGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmFuZCwgJ3x8JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVvdGUgfHwgdGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNxdW90ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fbGl0ZXJhbFN0cmluZyhzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICAgICAgVG9rZW5UeXBlLmludmFsaWQsIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVvZiwgXCJcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBQYXJzZXJcbiAqL1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVNUIHtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgfVxuICAgIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb290QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBib2R5OiBBU1RbXTtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIG5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoMSwgMSk7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJ1aWxkZXIgPSBgTW9kdWxlICR7dGhpcy5uYW1lfSBTdGFydCB7YDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiB0aGlzLmJvZHkpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIgKz0gYCR7aXQuZHVtcCgpfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlciArPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGJvZHk6IEFTVFtdLCB0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB7XFxuJHt0aGlzLmJvZHkubWFwKChlKSA9PiBlLnRvU3RyaW5nKCkpLmpvaW4oXCJcXG5cIil9fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmF3OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodG9rZW46IFRva2VuLCByYXc6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBpZGVudGlmaWVyOiBBU1Q7XG4gICAgaW5pdDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXI6IEFTVCwgaW5pdDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGlkZW50aWZpZXIubGluZSwgaWRlbnRpZmllci5jb2wpO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZGVudGlmaWVyfSA9ICR7dGhpcy5pbml0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgZXhwcmVzc2lvbjogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEFTVCkge1xuICAgICAgICBzdXBlcihleHByZXNzaW9uLmxpbmUsIGV4cHJlc3Npb24uY29sKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbGxFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjYWxsZWU6IElkZW50aWZpZXJBU1Q7XG4gICAgYXJndW1lbnRzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3RvcihjYWxsZWU6IElkZW50aWZpZXJBU1QsIGFnczogQVNUW10pIHtcbiAgICAgICAgc3VwZXIoY2FsbGVlLmxpbmUsIGNhbGxlZS5jb2wpO1xuICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhZ3M7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxlZS50b1N0cmluZygpfSguLi4ke3RoaXMuYXJndW1lbnRzLmxlbmd0aH0pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBsZWZ0OiBBU1Q7XG4gICAgb3BlcmF0aW9uOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0aW9uOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIGFyZ3VtZW50OiBBU1Q7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBUb2tlbiwgYXJndW1lbnQ6IEFTVCkge1xuICAgICAgICBzdXBlcihvcGVyYXRpb24ubGluZSwgb3BlcmF0aW9uLmNvbCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uLCB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLmFyZ3VtZW50fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBjb25zZXF1ZW50OiBBU1Q7XG4gICAgYWx0ZXJuYXRlPzogQVNUO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgY29uc2VxdWVudDogQVNULCBhbHRlcm5hdGU/OiBBU1QpIHtcbiAgICAgICAgc3VwZXIodGVzdC5saW5lLCB0ZXN0LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgaWYgJHt0aGlzLnRlc3R9ICR7dGhpcy5jb25zZXF1ZW50fSAke3RoaXMuYWx0ZXJuYXRlID8gYGVsc2UgJHt0aGlzLmFsdGVybmF0ZX0gYCA6ICcnfWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRvcjogVG9rZW47XG4gICAgcmlnaHQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihsZWZ0OiBBU1QsIG9wZXJhdG9yOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxlZnR9ICR7dGhpcy5vcGVyYXRvci52YWx1ZX0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhBY2Nlc3NvckFTVCBleHRlbmRzIEFTVCB7XG4gICAgb3duZXI6IEFTVDtcbiAgICBrZXk6IEFTVDtcbiAgICBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG93bmVyOiBBU1QsIGtleTogQVNULCBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKG93bmVyLmxpbmUsIG93bmVyLmNvbCk7XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3duZXJ9WyR7dGhpcy5rZXl9XWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgcHJvcGVydGllczogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICAgIG92ZXJyaWRlICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJ7Li4ufVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgZWxlbWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBBU1RbXSwgc3RhcnQ/OiBBU1QsIGVuZD86IEFTVCkge1xuICAgICAgICBzdXBlcihzdGFydD8ubGluZSwgc3RhcnQ/LmNvbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlsuLi5dXCI7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9iamVjdFByb3BlcnR5IGV4dGVuZHMgQVNUIHtcbiAgICBrZXk6IEFTVDtcbiAgICB2YWx1ZTogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGtleTogQVNULCB2YWx1ZTogQVNUKSB7XG4gICAgICAgIHN1cGVyKGtleS5saW5lLCBrZXkuY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2hpbGVMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICB0ZXN0OiBBU1Q7XG4gICAgYm9keTogQVNUO1xuICAgIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgYm9keTogQVNULCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4sIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmV0YWluID0gcmV0YWluO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbml0OiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCxcbiAgICAgICAgcHVibGljIHRlc3Q6IEFTVCxcbiAgICAgICAgcHVibGljIHVwZGF0ZTogQVNULFxuICAgICAgICBwdWJsaWMgZGlyZWN0aW9uOiBUb2tlbixcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JPZlN0YXRlbWVudCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpZGVudGlmaWVyOiBBU1QsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBU1QsXG4gICAgICAgIHB1YmxpYyBib2R5OiBBU1QsXG4gICAgICAgIHN0YXJ0VG9rZW4/OiBUb2tlbixcbiAgICAgICAgZW5kVG9rZW4/OiBUb2tlbixcbiAgICAgICAgcHVibGljIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHVwbGVFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6IEFTVCwgcHVibGljIHNlY29uZDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGZpcnN0LmxpbmUsIGZpcnN0LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQnJlYWtBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgICBzdGF0aWMgX2Jpbm9wUHJlY2RlbmNlczogeyBbazogbnVtYmVyXTogbnVtYmVyIH0gPSB7XG4gICAgICAgIFtUb2tlblR5cGUuZXFlcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLm5vdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUuZ3JlYXRdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ncmVhdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUubGVzc106IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmxlc3NFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLnBsdXNdOiAyMCxcbiAgICAgICAgW1Rva2VuVHlwZS5taW51c106IDIwLFxuICAgICAgICBbVG9rZW5UeXBlLm11bHRdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5kaXZdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5tb2RdOiA0MCxcbiAgICB9O1xuXG4gICAgbGV4ZXIhOiBMZXhlcjtcbiAgICBjdXJyZW50VG9rZW4/OiBUb2tlbjtcbiAgICBjb25zdHJ1Y3RvcihsZXhlcjogTGV4ZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBsZXhlci5uZXh0VG9rZW4oKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdCh0eXBlOiBUb2tlblR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRoaXMubGV4ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0RU9MKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5lb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdFNlbWlPckVPTCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuZW9sIHx8XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRTZW1pKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5zZW1pKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnNlbWkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFyaWFibGUoKTogSWRlbnRpZmllckFTVCB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgSWRlbnRpZmllckFTVCh0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmlkKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmFjdG9yKCk6IEFTVCB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uQVNUKHRva2VuISwgdGhpcy5fZmFjdG9yKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubnVtYmVyQ29uc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5udW1iZXJDb25zdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuc3RyaW5nQ29uc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5scGFyZW46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuVFJVRTpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZBTFNFOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLk5VTEw6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5OVUxMKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIFwibnVsbFwiKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWwgYXJyYXkgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hcnJheUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Rlcm0oKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9mYWN0b3IoKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX3Rlcm0oKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oMCwgbm9kZSk7XG4gICAgICAgIHdoaWxlIChbVG9rZW5UeXBlLmFuZCwgVG9rZW5UeXBlLm9yXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlLCB0b2tlbiwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lcXVhbCkpIHtcbiAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCB8fCBub2RlIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZXF1YWwpO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgQXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZSwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb2JqZWN0UHJvcGVydHkoKTogT2JqZWN0UHJvcGVydHkge1xuICAgICAgICBsZXQga2V5OiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudFRva2VuLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zdHJpbmdDb25zdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gZXhwcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuaWQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGlkLnZhbHVlLCBpZC5saW5lLCBpZC5jb2wpLCBpZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLmN1cnJlbnRUb2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29sb24pO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0UHJvcGVydHkoa2V5ISwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcm9wZXJ0eSgpOiBBU1Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0UHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0aWVzKCk6IEFTVFtdIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlICE9IFRva2VuVHlwZS5yYnJhY2UpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLl9wcm9wZXJ0eSgpKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5fcHJvcGVydHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb2JqZWN0RXhwcmVzc2lvbihicmFjZVRva2VuPzogVG9rZW4pOiBBU1Qge1xuICAgICAgICB2YXIgdG9rZW4gPSBicmFjZVRva2VuID8/IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBpZiAoIWJyYWNlVG9rZW4pIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLl9vYmplY3RQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMsIHRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXJyYXlFeHByZXNzaW9uKCk6IEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICBjb25zdCBlbGVtZW50czogQVNUW10gPSB0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFja2V0KSA/IFtdIDogdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICB2YXIgc3RhcnROb2RlID0gZWxlbWVudHMubGVuZ3RoICE9PSAwID8gZWxlbWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0Tm9kZSA9IGVsZW1lbnRzLmxlbmd0aCAhPT0gMCA/IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5RXhwcmVzc2lvbihlbGVtZW50cywgc3RhcnROb2RlLCBsYXN0Tm9kZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG46IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbjtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNrZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBJbmRleEFjY2Vzc29yQVNUKG5vZGUsIGtleSk7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlCaW5hcnlFeHByZXNzaW9uKHByZWM6IG51bWJlciwgbGVmdDogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBsZWZ0O1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBwcmVjKSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KG9wZXJhdG9yLnR5cGUpO1xuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5fdGVybSgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBuZXh0UHJlYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oY3VycmVudFByZWMgKyAxLCByaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcCA9PT0gbm9kZSkgcmV0dXJuIHRtcDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBuZXcgQmluYXJ5RXhwcmVzc2lvbkFTVChub2RlLCBvcGVyYXRvciwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbnNMaXN0KCk6IEFTVFtdIHtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIC8vIGlmIChleHBlY3QoTGV4ZXIuVG9rZW5UeXBlLlJQQVJFTikpIHJldHVybiBlbXB0eUxpc3QoKVxuICAgICAgICBsZXQgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW2V4cHJdO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxsRXhwcmVzc2lvbihub2RlOiBBU1QpOiBDYWxsRXhwcmVzc2lvbkFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgbGV0IGFyZ3M6IEFTVFtdID0gW107XG4gICAgICAgIGlmICghdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5ycGFyZW4pKSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lvbkFTVChub2RlIGFzIElkZW50aWZpZXJBU1QsIGFyZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdGdW5jdGlvbkNhbGwobjogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW4pIHtcbiAgICAgICAgICAgIC8vIHByb2JhYmxlIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9jYWxsRXhwcmVzc2lvbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnRFeHByZXNzaW9uKCk6IEFTVCB7XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcblxuICAgICAgICBpZiAoIVtUb2tlblR5cGUuc2VtaSwgVG9rZW5UeXBlLmVvbCwgVG9rZW5UeXBlLmVvZl1cbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmxvY2tTdGF0ZW1lbnQoaWdub3JlRmlyc3RCcmFjZSA9IGZhbHNlKTogQmxvY2tTdGF0ZW1lbnRBU1Qge1xuICAgICAgICBpZiAoIWlnbm9yZUZpcnN0QnJhY2UpIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoW10sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgYm9keSA9IF9zdGF0ZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBbdGhpcy5fc3RhdGVtZW50KCldO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2wgfHxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuc2VtaSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5yYnJhY2UgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICAvLyBfZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLl9zdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2UpKSBicmVhaztcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnJicmFjZSkge1xuICAgICAgICAgICAgLy8gZW5kQmxvY2tcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoYm9keSwgdGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZlN0YXRlbWVudCgpOiBJZlN0YXRlbWVudEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuSUYpO1xuICAgICAgICBjb25zdCB3aXRoUGFyID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW47XG4gICAgICAgIGlmICh3aXRoUGFyKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHdpdGhQYXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29uc2VxdWVudDogQVNUO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpIHtcbiAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLl9ibG9ja1N0YXRlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICBsZXQgYWx0ZXJuYXRlOiBBU1QgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLkVMU0UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuRUxTRSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSUY6XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMuX2lmU3RhdGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudEFTVCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgIH1cbiAgICBwcml2YXRlIF93aGlsZUxvb3AoKTogV2hpbGVMb29wU3RhdGVtZW50IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuV0hJTEVfVElMTClcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKVxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIHJldHVybiBuZXcgV2hpbGVMb29wU3RhdGVtZW50KHRlc3QsIGJvZHksIHRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbiEpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9yT2ZJZGVudGlmaWVyKCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlOiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxwYXJlbjoge1xuICAgICAgICAgICAgICAgIC8vIHByb2JhYmxlIHR1cGxlXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSlcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmQgPSB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUdXBsZUV4cHJlc3Npb24oXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRva2VuVHlwZS5MQlJBQ0UgLT4gb2JqZWN0UGF0dGVybigpXG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNLRVQgLT4gYXJyYXlQYXR0ZXJuKClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqICMgRm9yTG9vcFN0YXRlbWVudCB3aXRoIHN0ZXBcbiAgICAgKiAoc2VnaW5rYXxmb3IpIGE9MCAoZm9vfHRvKSAxMCAoa2F5fGthaikgbmlpbiAyIHsgIyBmb3IgYSA9IDA7IGE8MTA7IGErPTJcbiAgICAgKlxuICAgICAqIH1cbiAgICAgKiAoc2VnaW5rYXxmb3IpIG1hbGkga29ubyBhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9yTG9vcCgpOiBBU1Qge1xuICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLkZPUl9MT09QKVxuICAgICAgICBsZXQgZm9yT2YgPVxuICAgICAgICAgICAgW1Rva2VuVHlwZS5scGFyZW5dLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgbGV0IG5vZGU6IEFTVDtcbiAgICAgICAgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5fZm9yT2ZJZGVudGlmaWVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSkge1xuICAgICAgICAgICAgICAgIGZvck9mID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBleHByO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoIWZvck9mICYmIG5vZGUgaW5zdGFuY2VvZiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsIGZvclxuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5USUxMKTtcbiAgICAgICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uOiBUb2tlbjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUudXAgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5kb3duKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodC50eXBlKVxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gbmV3IFRva2VuKFRva2VuVHlwZS51cCwgXCJ1cFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1cGRhdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS53aXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUud2l0aClcbiAgICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IGV4cHJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlID0gbmV3IExpdGVyYWxBU1QobmV3IFRva2VuKFRva2VuVHlwZS5udW1iZXJDb25zdCwgMSwgdGhpcy5jdXJyZW50VG9rZW4hLmxpbmUsIHRoaXMuY3VycmVudFRva2VuIS5jb2wpLCBcIjFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpID8gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKSA6IHRoaXMuX2V4cHJlc3Npb24oKVxuXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvckxvb3BTdGF0ZW1lbnQobm9kZSwgdGVzdCwgdXBkYXRlLCBkaXJlY3Rpb24sIGJvZHksIHN0YXJ0VG9rZW4sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9yT2YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuaW4pO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgRm9yT2ZTdGF0ZW1lbnQoXG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgc3RhcnRUb2tlbixcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiFcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnQoKTogQVNUIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQlJFQUs6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5CUkVBSyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmVha0FTVCh0aGlzLmN1cnJlbnRUb2tlbj8ubGluZSwgdGhpcy5jdXJyZW50VG9rZW4/LmNvbCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5zZW1pOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdFNlbWkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50KCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lb2w6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSUY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lmU3RhdGVtZW50KCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElMRV9USUxMOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93aGlsZUxvb3AoKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZPUl9MT09QOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JMb29wKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHBlY3QodHlwZTogVG9rZW5UeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gdHlwZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGVmaW5pdGlvbigpOiBBU1RbXSB7XG4gICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVvZikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRzID0gW3RoaXMuX3N0YXRlbWVudCgpXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5lb2YpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb290KCk6IFJvb3RBU1Qge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxleGVyLnNvdXJjZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IFwiPG1vZHVsZT5cIjtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuX2RlZmluaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSb290QVNUKGxpc3QsIG5hbWUsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcGFyc2UoKTogQVNUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEJyZWFrQnJhbmNoIHsgfVxudHlwZSBGdW5jID0gKG5vZGU6IGFueSkgPT4gYW55O1xuLy8gQVNUIFdhbGxrZXJcbmFic3RyYWN0IGNsYXNzIEFOb2RlVmlzaXRvciB7XG4gICAgcHJvdGVjdGVkIF9ub2Rlc1Zpc2l0b3JzOiB7IFtrOiBzdHJpbmddOiBGdW5jIH0gPSB7fTtcbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXJWaXNpdG9yKHR5cGU6IFR5cGU8QVNUPiwgdmlzaXRvcjogRnVuYykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHt0eXBlLm5hbWV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1JlZzo6Ojo6OicsIG1ldGhvZE5hbWUsIHR5cGUpO1xuICAgICAgICB0aGlzLl9ub2Rlc1Zpc2l0b3JzW21ldGhvZE5hbWVdID0gdmlzaXRvcjtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCB2aXNpdChub2RlOiBBU1QpOiBhbnk7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5vZGVWaXNpdG9yIGV4dGVuZHMgQU5vZGVWaXNpdG9yIHtcbiAgICBvdmVycmlkZSB2aXNpdChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHtub2RlLmNvbnN0cnVjdG9yLm5hbWV9YDtcbiAgICAgICAgLy8gY29uc3QgZm4gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcylbbWV0aG9kTmFtZV07XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXTtcbiAgICAgICAgcmV0dXJuIGZuPy5jYWxsKHRoaXMsIG5vZGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTUV2ZW50b0ZCaW5kaW5nID0gKGFyZ3M6IGFueVtdLCB2bTogTUV2ZW50bykgPT4gYW55O1xuZXhwb3J0IGNsYXNzIE1FdmVudG8gZXh0ZW5kcyBOb2RlVmlzaXRvciB7XG4gICAgX21lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBkZWJ1ZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeTogeyBbazogc3RyaW5nXTogTUV2ZW50b0ZCaW5kaW5nIH0gPSB7fTtcbiAgICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IE1hcDxudW1iZXIsIEFTVD4gPSBuZXcgTWFwKCk7XG4gICAgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSb290QVNULCB0aGlzLnZpc2l0Um9vdEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJsb2NrU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0QmxvY2tTdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJZGVudGlmaWVyQVNULCB0aGlzLnZpc2l0SWRlbnRpZmllckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExpdGVyYWxBU1QsIHRoaXMudmlzaXRMaXRlcmFsQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQXNzaWdubWVudEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQ2FsbEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJpbmFyeUV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoVW5hcnlFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSWZTdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRJZlN0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExvZ2ljYWxFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJbmRleEFjY2Vzc29yQVNULCB0aGlzLnZpc2l0SW5kZXhBY2Nlc3NvckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKE9iamVjdFByb3BlcnR5LCB0aGlzLnZpc2l0T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihPYmplY3RFeHByZXNzaW9uLCB0aGlzLnZpc2l0T2JqZWN0RXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEFycmF5RXhwcmVzc2lvbiwgdGhpcy52aXNpdEFycmF5RXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoV2hpbGVMb29wU3RhdGVtZW50LCB0aGlzLnZpc2l0V2hpbGVMb29wU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRm9yTG9vcFN0YXRlbWVudCwgdGhpcy52aXNpdEZvckxvb3BTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihGb3JPZlN0YXRlbWVudCwgdGhpcy52aXNpdEZvck9mU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQnJlYWtBU1QsIHRoaXMudmlzaXRCcmVha0FTVCk7XG5cblxuXG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5ID0geyAuLi5NRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeSB9O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgbG9nKG1lc3NhZ2U6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSlcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgdmlzaXRSb290QVNUKG5vZGU6IFJvb3RBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBsaXN0ID0gbm9kZS5ib2R5O1xuICAgICAgICBsZXQgbGFzdDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGxhc3QgPSB0aGlzLnZpc2l0KG4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRJZGVudGlmaWVyQVNUKG5vZGU6IElkZW50aWZpZXJBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBpZCA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW1vcnlbaWRdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdExpdGVyYWxBU1Qobm9kZTogQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAobm9kZSBhcyBMaXRlcmFsQVNUKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTogYW55IHtcblxuICAgICAgICBjb25zdCBpZDogQVNUID0gbm9kZS5pZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IGluaXQ6IEFTVCA9IG5vZGUuaW5pdDtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy52aXNpdChpZC5vd25lcik7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmlzaXQobm9kZS5pbml0KTtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMudmlzaXQoaWQua2V5KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZpc2l0KGluaXQpO1xuICAgICAgICAgICAgdGhpcy5fbWVtb3J5W2lkLnZhbHVlXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgYXNzaWduUHJvcGVydHkob3duZXI6IGFueSwgcHJvcGVydHk6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgb3duZXJbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3duZXJbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7IH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBleHByID0gbm9kZS5leHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdChleHByKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRDYWxsRXhwcmVzc2lvbkFTVChub2RlOiBDYWxsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgICAgY29uc3QgYXJncyA9IG5vZGUuYXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gY2FsbGVlLnZhbHVlO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2NhbGxlZU5hbWVdO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZXMgPSBhcmdzLm1hcCgoZSkgPT4gdGhpcy52aXNpdChlKSk7XG4gICAgICAgIC8vIHByaW50KFwiYXJnVmFsdWVzOjpcIiwgYXJnVmFsdWVzKVxuICAgICAgICByZXR1cm4gZm4/LihhcmdWYWx1ZXMsIHRoaXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdEJpbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogQmluYXJ5RXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlLmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgbFZhbHVlID0gdGhpcy52aXNpdChsZWZ0KTtcbiAgICAgICAgY29uc3QgclZhbHVlID0gdGhpcy52aXNpdChyaWdodCk7XG4gICAgICAgIHN3aXRjaCAob3AudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtsVmFsdWV9JHtyVmFsdWV9YDtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAtIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc1N0cmluZyhyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByVmFsdWUgKiBsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZGl2OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaXZpc2lvbiBieSAwXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubW9kOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAlIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPj0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3M6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDwgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3NFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPD0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmVxZXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA9PT0gclZhbHVlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubm90RXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAhPT0gclZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBhcmcgPSBub2RlLmFyZ3VtZW50O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHRoaXMudmlzaXQoYXJnKTtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5ub3QpIHtcbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGFyZ1ZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtKGFyZ1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5wbHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLm1pbnVzKSB7XG4gICAgICAgICAgICByZXR1cm4gLWFyZ1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdElmU3RhdGVtZW50QVNUKG5vZGU6IElmU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgdGVzdE5vZGU6IEFTVCA9IG5vZGUudGVzdDtcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMudmlzaXQodGVzdE5vZGUpO1xuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcblxuICAgICAgICBpZiAodGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5jb25zZXF1ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG5vZGUuYWx0ZXJuYXRlISk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuXG4gICAgcHJvdGVjdGVkIHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMudmlzaXQobGVmdE5vZGUpO1xuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLmFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3RCb29sVmFsdWUgJiYgX2Jvb2xWYWx1ZSh0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0Qm9vbFZhbHVlIHx8IF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdEluZGV4QWNjZXNzb3JBU1Qobm9kZTogSW5kZXhBY2Nlc3NvckFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG93bmVyTm9kZSA9IChub2RlIGFzIEluZGV4QWNjZXNzb3JBU1QpLm93bmVyO1xuICAgICAgICBjb25zdCBvd25lciA9IHRoaXMudmlzaXQob3duZXJOb2RlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG93bmVyW2tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTnVtKGtleSkgJiYgb3duZXIubGVuZ3RoIDwga2V5ICYmIGtleSA+PSAwID8gb3duZXJba2V5XSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55IHsgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBPYmplY3RFeHByZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIG5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGl0IGluc3RhbmNlb2YgT2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGhpcy52aXNpdChpdC5rZXkpO1xuICAgICAgICAgICAgICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gdGhpcy52aXNpdChpdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yZXNvbHZlQXJndW1lbnRzKG5vZGUuZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0QnJlYWtBU1Qobm9kZTogQnJlYWtBU1QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCcmVha0JyYW5jaCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55IHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0YWluZXIgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpOiBhbnkge1xuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBsb29wSWRlbnRpZmllciA9IG5vZGUuaW5pdC5pZGVudGlmaWVyXG4gICAgICAgIGlmICghKGxvb3BJZGVudGlmaWVyIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRlbnRpZmVyIGZvdW5kXCIpXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMudmlzaXQobm9kZS5pbml0LmluaXQpXG4gICAgICAgIHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV0gPSBpbml0aWFsVmFsdWVcbiAgICAgICAgcmV0YWluZXI/LnB1c2goaW5pdGlhbFZhbHVlKVxuICAgICAgICBjb25zdCB0ZXN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLnRlc3QpXG4gICAgICAgICAgICBpZiAoaXNOdW0ocmV0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gcmV0ID49IHRtcCA6IHJldCA8PSB0bXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKHJldCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRlc3QoKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlIGluc3RhbmNlb2YgTGl0ZXJhbEFTVCAmJiBpc051bShub2RlLnVwZGF0ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBhdXRvIGhhbmRsZVxuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV07XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bSh0bXApKSB0aHJvdyBFcnJvcihcIkNhbiB1cGRhdGUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWVtb3J5W2xvb3BJZGVudGlmaWVyLnZhbHVlXSA9IG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHRtcCArIG5vZGUudXBkYXRlLnZhbHVlIDogdG1wIC0gbm9kZS51cGRhdGUudmFsdWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLnVwZGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0YWluZXIgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnZpc2l0KG5vZGUuY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gaXRlcmF0ZSBub24gYXJyYXkgb2JqZWN0XCIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlLmlkZW50aWZpZXIsIGl0KVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0YWluZXIgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RlY2xhcmVGb3JJZGVudGlmaWVyKG5vZGU6IEFTVCwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVHVwbGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gbWFrZSBhIHR1cGxlIGZyb20gbm9uIEFycmF5IGVsZW1lbnRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21lbW9yeVsobm9kZS5maXJzdCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZV0gPSB2YWx1ZVswXVxuICAgICAgICAgICAgdGhpcy5fbWVtb3J5Wyhub2RlLnNlY29uZCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZV0gPSB2YWx1ZVsxXVxuICAgICAgICAgICAgbnVsbFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21lbW9yeVsobm9kZSBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZV0gPSB2YWx1ZVxuICAgICAgICBudWxsXG4gICAgfVxuICAgIHJlc29sdmVBcmd1bWVudHMoYXJnczogQVNUW10pOiBhbnkge1xuICAgICAgICByZXR1cm4gYXJncy5tYXAoKGl0OiBBU1QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0KGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGdW5jdGlvbihpZDogc3RyaW5nLCBmbjogTUV2ZW50b0ZCaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2lkXSA9IGZuO1xuICAgIH1cblxuICAgIHVucmVnaXN0ZXJGdW5jdGlvbihpZDogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF07XG4gICAgfVxuXG4gICAgZXhlY3V0ZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tcGlsZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSk6IEFTVCB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShzb3VyY2UpO1xuICAgICAgICBpZiAoY2FjaGUgJiYgdGhpcy5fY2FjaGUuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KGhhc2gpITtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXhlciA9IG5ldyBMZXhlcihzb3VyY2UpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGxleGVyKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG5cbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLl9jYWNoZS5zZXQoaGFzaCwgbW9kdWxlKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgdW5yZWdpc3RlcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF07XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bihzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBtZXZlbnRvID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gTUV2ZW50by5jb21waWxlKHNvdXJjZSwgY2FjaGUpO1xuICAgICAgICByZXR1cm4gbWV2ZW50by52aXNpdChtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBuZXdJbnN0YW5jZSgpOiBNRXZlbnRvIHtcbiAgICAgICAgLy8gY29uc3QgbGV4ZXIgPSBMZXhlcihzb3VyY2UpO1xuICAgICAgICAvLyBjb25zdCBwYXJzZXIgPSBQYXJzZXIobGV4ZXIpO1xuICAgICAgICAvLyBjb25zdCBtb2R1bGUgPSBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNRXZlbnRvKCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTUV2ZW50byB7XG4gICAgICAgIHZhciByZXQgPSBuZXcgTUV2ZW50bygpO1xuICAgICAgICByZXQuX2Z1bmN0aW9uc1JlZ2lzdHJ5ID0geyAuLi4gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgfTtcbiAgICAgICAgcmV0Ll9tZW1vcnkgPSB7IC4uLnRoaXMuX21lbW9yeSB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBuZXdBc3luY0luc3RhbmNlKCk6IE1FdmVudG9Bc3luYyB7XG4gICAgICAgIGNvbnN0IGFzeW5jSW5zID0gTUV2ZW50b0FzeW5jLm5ld0luc3RhbmNlKCk7XG4gICAgICAgIGFzeW5jSW5zLl9tZW1vcnkgPSB0aGlzLl9tZW1vcnk7XG4gICAgICAgIC8vLyA/Pz8/XG4gICAgICAgIGFzeW5jSW5zLl9mdW5jdGlvbnNSZWdpc3RyeSA9IHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5O1xuICAgICAgICByZXR1cm4gYXN5bmNJbnM7XG4gICAgfTtcblxufVxuXG5leHBvcnQgY2xhc3MgTUV2ZW50b0FzeW5jIGV4dGVuZHMgTUV2ZW50byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IGF3YWl0IHRoaXMudmlzaXQobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gYXdhaXQgdGhpcy52aXNpdChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBBU1QpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpZCA9IChub2RlIGFzIElkZW50aWZpZXJBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVtb3J5W2lkXTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBMaXRlcmFsQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhd2FpdCB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYXdhaXQgdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLl9tZW1vcnlbaWQudmFsdWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IG5vZGUuZXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQoZXhwcik7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbY2FsbGVlTmFtZV07XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKSk7XG4gICAgICAgIC8vIHByaW50KFwiYXJnVmFsdWVzOjpcIiwgYXJnVmFsdWVzKVxuICAgICAgICByZXR1cm4gYXdhaXQgZm4/LihhcmdWYWx1ZXMsIHRoaXMpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzU3RyaW5nKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJWYWx1ZSAqIGxWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tdWx0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5kaXY6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoclZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpdmlzaW9uIGJ5IDBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAvIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tb2Q6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICUgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdEVxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzczpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPCByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzc0VxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZXFlcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID09PSByVmFsdWU7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ub3RFcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICE9PSByVmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChpc051bShhcmdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUucGx1cykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ1ZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5taW51cykge1xuICAgICAgICAgICAgcmV0dXJuIC1hcmdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlICBhc3luYyB2aXNpdElmU3RhdGVtZW50QVNUKG5vZGU6IElmU3RhdGVtZW50QVNUKSB7XG4gICAgICAgIGNvbnN0IHRlc3ROb2RlOiBBU1QgPSBub2RlLnRlc3Q7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBhd2FpdCB0aGlzLnZpc2l0KHRlc3ROb2RlKTtcbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG5cbiAgICAgICAgaWYgKHRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuY29uc2VxdWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChub2RlLmFsdGVybmF0ZSEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdExvZ2ljYWxFeHByZXNzaW9uQVNUKG5vZGU6IExvZ2ljYWxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGxlZnROb2RlID0gbm9kZS5sZWZ0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdChsZWZ0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUuYW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdEJvb2xWYWx1ZSAmJiBfYm9vbFZhbHVlKGF3YWl0IHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5vcikge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3RCb29sVmFsdWUgfHwgX2Jvb2xWYWx1ZShhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEluZGV4QWNjZXNzb3JBU1Qobm9kZTogSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICBjb25zdCBvd25lck5vZGUgPSAobm9kZSBhcyBJbmRleEFjY2Vzc29yQVNUKS5vd25lcjtcbiAgICAgICAgY29uc3Qgb3duZXIgPSBhd2FpdCB0aGlzLnZpc2l0KG93bmVyTm9kZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBvd25lcltrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBpc051bShrZXkpICYmIG93bmVyLmxlbmd0aCA8IGtleSAmJiBrZXkgPj0gMCA/IG93bmVyW2tleV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRPYmplY3RQcm9wZXJ0eShub2RlOiBBU1QpIHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZTogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChpdCBpbnN0YW5jZW9mIE9iamVjdFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQoaXQua2V5KTtcbiAgICAgICAgICAgICAgICBrZXkgPSBpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGF3YWl0IHRoaXMudmlzaXQoaXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBcnJheUV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBBcnJheUV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVBcmd1bWVudHNBc3luYyhub2RlLmVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0YWluZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Rm9yTG9vcFN0YXRlbWVudChub2RlOiBGb3JMb29wU3RhdGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGxvb3BJZGVudGlmaWVyID0gbm9kZS5pbml0LmlkZW50aWZpZXJcbiAgICAgICAgaWYgKCEobG9vcElkZW50aWZpZXIgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZGVudGlmZXIgZm91bmRcIilcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGhpcy52aXNpdChub2RlLmluaXQuaW5pdClcbiAgICAgICAgdGhpcy5fbWVtb3J5W2xvb3BJZGVudGlmaWVyLnZhbHVlXSA9IGluaXRpYWxWYWx1ZVxuICAgICAgICByZXRhaW5lcj8ucHVzaChpbml0aWFsVmFsdWUpXG4gICAgICAgIGNvbnN0IHRlc3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLnZpc2l0KG5vZGUudGVzdClcbiAgICAgICAgICAgIGlmIChpc051bShyZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fbWVtb3J5W2xvb3BJZGVudGlmaWVyLnZhbHVlXVxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyByZXQgPj0gdG1wIDogcmV0IDw9IHRtcFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUocmV0KTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGVzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICAgICAgLy8gdXBkYXRlXG4gICAgICAgICAgICBpZiAobm9kZS51cGRhdGUgaW5zdGFuY2VvZiBMaXRlcmFsQVNUICYmIGlzTnVtKG5vZGUudXBkYXRlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIGF1dG8gaGFuZGxlXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fbWVtb3J5W2xvb3BJZGVudGlmaWVyLnZhbHVlXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtKHRtcCkpIHRocm93IEVycm9yKFwiQ2FuIHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZW1vcnlbbG9vcElkZW50aWZpZXIudmFsdWVdID0gbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gdG1wICsgbm9kZS51cGRhdGUudmFsdWUgOiB0bXAgLSBub2RlLnVwZGF0ZS52YWx1ZTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUudXBkYXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy52aXNpdChub2RlLmNvbGxlY3Rpb24pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ2FuIGl0ZXJhdGUgbm9uIGFycmF5IG9iamVjdFwiKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGVjbGFyZUZvcklkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyLCBpdClcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVzb2x2ZUFyZ3VtZW50c0FzeW5jKGFyZ3M6IEFTVFtdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYXJncy5tYXAoYXN5bmMgKGl0OiBBU1QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KGl0KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdW5yZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2lkXTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgIGFzeW5jIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG92ZXJyaWRlIGFzeW5jIHJ1bihzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBtZXZlbnRvID0gbmV3IE1FdmVudG9Bc3luYygpO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBtZXZlbnRvLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG92ZXJyaWRlIG5ld0luc3RhbmNlKCk6IE1FdmVudG9Bc3luYyB7XG4gICAgICAgIHJldHVybiBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgfVxuXG5cbiAgICBvdmVycmlkZSBjbG9uZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IE1FdmVudG9Bc3luYygpO1xuICAgICAgICByZXQuX2Z1bmN0aW9uc1JlZ2lzdHJ5ID0geyAuLi50aGlzLl9mdW5jdGlvbnNSZWdpc3RyeSB9O1xuICAgICAgICByZXQuX21lbW9yeSA9IHsgLi4udGhpcy5fbWVtb3J5IH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufVxuIl19
|
|
1877
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsS0FBSyxDQUFDLEtBQVk7SUFDdkIsTUFBTSxJQUFJLEdBQ04saUJBQWlCLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNELFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDckIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDckMsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLEtBQVU7SUFDekIsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDdEMsQ0FBQztBQUNELFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDckMsQ0FBQztBQUNELFNBQVMsVUFBVSxDQUFDLElBQVM7SUFDekIsT0FBTyxJQUFJLEtBQUssSUFBSTtRQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBQUEsQ0FBQztBQUVGLFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJ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QUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO0lBQ3RELENBQUM7Q0FDSjtBQUdELE1BQU0sS0FBSzs7QUFDQSxXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixlQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixlQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixVQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixXQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixhQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixZQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixjQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFD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QUE2QjtJQUN4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUMzQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUM1QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUNsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztDQUNoRCxDQUFDO0FBMldOOztHQUVHO0FBRUgsTUFBTSxPQUFn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R0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmZ1bmN0aW9uIGVycm9yKHRva2VuOiBUb2tlbikge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgICBgSW52YWxpZCB0b2tlbiAke3Rva2VuLnR5cGV9WyR7dG9rZW4udmFsdWV9XSBhdCAke3Rva2VuLmxpbmV9LCAke3Rva2VuLmNvbH1cXG5gO1xuICAgIHRocm93ICh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGlzTnVtKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuZnVuY3Rpb24gX2Jvb2xWYWx1ZSh0ZXN0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGVzdCAhPT0gbnVsbCAmJlxuICAgICAgICAoKGlzTnVtKHRlc3QpICYmIHRlc3QgIT09IDApIHx8XG4gICAgICAgICAgICAoaXNTdHJpbmcodGVzdCkgJiYgdGVzdC5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGlzQm9vbGVhbih0ZXN0KSAmJiB0ZXN0KSk7XG59O1xuXG5mdW5jdGlvbiBoYXNoQ29kZShzdHI6IHN0cmluZykge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGNocjtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2g7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaHIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbn07XG5leHBvcnQgY2xhc3MgVG9rZW5UeXBlIHtcbiAgICBzdGF0aWMgaWQgPSAwO1xuICAgIHN0YXRpYyBjb21tYSA9IDE7XG4gICAgc3RhdGljIHNlbWkgPSAyO1xuICAgIHN0YXRpYyBudW1iZXJDb25zdCA9IDM7XG4gICAgc3RhdGljIHN0cmluZ0NvbnN0ID0gNDtcbiAgICBzdGF0aWMgZXF1YWwgPSA1O1xuICAgIHN0YXRpYyBscGFyZW4gPSA2XG4gICAgc3RhdGljIHJwYXJlbiA9IDc7XG4gICAgc3RhdGljIGVvbCA9IDg7XG4gICAgc3RhdGljIGVvZiA9IDk7XG4gICAgc3RhdGljIGxicmFjZSA9IDEwO1xuICAgIHN0YXRpYyByYnJhY2UgPSAxMTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSAxMjtcbiAgICBzdGF0aWMgcmJyYWNrZXQgPSAxMztcbiAgICBzdGF0aWMgZ3JlYXQgPSAxNDtcbiAgICBzdGF0aWMgZ3JlYXRFcSA9IDE1O1xuICAgIHN0YXRpYyBsZXNzID0gMTY7XG4gICAgc3RhdGljIGxlc3NFcSA9IDE3O1xuICAgIHN0YXRpYyBlcWVxID0gMTg7XG4gICAgc3RhdGljIElGID0gMTk7XG4gICAgc3RhdGljIEVMU0UgPSAyMDtcbiAgICBzdGF0aWMgVFJVRSA9IDIxO1xuICAgIHN0YXRpYyBGQUxTRSA9IDIyO1xuICAgIHN0YXRpYyBOVUxMID0gMjM7XG4gICAgc3RhdGljIG5vdCA9IDI0O1xuICAgIHN0YXRpYyBub3RFcSA9IDI1O1xuICAgIHN0YXRpYyBhbmQgPSAyNjtcbiAgICBzdGF0aWMgb3IgPSAyNztcbiAgICBzdGF0aWMgcGx1cyA9IDI4O1xuICAgIHN0YXRpYyBtaW51cyA9IDI5O1xuICAgIHN0YXRpYyBkaXYgPSAzMDtcbiAgICBzdGF0aWMgbXVsdCA9IDMxO1xuICAgIHN0YXRpYyBtb2QgPSAzMjtcbiAgICBzdGF0aWMgaW52YWxpZCA9IDMzO1xuICAgIHN0YXRpYyBjb2xvbiA9IDM0O1xuICAgIHN0YXRpYyBXSElMRV9USUxMID0gMzU7XG4gICAgc3RhdGljIEZPUl9MT09QID0gMzY7XG4gICAgc3RhdGljIHVwID0gMzc7XG4gICAgc3RhdGljIGRvd24gPSAzODtcbiAgICBzdGF0aWMgd2l0aCA9IDM5O1xuICAgIHN0YXRpYyBpbiA9IDQwO1xuICAgIHN0YXRpYyBUSUxMID0gNDE7XG4gICAgc3RhdGljIEJSRUFLID0gNDI7XG59XG5cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gICAgdHlwZTogbnVtYmVyO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgbGluZT86IG51bWJlcjtcbiAgICBjb2w/OiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IodHlwZTogbnVtYmVyLCB2YWx1ZTogYW55LCBsaW5lOiBudW1iZXIgPSAxLCBjb2w6IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICB0aGlzLmNvbCA9IGNvbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb20odHlwZTogbnVtYmVyLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4odHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy50eXBlLnRvU3RyaW5nKCl9LCAke3RoaXMudmFsdWV9XWA7XG4gICAgfVxufVxuXG5cbmNsYXNzIENoYXJzIHtcbiAgICBzdGF0aWMgZXF1YWwgPSAnPScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgY29tbWEgPSAnLCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2VtaUNvbG9uID0gJzsnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGxwYXJlbiA9ICcoJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBycGFyZW4gPSAnKScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYmFja3NsYXNoID0gJ1xcXFwnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHF1b3RlID0gJ1wiJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzcXVvdGUgPSBcIidcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwbHVzID0gXCIrXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbWludXMgPSBcIi1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzdGFyID0gXCIqXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2xhc2ggPSBcIi9cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwZXJjZW50ID0gXCIlXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNlID0gXCJ7XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcmJyYWNlID0gXCJ9XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSBcIltcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IFwiXVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIG5vdCA9IFwiIVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGdyZWF0ID0gXCI+XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGVzcyA9IFwiPFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGFuZCA9IFwiJlwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBpcGUgPSBcInxcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb2xvbiA9IFwiOlwiLmNoYXJDb2RlQXQoMCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMZXhlckRpY3Rpb25hcnkge1xuICAgIGxhbmc6IHN0cmluZztcbiAgICBrZXl3b3JkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKGxhbmc6IHN0cmluZywga2V5d29yZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5rZXl3b3JkcyA9IHsgLi4ua2V5d29yZHMgfTtcbiAgICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICB9XG59XG5cbi8qKlxuICogTGV4aW5nID0+IFBhcnNpbmcgPT09PiBBU1QgPT09PiBXYWxraW5nXG4gKi9cbi8qKlxuICogTGV4ZXJcbiAqL1xuY2xhc3MgTGV4ZXIge1xuICAgIHN0YXRpYyBfZGVmYXVsdExhbmd1YWdlID0gbmV3IExleGVyRGljdGlvbmFyeShcImVuXCIsIHtcbiAgICAgICAgXCJpZlwiOiBcImlmXCIsXG4gICAgICAgIFwiZWxzZVwiOiBcImVsc2VcIixcbiAgICAgICAgXCJ0cnVlXCI6IFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCI6IFwiZmFsc2VcIixcbiAgICAgICAgXCJudWxsXCI6IFwibnVsbFwiLFxuICAgICAgICBcIndoaWxlXCI6IFwid2hpbGVcIixcbiAgICAgICAgXCJmb3JcIjogXCJmb3JcIixcbiAgICAgICAgXCJ3aXRoXCI6IFwid2l0aFwiLFxuICAgICAgICBcInVwXCI6IFwidXBcIixcbiAgICAgICAgXCJkb3duXCI6IFwiZG93blwiLFxuICAgICAgICBcInRpbGxcIjogXCJ0aWxsXCIsXG4gICAgICAgIFwiaW5cIjogXCJpblwiLFxuICAgICAgICBcImJyZWFrXCI6IFwiYnJlYWtcIixcbiAgICB9KTtcbiAgICBzdGF0aWMgbGFuZ3VhZ2VzOiBMZXhlckRpY3Rpb25hcnlbXSA9IFtcbiAgICAgICAgTGV4ZXIuX2RlZmF1bHRMYW5ndWFnZSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImZyXCIsIHtcbiAgICAgICAgICAgIFwic2lcIjogXCJpZlwiLFxuICAgICAgICAgICAgXCJzaW5vblwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidnJhaVwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZmF1eFwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBcIm51bFwiOiBcIm51bGxcIixcbiAgICAgICAgICAgIFwidGFucXVlXCI6IFwid2hpbGVcIixcbiAgICAgICAgICAgIFwicG91clwiOiBcImZvclwiLFxuICAgICAgICAgICAgXCJhdmVjXCI6IFwid2l0aFwiLFxuICAgICAgICAgICAgXCJtb25cIjogXCJ1cFwiLFxuICAgICAgICAgICAgXCJkZXNjXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJqdXNxdWFcIjogXCJ0aWxsXCIsXG4gICAgICAgICAgICBcImRhbnNcIjogXCJpblwiLFxuICAgICAgICAgICAgXCJjb3VwZXJcIjogXCJicmVha1wiLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImJtXCIsIHtcbiAgICAgICAgICAgIFwibmlpXCI6IFwiaWZcIixcbiAgICAgICAgICAgIFwibm90ZVwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidGllblwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZ2Fsb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJnYW5zYW5cIjogXCJudWxsXCIsXG4gICAgICAgICAgICBcImZvb1wiOiBcIndoaWxlXCIsXG4gICAgICAgICAgICBcInNlZ2lua2FcIjogXCJmb3JcIixcbiAgICAgICAgICAgIFwibmlpblwiOiBcIndpdGhcIixcbiAgICAgICAgICAgIFwia2F5XCI6IFwidXBcIixcbiAgICAgICAgICAgIFwia2FqXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJrYXRhXCI6IFwidGlsbFwiLFxuICAgICAgICAgICAgXCJrb25vXCI6IFwiaW5cIixcbiAgICAgICAgICAgIFwidGlrZVwiOiBcImJyZWFrXCIsXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgc3RhdGljIFJFU0VSVkVEOiB7IFtrZXk6IHN0cmluZ106IFRva2VuIH0gPSB7XG4gICAgICAgIFwiaWZcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuSUYsIFwiaWZcIiksXG4gICAgICAgIFwiZWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5FTFNFLCBcImVsc2VcIiksXG4gICAgICAgIFwidHJ1ZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5UUlVFLCB0cnVlKSxcbiAgICAgICAgXCJmYWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5GQUxTRSwgZmFsc2UpLFxuICAgICAgICBcIm51bGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuTlVMTCwgbnVsbCksXG4gICAgICAgIFwiZm9yXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkZPUl9MT09QLCBcImZvclwiKSxcbiAgICAgICAgXCJ3aGlsZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5XSElMRV9USUxMLCBcIndoaWxlXCIpLFxuICAgICAgICBcIndpdGhcIjogVG9rZW4uZnJvbShUb2tlblR5cGUud2l0aCwgXCJ3aXRoXCIpLFxuICAgICAgICBcInVwXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLnVwLCBcInVwXCIpLFxuICAgICAgICBcImRvd25cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuZG93biwgXCJkb3duXCIpLFxuICAgICAgICBcInRpbGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuVElMTCwgXCJ0aWxsXCIpLFxuICAgICAgICBcImluXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLmluLCBcImluXCIpLFxuICAgICAgICBcImJyZWFrXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkJSRUFLLCBcImJyZWFrXCIpLFxuICAgIH07XG4gICAgX2xhbmd1YWdlPzogTGV4ZXJEaWN0aW9uYXJ5O1xuICAgIF9zb3VyY2UhOiBzdHJpbmc7XG4gICAgX3Bvc2l0aW9uID0gMDtcbiAgICBfbGluZSA9IDE7XG4gICAgX2NvbCA9IDE7XG4gICAgX2N1cnJlbnRDaGFyID0gLTE7XG4gICAgZ2V0IHNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Jlc29sdmVMYW5ndWFnZSgpIHtcbiAgICAgICAgbGV0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5sZXNzKSB7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZSBzZXR0aW5nXG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmIChpZFRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5pZCkge1xuICAgICAgICAgICAgICAgIGVycm9yKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBpZFRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IExleGVyLmxhbmd1YWdlcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmxhbmcgPT09IGxhbmcpIHx8IExleGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBMZXhlci5fZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICAgICAgLy8gcmVzZXQgcmVhZGluZ1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZHZhbmNlKCkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbisrO1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fY29sKys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGljaygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA0OCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNTgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkU3RhcnQoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSAzNjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZCgpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9pc0lkKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRJZCA9IHRoaXMuX2xhbmd1YWdlXG4gICAgICAgICAgICA/ICh0aGlzLl9sYW5ndWFnZS5rZXl3b3Jkc1tyZXRdKSB8fCByZXRcbiAgICAgICAgICAgIDogcmV0O1xuICAgICAgICByZXR1cm4gTGV4ZXIuUkVTRVJWRURbdHJhbnNsYXRlZElkXSB8fCBuZXcgVG9rZW4oVG9rZW5UeXBlLmlkLCByZXQsIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xpbmVFbmQoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjID09PSAxMCB8fFxuICAgICAgICAgICAgYyA9PT0gMTMgfHxcbiAgICAgICAgICAgIFsnXFxuJywgJ1xccicsICdcXHUyMDI4JywgJ1xcdTIwMjknXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc1doaXRlU3BhY2UoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpLnRyaW0oKSA9PT0gXCJcIiAmJlxuICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShjKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzRGlnaXQoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIHJldHVybiBjID4gMCAmJiAoYyBeIDB4MzApIDw9IDk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NraXBXaGl0ZVNwYWNlKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5faXNXaGl0ZVNwYWNlKHRoaXMuX2N1cnJlbnRDaGFyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbnVtYmVyKCk6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fbGluZTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICBjb25zdCBiYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICBsZXQgYmFzZSA9IDEwO1xuICAgICAgICBpZiAoZmlyc3QgPT09ICcwJyAmJiBbJ2InLCAnQicsICd4JywgJ1gnLCAnbycsICdPJ10uaW5jbHVkZXMoYmMpKSB7XG4gICAgICAgICAgICAvLyBsb29rIGFoZWFkIHRvIHNlZSB0aGF0IHRoZSBudW1iZXIgaXMgdGFnZ2VkXG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGJjLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldCArPSBmaXJzdDtcbiAgICAgICAgICAgIGJhc2UgPSAxMDtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikgfHxcbiAgICAgICAgICAgIChiYXNlID09PSAxNiAmJlxuICAgICAgICAgICAgICAgIFsnQScsICdhJywgJ0InLCAnYicsICdDJywgJ2MnLCAnRCcsICdkJywgJ0UnLCAnZScsICdGJywgJ2YnXVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcikpKSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKSA9PT0gJy4nICYmIHRoaXMuX2lzRGlnaXQodGhpcy5fcGljaygpKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGJhc2UgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IobmV3IFRva2VuKFRva2VuVHlwZS5pZCwgYmMsIGxpbmUsIGxhc3RQKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9pc0RpZ2l0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5udW1iZXJDb25zdCwgcGFyc2VGbG9hdChyZXQpLCBsaW5lLCBsYXN0Qyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcbiAgICAgICAgICAgIFRva2VuVHlwZS5udW1iZXJDb25zdCwgcGFyc2VJbnQocmV0LCBiYXNlKSwgbGluZSwgbGFzdEMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xpdGVyYWxTdHJpbmcoc3RhcnRDaGFyOiBudW1iZXIpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBsZXQgbGFzdENoYXIgPSAtMTtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RMID0gdGhpcy5fbGluZTtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fcGljaygpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuYmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2NhcGUgY2hhclxuICAgICAgICAgICAgICAgIGlmIChbXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2hhcixcbiAgICAgICAgICAgICAgICAgICAgJ1xcXFwnLFxuICAgICAgICAgICAgICAgICAgICAnMCcsXG4gICAgICAgICAgICAgICAgICAgICdhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2InLFxuICAgICAgICAgICAgICAgICAgICAnZScsXG4gICAgICAgICAgICAgICAgICAgICdmJyxcbiAgICAgICAgICAgICAgICAgICAgJ24nLFxuICAgICAgICAgICAgICAgICAgICAncicsXG4gICAgICAgICAgICAgICAgICAgICd0JyxcbiAgICAgICAgICAgICAgICAgICAgJ3UnLFxuICAgICAgICAgICAgICAgICAgICAnVScsXG4gICAgICAgICAgICAgICAgICAgICd2JyxcbiAgICAgICAgICAgICAgICAgICAgJ3gnXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gc3RhcnRDaGFyICYmIGxhc3RDaGFyICE9PSBDaGFycy5iYWNrc2xhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyBlbmRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5zdHJpbmdDb25zdCwgcmV0LCBsYXN0TCwgbGFzdEMpO1xuICAgIH1cblxuICAgIC8vIGY9U1VCTUlUX0ZPUk0oeHh4KTtcbiAgICAvLyByID0gQ0FMTF9BUEkoQVBJX0lELCBmKTtcbiAgICAvLyBESVNQTEFZKFwiTVNHICNyXCIpXG4gICAgbmV4dFRva2VuKCk6IFRva2VuIHtcbiAgICAgICAgY29uc3QgbGFzdEwgPSB0aGlzLl9saW5lO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudENoYXIgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNMaW5lRW5kKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmUrKztcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2wgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lb2wsIFwiXFxuXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1doaXRlU3BhY2UodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpcFdoaXRlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RpZ2l0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0lkU3RhcnQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lcWVxLCBcIj09XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVxdWFsLCBcIj1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZ3JlYXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmdyZWF0RXEsIFwiPj1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZ3JlYXQsIFwiPlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sZXNzRXEsIFwiPD1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGVzcywgXCI8XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNlbWlDb2xvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5zZW1pLCBcIjtcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubHBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxwYXJlbiwgXCIoXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJwYXJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ycGFyZW4sIFwiKVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5jb21tYSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5jb21tYSwgXCIsXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxicmFjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sYnJhY2UsIFwie1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5yYnJhY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucmJyYWNlLCBcIn1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGJyYWNrZXQsIFwiW1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5yYnJhY2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5yYnJhY2tldCwgXCJdXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBsdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucGx1cywgXCIrXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLm1pbnVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm1pbnVzLCBcIi1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc2xhc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZGl2LCBcIi9cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc3Rhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5tdWx0LCBcIipcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGVyY2VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5tb2QsIFwiJVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5jb2xvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5jb2xvbiwgXCI6XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLm5vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubm90RXEsIFwiIT1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubm90LCBcIiFcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuYW5kICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMuYW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5hbmQsIFwiJiZcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGlwZSAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLnBpcGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmFuZCwgJ3x8JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVvdGUgfHwgdGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNxdW90ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fbGl0ZXJhbFN0cmluZyhzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICAgICAgVG9rZW5UeXBlLmludmFsaWQsIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVvZiwgXCJcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBQYXJzZXJcbiAqL1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVNUIHtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgfVxuICAgIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb290QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBib2R5OiBBU1RbXTtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIG5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoMSwgMSk7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJ1aWxkZXIgPSBgTW9kdWxlICR7dGhpcy5uYW1lfSBTdGFydCB7YDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiB0aGlzLmJvZHkpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIgKz0gYCR7aXQuZHVtcCgpfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlciArPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGJvZHk6IEFTVFtdLCB0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB7XFxuJHt0aGlzLmJvZHkubWFwKChlKSA9PiBlLnRvU3RyaW5nKCkpLmpvaW4oXCJcXG5cIil9fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmF3OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodG9rZW46IFRva2VuLCByYXc6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBpZGVudGlmaWVyOiBBU1Q7XG4gICAgaW5pdDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXI6IEFTVCwgaW5pdDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGlkZW50aWZpZXIubGluZSwgaWRlbnRpZmllci5jb2wpO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZGVudGlmaWVyfSA9ICR7dGhpcy5pbml0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgZXhwcmVzc2lvbjogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEFTVCkge1xuICAgICAgICBzdXBlcihleHByZXNzaW9uLmxpbmUsIGV4cHJlc3Npb24uY29sKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbGxFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjYWxsZWU6IElkZW50aWZpZXJBU1Q7XG4gICAgYXJndW1lbnRzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3RvcihjYWxsZWU6IElkZW50aWZpZXJBU1QsIGFnczogQVNUW10pIHtcbiAgICAgICAgc3VwZXIoY2FsbGVlLmxpbmUsIGNhbGxlZS5jb2wpO1xuICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhZ3M7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxlZS50b1N0cmluZygpfSguLi4ke3RoaXMuYXJndW1lbnRzLmxlbmd0aH0pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBsZWZ0OiBBU1Q7XG4gICAgb3BlcmF0aW9uOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0aW9uOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIGFyZ3VtZW50OiBBU1Q7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBUb2tlbiwgYXJndW1lbnQ6IEFTVCkge1xuICAgICAgICBzdXBlcihvcGVyYXRpb24ubGluZSwgb3BlcmF0aW9uLmNvbCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uLCB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLmFyZ3VtZW50fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBjb25zZXF1ZW50OiBBU1Q7XG4gICAgYWx0ZXJuYXRlPzogQVNUO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgY29uc2VxdWVudDogQVNULCBhbHRlcm5hdGU/OiBBU1QpIHtcbiAgICAgICAgc3VwZXIodGVzdC5saW5lLCB0ZXN0LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgaWYgJHt0aGlzLnRlc3R9ICR7dGhpcy5jb25zZXF1ZW50fSAke3RoaXMuYWx0ZXJuYXRlID8gYGVsc2UgJHt0aGlzLmFsdGVybmF0ZX0gYCA6ICcnfWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRvcjogVG9rZW47XG4gICAgcmlnaHQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihsZWZ0OiBBU1QsIG9wZXJhdG9yOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxlZnR9ICR7dGhpcy5vcGVyYXRvci52YWx1ZX0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhBY2Nlc3NvckFTVCBleHRlbmRzIEFTVCB7XG4gICAgb3duZXI6IEFTVDtcbiAgICBrZXk6IEFTVDtcbiAgICBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG93bmVyOiBBU1QsIGtleTogQVNULCBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKG93bmVyLmxpbmUsIG93bmVyLmNvbCk7XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3duZXJ9WyR7dGhpcy5rZXl9XWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgcHJvcGVydGllczogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICAgIG92ZXJyaWRlICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJ7Li4ufVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgZWxlbWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBBU1RbXSwgc3RhcnQ/OiBBU1QsIGVuZD86IEFTVCkge1xuICAgICAgICBzdXBlcihzdGFydD8ubGluZSwgc3RhcnQ/LmNvbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlsuLi5dXCI7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9iamVjdFByb3BlcnR5IGV4dGVuZHMgQVNUIHtcbiAgICBrZXk6IEFTVDtcbiAgICB2YWx1ZTogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGtleTogQVNULCB2YWx1ZTogQVNUKSB7XG4gICAgICAgIHN1cGVyKGtleS5saW5lLCBrZXkuY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2hpbGVMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICB0ZXN0OiBBU1Q7XG4gICAgYm9keTogQVNUO1xuICAgIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgYm9keTogQVNULCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4sIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmV0YWluID0gcmV0YWluO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbml0OiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCxcbiAgICAgICAgcHVibGljIHRlc3Q6IEFTVCxcbiAgICAgICAgcHVibGljIHVwZGF0ZTogQVNULFxuICAgICAgICBwdWJsaWMgZGlyZWN0aW9uOiBUb2tlbixcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JPZlN0YXRlbWVudCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpZGVudGlmaWVyOiBBU1QsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBU1QsXG4gICAgICAgIHB1YmxpYyBib2R5OiBBU1QsXG4gICAgICAgIHN0YXJ0VG9rZW4/OiBUb2tlbixcbiAgICAgICAgZW5kVG9rZW4/OiBUb2tlbixcbiAgICAgICAgcHVibGljIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHVwbGVFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6IEFTVCwgcHVibGljIHNlY29uZDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGZpcnN0LmxpbmUsIGZpcnN0LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQnJlYWtBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgICBzdGF0aWMgX2Jpbm9wUHJlY2RlbmNlczogeyBbazogbnVtYmVyXTogbnVtYmVyIH0gPSB7XG4gICAgICAgIFtUb2tlblR5cGUuZXFlcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLm5vdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUuZ3JlYXRdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ncmVhdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUubGVzc106IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmxlc3NFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLnBsdXNdOiAyMCxcbiAgICAgICAgW1Rva2VuVHlwZS5taW51c106IDIwLFxuICAgICAgICBbVG9rZW5UeXBlLm11bHRdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5kaXZdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5tb2RdOiA0MCxcbiAgICB9O1xuXG4gICAgbGV4ZXIhOiBMZXhlcjtcbiAgICBjdXJyZW50VG9rZW4/OiBUb2tlbjtcbiAgICBjb25zdHJ1Y3RvcihsZXhlcjogTGV4ZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBsZXhlci5uZXh0VG9rZW4oKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdCh0eXBlOiBUb2tlblR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRoaXMubGV4ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0RU9MKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5lb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdFNlbWlPckVPTCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuZW9sIHx8XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRTZW1pKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5zZW1pKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnNlbWkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFyaWFibGUoKTogSWRlbnRpZmllckFTVCB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgSWRlbnRpZmllckFTVCh0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmlkKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmFjdG9yKCk6IEFTVCB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uQVNUKHRva2VuISwgdGhpcy5fZmFjdG9yKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubnVtYmVyQ29uc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5udW1iZXJDb25zdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuc3RyaW5nQ29uc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5scGFyZW46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuVFJVRTpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZBTFNFOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLk5VTEw6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5OVUxMKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIFwibnVsbFwiKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWwgYXJyYXkgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hcnJheUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Rlcm0oKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9mYWN0b3IoKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX3Rlcm0oKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oMCwgbm9kZSk7XG4gICAgICAgIHdoaWxlIChbVG9rZW5UeXBlLmFuZCwgVG9rZW5UeXBlLm9yXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlLCB0b2tlbiwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lcXVhbCkpIHtcbiAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCB8fCBub2RlIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZXF1YWwpO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgQXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZSwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb2JqZWN0UHJvcGVydHkoKTogT2JqZWN0UHJvcGVydHkge1xuICAgICAgICBsZXQga2V5OiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudFRva2VuLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zdHJpbmdDb25zdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gZXhwcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuaWQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGlkLnZhbHVlLCBpZC5saW5lLCBpZC5jb2wpLCBpZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLmN1cnJlbnRUb2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29sb24pO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0UHJvcGVydHkoa2V5ISwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcm9wZXJ0eSgpOiBBU1Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0UHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0aWVzKCk6IEFTVFtdIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlICE9IFRva2VuVHlwZS5yYnJhY2UpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLl9wcm9wZXJ0eSgpKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5fcHJvcGVydHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb2JqZWN0RXhwcmVzc2lvbihicmFjZVRva2VuPzogVG9rZW4pOiBBU1Qge1xuICAgICAgICB2YXIgdG9rZW4gPSBicmFjZVRva2VuID8/IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBpZiAoIWJyYWNlVG9rZW4pIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLl9vYmplY3RQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMsIHRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXJyYXlFeHByZXNzaW9uKCk6IEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICBjb25zdCBlbGVtZW50czogQVNUW10gPSB0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFja2V0KSA/IFtdIDogdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICB2YXIgc3RhcnROb2RlID0gZWxlbWVudHMubGVuZ3RoICE9PSAwID8gZWxlbWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0Tm9kZSA9IGVsZW1lbnRzLmxlbmd0aCAhPT0gMCA/IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5RXhwcmVzc2lvbihlbGVtZW50cywgc3RhcnROb2RlLCBsYXN0Tm9kZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG46IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbjtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNrZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBJbmRleEFjY2Vzc29yQVNUKG5vZGUsIGtleSk7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlCaW5hcnlFeHByZXNzaW9uKHByZWM6IG51bWJlciwgbGVmdDogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBsZWZ0O1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBwcmVjKSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KG9wZXJhdG9yLnR5cGUpO1xuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5fdGVybSgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBuZXh0UHJlYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oY3VycmVudFByZWMgKyAxLCByaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcCA9PT0gbm9kZSkgcmV0dXJuIHRtcDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBuZXcgQmluYXJ5RXhwcmVzc2lvbkFTVChub2RlLCBvcGVyYXRvciwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbnNMaXN0KCk6IEFTVFtdIHtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIC8vIGlmIChleHBlY3QoTGV4ZXIuVG9rZW5UeXBlLlJQQVJFTikpIHJldHVybiBlbXB0eUxpc3QoKVxuICAgICAgICBsZXQgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW2V4cHJdO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxsRXhwcmVzc2lvbihub2RlOiBBU1QpOiBDYWxsRXhwcmVzc2lvbkFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgbGV0IGFyZ3M6IEFTVFtdID0gW107XG4gICAgICAgIGlmICghdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5ycGFyZW4pKSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lvbkFTVChub2RlIGFzIElkZW50aWZpZXJBU1QsIGFyZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdGdW5jdGlvbkNhbGwobjogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW4pIHtcbiAgICAgICAgICAgIC8vIHByb2JhYmxlIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9jYWxsRXhwcmVzc2lvbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnRFeHByZXNzaW9uKCk6IEFTVCB7XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcblxuICAgICAgICBpZiAoIVtUb2tlblR5cGUuc2VtaSwgVG9rZW5UeXBlLmVvbCwgVG9rZW5UeXBlLmVvZl1cbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmxvY2tTdGF0ZW1lbnQoaWdub3JlRmlyc3RCcmFjZSA9IGZhbHNlKTogQmxvY2tTdGF0ZW1lbnRBU1Qge1xuICAgICAgICBpZiAoIWlnbm9yZUZpcnN0QnJhY2UpIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoW10sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgYm9keSA9IF9zdGF0ZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBbdGhpcy5fc3RhdGVtZW50KCldO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2wgfHxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuc2VtaSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5yYnJhY2UgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICAvLyBfZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLl9zdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2UpKSBicmVhaztcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnJicmFjZSkge1xuICAgICAgICAgICAgLy8gZW5kQmxvY2tcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoYm9keSwgdGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZlN0YXRlbWVudCgpOiBJZlN0YXRlbWVudEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuSUYpO1xuICAgICAgICBjb25zdCB3aXRoUGFyID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW47XG4gICAgICAgIGlmICh3aXRoUGFyKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHdpdGhQYXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29uc2VxdWVudDogQVNUO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpIHtcbiAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLl9ibG9ja1N0YXRlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICBsZXQgYWx0ZXJuYXRlOiBBU1QgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLkVMU0UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuRUxTRSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSUY6XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMuX2lmU3RhdGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudEFTVCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgIH1cbiAgICBwcml2YXRlIF93aGlsZUxvb3AoKTogV2hpbGVMb29wU3RhdGVtZW50IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuV0hJTEVfVElMTClcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKVxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIHJldHVybiBuZXcgV2hpbGVMb29wU3RhdGVtZW50KHRlc3QsIGJvZHksIHRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbiEpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9yT2ZJZGVudGlmaWVyKCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlOiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxwYXJlbjoge1xuICAgICAgICAgICAgICAgIC8vIHByb2JhYmxlIHR1cGxlXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSlcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmQgPSB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUdXBsZUV4cHJlc3Npb24oXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRva2VuVHlwZS5MQlJBQ0UgLT4gb2JqZWN0UGF0dGVybigpXG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNLRVQgLT4gYXJyYXlQYXR0ZXJuKClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqICMgRm9yTG9vcFN0YXRlbWVudCB3aXRoIHN0ZXBcbiAgICAgKiAoc2VnaW5rYXxmb3IpIGE9MCAoZm9vfHRvKSAxMCAoa2F5fGthaikgbmlpbiAyIHsgIyBmb3IgYSA9IDA7IGE8MTA7IGErPTJcbiAgICAgKlxuICAgICAqIH1cbiAgICAgKiAoc2VnaW5rYXxmb3IpIG1hbGkga29ubyBhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9yTG9vcCgpOiBBU1Qge1xuICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLkZPUl9MT09QKVxuICAgICAgICBsZXQgZm9yT2YgPVxuICAgICAgICAgICAgW1Rva2VuVHlwZS5scGFyZW5dLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgbGV0IG5vZGU6IEFTVDtcbiAgICAgICAgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5fZm9yT2ZJZGVudGlmaWVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSkge1xuICAgICAgICAgICAgICAgIGZvck9mID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBleHByO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoIWZvck9mICYmIG5vZGUgaW5zdGFuY2VvZiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsIGZvclxuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5USUxMKTtcbiAgICAgICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uOiBUb2tlbjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUudXAgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5kb3duKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodC50eXBlKVxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gbmV3IFRva2VuKFRva2VuVHlwZS51cCwgXCJ1cFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1cGRhdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS53aXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUud2l0aClcbiAgICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IGV4cHJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlID0gbmV3IExpdGVyYWxBU1QobmV3IFRva2VuKFRva2VuVHlwZS5udW1iZXJDb25zdCwgMSwgdGhpcy5jdXJyZW50VG9rZW4hLmxpbmUsIHRoaXMuY3VycmVudFRva2VuIS5jb2wpLCBcIjFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpID8gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKSA6IHRoaXMuX2V4cHJlc3Npb24oKVxuXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvckxvb3BTdGF0ZW1lbnQobm9kZSwgdGVzdCwgdXBkYXRlLCBkaXJlY3Rpb24sIGJvZHksIHN0YXJ0VG9rZW4sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9yT2YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuaW4pO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgRm9yT2ZTdGF0ZW1lbnQoXG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgc3RhcnRUb2tlbixcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiFcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnQoKTogQVNUIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQlJFQUs6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5CUkVBSyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmVha0FTVCh0aGlzLmN1cnJlbnRUb2tlbj8ubGluZSwgdGhpcy5jdXJyZW50VG9rZW4/LmNvbCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5zZW1pOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdFNlbWkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50KCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lb2w6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSUY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lmU3RhdGVtZW50KCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElMRV9USUxMOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93aGlsZUxvb3AoKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZPUl9MT09QOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JMb29wKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHBlY3QodHlwZTogVG9rZW5UeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gdHlwZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGVmaW5pdGlvbigpOiBBU1RbXSB7XG4gICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVvZikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRzID0gW3RoaXMuX3N0YXRlbWVudCgpXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5lb2YpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb290KCk6IFJvb3RBU1Qge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxleGVyLnNvdXJjZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IFwiPG1vZHVsZT5cIjtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuX2RlZmluaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSb290QVNUKGxpc3QsIG5hbWUsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcGFyc2UoKTogQVNUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEJyZWFrQnJhbmNoIHsgfVxudHlwZSBGdW5jID0gKG5vZGU6IGFueSkgPT4gYW55O1xuLy8gQVNUIFdhbGxrZXJcbmFic3RyYWN0IGNsYXNzIEFOb2RlVmlzaXRvciB7XG4gICAgcHJvdGVjdGVkIF9ub2Rlc1Zpc2l0b3JzOiB7IFtrOiBzdHJpbmddOiBGdW5jIH0gPSB7fTtcbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXJWaXNpdG9yKHR5cGU6IFR5cGU8QVNUPiwgdmlzaXRvcjogRnVuYykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHt0eXBlLm5hbWV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1JlZzo6Ojo6OicsIG1ldGhvZE5hbWUsIHR5cGUpO1xuICAgICAgICB0aGlzLl9ub2Rlc1Zpc2l0b3JzW21ldGhvZE5hbWVdID0gdmlzaXRvcjtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCB2aXNpdChub2RlOiBBU1QpOiBhbnk7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5vZGVWaXNpdG9yIGV4dGVuZHMgQU5vZGVWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoUm9vdEFTVCwgdGhpcy52aXNpdFJvb3RBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihCbG9ja1N0YXRlbWVudEFTVCwgdGhpcy52aXNpdEJsb2NrU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSWRlbnRpZmllckFTVCwgdGhpcy52aXNpdElkZW50aWZpZXJBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihMaXRlcmFsQVNULCB0aGlzLnZpc2l0TGl0ZXJhbEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEFzc2lnbm1lbnRFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihFeHByZXNzaW9uU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKENhbGxFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0Q2FsbEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihCaW5hcnlFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKFVuYXJ5RXhwcmVzc2lvbkFTVCwgdGhpcy52aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKElmU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0SWZTdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihMb2dpY2FsRXhwcmVzc2lvbkFTVCwgdGhpcy52aXNpdExvZ2ljYWxFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSW5kZXhBY2Nlc3NvckFTVCwgdGhpcy52aXNpdEluZGV4QWNjZXNzb3JBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihPYmplY3RQcm9wZXJ0eSwgdGhpcy52aXNpdE9iamVjdFByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoT2JqZWN0RXhwcmVzc2lvbiwgdGhpcy52aXNpdE9iamVjdEV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihBcnJheUV4cHJlc3Npb24sIHRoaXMudmlzaXRBcnJheUV4cHJlc3Npb24pO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKFdoaWxlTG9vcFN0YXRlbWVudCwgdGhpcy52aXNpdFdoaWxlTG9vcFN0YXRlbWVudCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEZvckxvb3BTdGF0ZW1lbnQsIHRoaXMudmlzaXRGb3JMb29wU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRm9yT2ZTdGF0ZW1lbnQsIHRoaXMudmlzaXRGb3JPZlN0YXRlbWVudCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJyZWFrQVNULCB0aGlzLnZpc2l0QnJlYWtBU1QpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2aXNpdChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHtub2RlLmNvbnN0cnVjdG9yLm5hbWV9YDtcbiAgICAgICAgLy8gY29uc3QgZm4gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcylbbWV0aG9kTmFtZV07XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXTtcbiAgICAgICAgcmV0dXJuIGZuPy5jYWxsKHRoaXMsIG5vZGUpO1xuICAgIH1cbiAgICBhc3NpZ25Qcm9wZXJ0eShvd25lcjogYW55LCBwcm9wZXJ0eTogYW55LCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBvd25lcltwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvd25lcltwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHsgfVxuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogYW55IDtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJZGVudGlmaWVyQVNUKG5vZGU6IElkZW50aWZpZXJBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0TGl0ZXJhbEFTVChub2RlOiBBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Q2FsbEV4cHJlc3Npb25BU1Qobm9kZTogQ2FsbEV4cHJlc3Npb25BU1QpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbkFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdE9iamVjdEV4cHJlc3Npb24oYXN0OiBBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QXJyYXlFeHByZXNzaW9uKGFzdDogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEJyZWFrQVNUKG5vZGU6IEJyZWFrQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgTUV2ZW50b0ZCaW5kaW5nID0gKGFyZ3M6IGFueVtdLCB2bTogTUV2ZW50bykgPT4gYW55O1xuZXhwb3J0IGNsYXNzIE1FdmVudG8gZXh0ZW5kcyBOb2RlVmlzaXRvciB7XG4gICAgX21lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBkZWJ1ZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeTogeyBbazogc3RyaW5nXTogTUV2ZW50b0ZCaW5kaW5nIH0gPSB7fTtcbiAgICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IE1hcDxudW1iZXIsIEFTVD4gPSBuZXcgTWFwKCk7XG4gICAgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4uTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnkgfTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRCbG9ja1N0YXRlbWVudEFTVChub2RlOiBCbG9ja1N0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IHRoaXMudmlzaXQobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBJZGVudGlmaWVyQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgaWQgPSBub2RlLnZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVtb3J5W2lkXTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRMaXRlcmFsQVNUKG5vZGU6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgTGl0ZXJhbEFTVCkudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVChub2RlOiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCk6IGFueSB7XG5cbiAgICAgICAgY29uc3QgaWQ6IEFTVCA9IG5vZGUuaWRlbnRpZmllcjtcblxuICAgICAgICBjb25zdCBpbml0OiBBU1QgPSBub2RlLmluaXQ7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKGlkIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudmlzaXQoaWQub3duZXIpO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdCk7XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnZpc2l0KGlkLmtleSk7XG4gICAgICAgICAgICB0aGlzLmFzc2lnblByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52aXNpdChpbml0KTtcbiAgICAgICAgICAgIHRoaXMuX21lbW9yeVtpZC52YWx1ZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgZXhwciA9IG5vZGUuZXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQoZXhwcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0Q2FsbEV4cHJlc3Npb25BU1Qobm9kZTogQ2FsbEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBub2RlLmFyZ3VtZW50cztcbiAgICAgICAgY29uc3QgY2FsbGVlTmFtZSA9IGNhbGxlZS52YWx1ZTtcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtjYWxsZWVOYW1lXTtcbiAgICAgICAgY29uc3QgYXJnVmFsdWVzID0gYXJncy5tYXAoKGUpID0+IHRoaXMudmlzaXQoZSkpO1xuICAgICAgICAvLyBwcmludChcImFyZ1ZhbHVlczo6XCIsIGFyZ1ZhbHVlcylcbiAgICAgICAgcmV0dXJuIGZuPy4oYXJnVmFsdWVzLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBsZWZ0ID0gbm9kZS5sZWZ0O1xuICAgICAgICBjb25zdCByaWdodCA9IG5vZGUucmlnaHQ7XG4gICAgICAgIGNvbnN0IG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgICAgIGNvbnN0IGxWYWx1ZSA9IHRoaXMudmlzaXQobGVmdCk7XG4gICAgICAgIGNvbnN0IHJWYWx1ZSA9IHRoaXMudmlzaXQocmlnaHQpO1xuICAgICAgICBzd2l0Y2ggKG9wLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICsgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bFZhbHVlfSR7clZhbHVlfWA7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNTdHJpbmcoclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gclZhbHVlICogbFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm11bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmRpdjpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGl2aXNpb24gYnkgMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC8gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1vZDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgJSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID4gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0RXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID49IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzRXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDw9IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lcWVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdEVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgIT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRVbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogVW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubm90KSB7XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhcmdWYWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bShhcmdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUucGx1cykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ1ZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5taW51cykge1xuICAgICAgICAgICAgcmV0dXJuIC1hcmdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHRlc3ROb2RlOiBBU1QgPSBub2RlLnRlc3Q7XG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLnZpc2l0KHRlc3ROb2RlKTtcbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG5cbiAgICAgICAgaWYgKHRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG5vZGUuY29uc2VxdWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdChub2RlLmFsdGVybmF0ZSEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cblxuICAgIHByb3RlY3RlZCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uQVNUKG5vZGU6IExvZ2ljYWxFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGVmdE5vZGUgPSBub2RlLmxlZnQ7XG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLnZpc2l0KGxlZnROb2RlKTtcbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5hbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0Qm9vbFZhbHVlICYmIF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdEJvb2xWYWx1ZSB8fCBfYm9vbFZhbHVlKHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBvd25lck5vZGUgPSAobm9kZSBhcyBJbmRleEFjY2Vzc29yQVNUKS5vd25lcjtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB0aGlzLnZpc2l0KG93bmVyTm9kZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBvd25lcltrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBpc051bShrZXkpICYmIG93bmVyLmxlbmd0aCA8IGtleSAmJiBrZXkgPj0gMCA/IG93bmVyW2tleV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2aXNpdE9iamVjdFByb3BlcnR5KG5vZGU6IEFTVCk6IGFueSB7IH1cblxuICAgIHByb3RlY3RlZCB2aXNpdE9iamVjdEV4cHJlc3Npb24oYXN0OiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZTogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChpdCBpbnN0YW5jZW9mIE9iamVjdFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMudmlzaXQoaXQua2V5KTtcbiAgICAgICAgICAgICAgICBrZXkgPSBpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHRoaXMudmlzaXQoaXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmlzaXRBcnJheUV4cHJlc3Npb24oYXN0OiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBub2RlID0gYXN0IGFzIEFycmF5RXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucmVzb2x2ZUFyZ3VtZW50cyhub2RlLmVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIHByb3RlY3RlZCB2aXNpdEJyZWFrQVNUKG5vZGU6IEJyZWFrQVNUKSB7XG4gICAgICAgIHJldHVybiBuZXcgQnJlYWtCcmFuY2goKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0V2hpbGVMb29wU3RhdGVtZW50KG5vZGU6IFdoaWxlTG9vcFN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIHRoaXMubG9nKGBXaGlsZUxvb3BTdGF0ZW1lbnQgJHtub2RlLnRlc3R9ICR7bm9kZS5ib2R5fWApXG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlIChfYm9vbFZhbHVlKHRoaXMudmlzaXQobm9kZS50ZXN0KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0Rm9yTG9vcFN0YXRlbWVudChub2RlOiBGb3JMb29wU3RhdGVtZW50KTogYW55IHtcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbG9vcElkZW50aWZpZXIgPSBub2RlLmluaXQuaWRlbnRpZmllclxuICAgICAgICBpZiAoIShsb29wSWRlbnRpZmllciBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkZW50aWZlciBmb3VuZFwiKVxuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdC5pbml0KVxuICAgICAgICB0aGlzLl9tZW1vcnlbbG9vcElkZW50aWZpZXIudmFsdWVdID0gaW5pdGlhbFZhbHVlXG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLl9tZW1vcnlbbG9vcElkZW50aWZpZXIudmFsdWVdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIGlmIChub2RlLnVwZGF0ZSBpbnN0YW5jZW9mIExpdGVyYWxBU1QgJiYgaXNOdW0obm9kZS51cGRhdGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLl9tZW1vcnlbbG9vcElkZW50aWZpZXIudmFsdWVdO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW4gdXBkYXRlIHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV0gPSBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyBub2RlLnVwZGF0ZS52YWx1ZSA6IHRtcCAtIG5vZGUudXBkYXRlLnZhbHVlO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS51cGRhdGUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpOiBhbnkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy52aXNpdChub2RlLmNvbGxlY3Rpb24pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ2FuIGl0ZXJhdGUgbm9uIGFycmF5IG9iamVjdFwiKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGVjbGFyZUZvcklkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyLCBpdClcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlOiBBU1QsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFR1cGxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIG1ha2UgYSB0dXBsZSBmcm9tIG5vbiBBcnJheSBlbGVtZW50XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tZW1vcnlbKG5vZGUuZmlyc3QgYXMgSWRlbnRpZmllckFTVCkudmFsdWVdID0gdmFsdWVbMF1cbiAgICAgICAgICAgIHRoaXMuX21lbW9yeVsobm9kZS5zZWNvbmQgYXMgSWRlbnRpZmllckFTVCkudmFsdWVdID0gdmFsdWVbMV1cbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tZW1vcnlbKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWVdID0gdmFsdWVcbiAgICAgICAgbnVsbFxuICAgIH1cbiAgICByZXNvbHZlQXJndW1lbnRzKGFyZ3M6IEFTVFtdKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGFyZ3MubWFwKChpdDogQVNUKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdChpdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbXBpbGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpOiBBU1Qge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvZGUoc291cmNlKTtcbiAgICAgICAgaWYgKGNhY2hlICYmIHRoaXMuX2NhY2hlLmhhcyhoYXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldChoYXNoKSE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIoc291cmNlKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihsZXhlcik7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHBhcnNlci5wYXJzZSgpO1xuXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5fY2FjaGUuc2V0KGhhc2gsIG1vZHVsZSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgc3RhdGljIHVucmVnaXN0ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIHN0YXRpYyBydW4oc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWV2ZW50byA9IG5ldyBNRXZlbnRvKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIG1ldmVudG8udmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbmV3SW5zdGFuY2UoKTogTUV2ZW50byB7XG4gICAgICAgIC8vIGNvbnN0IGxleGVyID0gTGV4ZXIoc291cmNlKTtcbiAgICAgICAgLy8gY29uc3QgcGFyc2VyID0gUGFyc2VyKGxleGVyKTtcbiAgICAgICAgLy8gY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgIHJldHVybiBuZXcgTUV2ZW50bygpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE1FdmVudG8ge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4uIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgICAgIHJldC5fbWVtb3J5ID0geyAuLi50aGlzLl9tZW1vcnkgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgbmV3QXN5bmNJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICBjb25zdCBhc3luY0lucyA9IE1FdmVudG9Bc3luYy5uZXdJbnN0YW5jZSgpO1xuICAgICAgICBhc3luY0lucy5fbWVtb3J5ID0gdGhpcy5fbWVtb3J5O1xuICAgICAgICAvLy8gPz8/P1xuICAgICAgICBhc3luY0lucy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeTtcbiAgICAgICAgcmV0dXJuIGFzeW5jSW5zO1xuICAgIH07XG5cbn1cblxuZXhwb3J0IGNsYXNzIE1FdmVudG9Bc3luYyBleHRlbmRzIE1FdmVudG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFJvb3RBU1Qobm9kZTogUm9vdEFTVCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gbm9kZS5ib2R5O1xuICAgICAgICBsZXQgbGFzdDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGxhc3QgPSBhd2FpdCB0aGlzLnZpc2l0KG4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRCbG9ja1N0YXRlbWVudEFTVChub2RlOiBCbG9ja1N0YXRlbWVudEFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IGF3YWl0IHRoaXMudmlzaXQobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdElkZW50aWZpZXJBU1Qobm9kZTogQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaWQgPSAobm9kZSBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbW9yeVtpZF07XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdExpdGVyYWxBU1Qobm9kZTogTGl0ZXJhbEFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVChub2RlOiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBpZDogQVNUID0gbm9kZS5pZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IGluaXQ6IEFTVCA9IG5vZGUuaW5pdDtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYXdhaXQgdGhpcy52aXNpdChpZC5vd25lcik7XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5pbml0KTtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGF3YWl0IHRoaXMudmlzaXQoaWQua2V5KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkge1xuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGluaXQpO1xuICAgICAgICAgICAgdGhpcy5fbWVtb3J5W2lkLnZhbHVlXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KGV4cHIpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRDYWxsRXhwcmVzc2lvbkFTVChub2RlOiBDYWxsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgICAgY29uc3QgYXJncyA9IG5vZGUuYXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gY2FsbGVlLnZhbHVlO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2NhbGxlZU5hbWVdO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcmdzLm1hcCgoZSkgPT4gdGhpcy52aXNpdChlKSkpO1xuICAgICAgICAvLyBwcmludChcImFyZ1ZhbHVlczo6XCIsIGFyZ1ZhbHVlcylcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuPy4oYXJnVmFsdWVzLCB0aGlzKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlLmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgbFZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChsZWZ0KTtcbiAgICAgICAgY29uc3QgclZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChyaWdodCk7XG4gICAgICAgIHN3aXRjaCAob3AudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtsVmFsdWV9JHtyVmFsdWV9YDtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAtIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc1N0cmluZyhyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByVmFsdWUgKiBsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZGl2OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaXZpc2lvbiBieSAwXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubW9kOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAlIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPj0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3M6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDwgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3NFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPD0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmVxZXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA9PT0gclZhbHVlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubm90RXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAhPT0gclZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRVbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogVW5hcnlFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IG5vZGUuYXJndW1lbnQ7XG4gICAgICAgIGNvbnN0IG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChhcmcpO1xuICAgICAgICBpZiAoaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSAgYXN5bmMgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgdGVzdCA9IGF3YWl0IHRoaXMudmlzaXQobGVmdE5vZGUpO1xuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLmFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3RCb29sVmFsdWUgJiYgX2Jvb2xWYWx1ZShhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0Qm9vbFZhbHVlIHx8IF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgY29uc3Qgb3duZXJOb2RlID0gKG5vZGUgYXMgSW5kZXhBY2Nlc3NvckFTVCkub3duZXI7XG4gICAgICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy52aXNpdChvd25lck5vZGUpO1xuICAgICAgICBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gb3duZXJba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gaXNOdW0oa2V5KSAmJiBvd25lci5sZW5ndGggPCBrZXkgJiYga2V5ID49IDAgPyBvd25lcltrZXldIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKSB7IH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdE9iamVjdEV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2U6IGFueSA9IHt9O1xuICAgICAgICBjb25zdCBub2RlID0gYXN0IGFzIE9iamVjdEV4cHJlc3Npb247XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2Ygbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaXQgaW5zdGFuY2VvZiBPYmplY3RQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBhd2FpdCB0aGlzLnZpc2l0KGl0LmtleSk7XG4gICAgICAgICAgICAgICAga2V5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBhd2FpdCB0aGlzLnZpc2l0KGl0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0QXJyYXlFeHByZXNzaW9uKGFzdDogQVNUKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgdGhpcy5yZXNvbHZlQXJndW1lbnRzQXN5bmMobm9kZS5lbGVtZW50cyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KSB7XG4gICAgICAgIHRoaXMubG9nKGBXaGlsZUxvb3BTdGF0ZW1lbnQgJHtub2RlLnRlc3R9ICR7bm9kZS5ib2R5fWApXG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlIChfYm9vbFZhbHVlKHRoaXMudmlzaXQobm9kZS50ZXN0KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCkge1xuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBsb29wSWRlbnRpZmllciA9IG5vZGUuaW5pdC5pZGVudGlmaWVyXG4gICAgICAgIGlmICghKGxvb3BJZGVudGlmaWVyIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRlbnRpZmVyIGZvdW5kXCIpXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMudmlzaXQobm9kZS5pbml0LmluaXQpXG4gICAgICAgIHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV0gPSBpbml0aWFsVmFsdWVcbiAgICAgICAgcmV0YWluZXI/LnB1c2goaW5pdGlhbFZhbHVlKVxuICAgICAgICBjb25zdCB0ZXN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLnRlc3QpXG4gICAgICAgICAgICBpZiAoaXNOdW0ocmV0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gcmV0ID49IHRtcCA6IHJldCA8PSB0bXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKHJldCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRlc3QoKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlIGluc3RhbmNlb2YgTGl0ZXJhbEFTVCAmJiBpc051bShub2RlLnVwZGF0ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBhdXRvIGhhbmRsZVxuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX21lbW9yeVtsb29wSWRlbnRpZmllci52YWx1ZV07XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bSh0bXApKSB0aHJvdyBFcnJvcihcIkNhbiB1cGRhdGUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWVtb3J5W2xvb3BJZGVudGlmaWVyLnZhbHVlXSA9IG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHRtcCArIG5vZGUudXBkYXRlLnZhbHVlIDogdG1wIC0gbm9kZS51cGRhdGUudmFsdWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLnVwZGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0YWluZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMudmlzaXQobm9kZS5jb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBpdGVyYXRlIG5vbiBhcnJheSBvYmplY3RcIilcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlY2xhcmVGb3JJZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllciwgaXQpXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cblxuICAgIGFzeW5jIHJlc29sdmVBcmd1bWVudHNBc3luYyhhcmdzOiBBU1RbXSk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGFyZ3MubWFwKGFzeW5jIChpdDogQVNUKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChpdCk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVnaXN0ZXJGdW5jdGlvbihpZDogc3RyaW5nLCBmbjogTUV2ZW50b0ZCaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2lkXSA9IGZuO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHVucmVnaXN0ZXJGdW5jdGlvbihpZDogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF07XG4gICAgfVxuICAgIG92ZXJyaWRlICBhc3luYyBleGVjdXRlKHNvdXJjZTogc3RyaW5nLCBjYWNoZSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gTUV2ZW50by5jb21waWxlKHNvdXJjZSwgY2FjaGUpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBvdmVycmlkZSBhc3luYyBydW4oc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWV2ZW50byA9IG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gTUV2ZW50by5jb21waWxlKHNvdXJjZSwgY2FjaGUpO1xuICAgICAgICByZXR1cm4gYXdhaXQgbWV2ZW50by52aXNpdChtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBvdmVycmlkZSBuZXdJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICByZXR1cm4gbmV3IE1FdmVudG9Bc3luYygpO1xuICAgIH1cblxuXG4gICAgb3ZlcnJpZGUgY2xvbmUoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgdmFyIHJldCA9IG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4udGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgfTtcbiAgICAgICAgcmV0Ll9tZW1vcnkgPSB7IC4uLnRoaXMuX21lbW9yeSB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn1cbiJdfQ==
|