badmfck-api-server 2.5.3 → 2.5.5
Sign up to get free protection for your applications and to get access to all the features.
@@ -83,7 +83,7 @@ async function Initializer(services) {
|
|
83
83
|
exports.Initializer = Initializer;
|
84
84
|
class APIService extends BaseService_1.BaseService {
|
85
85
|
static nextLogID = 0;
|
86
|
-
version = "2.5.
|
86
|
+
version = "2.5.4";
|
87
87
|
options;
|
88
88
|
monitor;
|
89
89
|
monitorIndexFile;
|
@@ -454,4 +454,4 @@ class APIService extends BaseService_1.BaseService {
|
|
454
454
|
}
|
455
455
|
}
|
456
456
|
exports.APIService = APIService;
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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QUcsQ0FBQTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxDQUFDLE1BQU07Z0JBQ1QsTUFBTSxHQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNqQixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQS9jRixnQ0FpZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcywgeyBBcHBsaWNhdGlvbiwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJ1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UsIElCYXNlU2VydmljZSB9IGZyb20gJy4vQmFzZVNlcnZpY2UnXG5pbXBvcnQgY29ycyBmcm9tICdjb3JzJ1xuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB7IEJhc2VFbmRwb2ludCwgSUJhc2VFbmRwb2ludCB9IGZyb20gJy4vQmFzZUVuZHBvaW50J1xuaW1wb3J0IERlZmF1bHRFcnJvcnMsIHsgRXJyb3JVdGlscyB9IGZyb20gJy4vc3RydWN0dXJlcy9EZWZhdWx0RXJyb3JzJ1xuaW1wb3J0IHsgSFRUUFJlcXVlc3RWTywgSUVycm9yLCBUcmFuc2ZlclBhY2tldFZPIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0ludGVyZmFjZXMnXG5pbXBvcnQge1JlcX0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSAnLi9Mb2dTZXJ2aWNlJ1xuaW1wb3J0IHsgTW9uaXRvciB9IGZyb20gJy4vbW9uaXRvci9Nb25pdG9yJ1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBmaWxlVXBsb2FkIGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCBvcyBmcm9tIFwib3NcIlxuaW1wb3J0IHsgTGl2ZW5lc3MgfSBmcm9tICcuL3JvdXRlcy9MaXZlbmVzcydcbmltcG9ydCB7IFJlYWRpbmVzcyB9IGZyb20gJy4vcm91dGVzL1JlYWRpbmVzcydcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ2F4aW9zJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjUuM1wiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcD09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlLGVycilcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yICYmIGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZWYscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkNBTlRfU0VORF9GSUxFLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHJlcXVlc3RUaW1lLGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSlcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZGF0YS5yZWRpcmVjdCl7XG5cdFx0XHRcdFx0cmVzLnJlZGlyZWN0KGRhdGEucmVkaXJlY3QpO1xuXHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHtyZWRpcmVjdDpkYXRhLnJlZGlyZWN0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBzZXR1cCBoZWFkZXJzXG5cdFx0XHRcdFx0aWYoZGF0YS5oZWFkZXJzKXtcblx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiBkYXRhLmhlYWRlcnMpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoaSxkYXRhLmhlYWRlcnNbaV0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cz45OSlcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlID0gZGF0YS5lcnJvci5odHRwU3RhdHVzXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGU9ZGF0YS5odHRwU3RhdHVzID8/IDIwMFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGRhdGEucmF3UmVzcG9uc2Upe1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YS5kYXRhKVxuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YSk7XG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cblx0XHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYodGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyAmJiBsb2cpXG5cdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcbiAgICB9XG5cblxuXHRjaGVja0RhdGFMZW5ndGgoZGF0YTphbnkscmVzdWx0PzphbnksbHZsPzpudW1iZXIpOmFueXtcblx0XHRcblx0XHRpZighbHZsKVxuXHRcdFx0bHZsPTA7XG5cblx0XHRpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZih0eXBlb2YgZGF0YT09PVwic3RyaW5nXCIgJiYgZGF0YS5sZW5ndGg+MTAyNClcblx0XHRcdFx0cmV0dXJuIGRhdGEuc3Vic3RyaW5nKDAsMTAwMCkrXCIuLi4gKHRvdGFsOlwiICsgZGF0YS5sZW5ndGggKyBcIilcIlxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0aWYodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYoIXJlc3VsdClcblx0XHRcdFx0cmVzdWx0PXt9O1xuXHRcdFx0bGV0IGFycmNudCA9IDEwMDtcblx0XHRcdGZvcihsZXQgaSBpbiBkYXRhKXtcblx0XHRcdFx0cmVzdWx0W2ldPXRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGFbaV0scmVzdWx0W2ldLGx2bCsxKTtcblx0XHRcdFx0YXJyY250LS07XG5cdFx0XHRcdGlmKGFycmNudDw9MCl7XG5cdFx0XHRcdFx0cmVzdWx0W1wiLi4uXCJdPVwiLi4uIHRvdGFsOiBcIitBcnJheS5pc0FycmF5KGRhdGEpP2RhdGEubGVuZ3RoOk9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0ID8/IG51bGw7XG5cdH1cblxufVxuIl19
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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QUcsQ0FBQTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxDQUFDLE1BQU07Z0JBQ1QsTUFBTSxHQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNqQixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQS9jRixnQ0FpZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcywgeyBBcHBsaWNhdGlvbiwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJ1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UsIElCYXNlU2VydmljZSB9IGZyb20gJy4vQmFzZVNlcnZpY2UnXG5pbXBvcnQgY29ycyBmcm9tICdjb3JzJ1xuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB7IEJhc2VFbmRwb2ludCwgSUJhc2VFbmRwb2ludCB9IGZyb20gJy4vQmFzZUVuZHBvaW50J1xuaW1wb3J0IERlZmF1bHRFcnJvcnMsIHsgRXJyb3JVdGlscyB9IGZyb20gJy4vc3RydWN0dXJlcy9EZWZhdWx0RXJyb3JzJ1xuaW1wb3J0IHsgSFRUUFJlcXVlc3RWTywgSUVycm9yLCBUcmFuc2ZlclBhY2tldFZPIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0ludGVyZmFjZXMnXG5pbXBvcnQge1JlcX0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSAnLi9Mb2dTZXJ2aWNlJ1xuaW1wb3J0IHsgTW9uaXRvciB9IGZyb20gJy4vbW9uaXRvci9Nb25pdG9yJ1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBmaWxlVXBsb2FkIGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCBvcyBmcm9tIFwib3NcIlxuaW1wb3J0IHsgTGl2ZW5lc3MgfSBmcm9tICcuL3JvdXRlcy9MaXZlbmVzcydcbmltcG9ydCB7IFJlYWRpbmVzcyB9IGZyb20gJy4vcm91dGVzL1JlYWRpbmVzcydcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ2F4aW9zJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjUuNFwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcD09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlLGVycilcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yICYmIGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZWYscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkNBTlRfU0VORF9GSUxFLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHJlcXVlc3RUaW1lLGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSlcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZGF0YS5yZWRpcmVjdCl7XG5cdFx0XHRcdFx0cmVzLnJlZGlyZWN0KGRhdGEucmVkaXJlY3QpO1xuXHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHtyZWRpcmVjdDpkYXRhLnJlZGlyZWN0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBzZXR1cCBoZWFkZXJzXG5cdFx0XHRcdFx0aWYoZGF0YS5oZWFkZXJzKXtcblx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiBkYXRhLmhlYWRlcnMpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoaSxkYXRhLmhlYWRlcnNbaV0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cz45OSlcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlID0gZGF0YS5lcnJvci5odHRwU3RhdHVzXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGU9ZGF0YS5odHRwU3RhdHVzID8/IDIwMFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGRhdGEucmF3UmVzcG9uc2Upe1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YS5kYXRhKVxuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YSk7XG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cblx0XHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYodGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyAmJiBsb2cpXG5cdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcbiAgICB9XG5cblxuXHRjaGVja0RhdGFMZW5ndGgoZGF0YTphbnkscmVzdWx0PzphbnksbHZsPzpudW1iZXIpOmFueXtcblx0XHRcblx0XHRpZighbHZsKVxuXHRcdFx0bHZsPTA7XG5cblx0XHRpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZih0eXBlb2YgZGF0YT09PVwic3RyaW5nXCIgJiYgZGF0YS5sZW5ndGg+MTAyNClcblx0XHRcdFx0cmV0dXJuIGRhdGEuc3Vic3RyaW5nKDAsMTAwMCkrXCIuLi4gKHRvdGFsOlwiICsgZGF0YS5sZW5ndGggKyBcIilcIlxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0aWYodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYoIXJlc3VsdClcblx0XHRcdFx0cmVzdWx0PXt9O1xuXHRcdFx0bGV0IGFycmNudCA9IDEwMDtcblx0XHRcdGZvcihsZXQgaSBpbiBkYXRhKXtcblx0XHRcdFx0cmVzdWx0W2ldPXRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGFbaV0scmVzdWx0W2ldLGx2bCsxKTtcblx0XHRcdFx0YXJyY250LS07XG5cdFx0XHRcdGlmKGFycmNudDw9MCl7XG5cdFx0XHRcdFx0cmVzdWx0W1wiLi4uXCJdPVwiLi4uIHRvdGFsOiBcIitBcnJheS5pc0FycmF5KGRhdGEpP2RhdGEubGVuZ3RoOk9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0ID8/IG51bGw7XG5cdH1cblxufVxuIl19
|
@@ -37,6 +37,7 @@ export interface MysqlError {
|
|
37
37
|
name: string;
|
38
38
|
message: string;
|
39
39
|
fatal?: boolean;
|
40
|
+
throwable: boolean;
|
40
41
|
}
|
41
42
|
export interface MysqlResult {
|
42
43
|
error?: MysqlError | null;
|
@@ -49,6 +50,7 @@ export interface MySqlQuery {
|
|
49
50
|
fields: MysqlQueryField[] | MysqlQueryFieldObject;
|
50
51
|
rollbackQuery?: string | null;
|
51
52
|
transactionID?: number;
|
53
|
+
throwable?: boolean;
|
52
54
|
}
|
53
55
|
export interface MysqlQueryField {
|
54
56
|
name: string;
|
@@ -105,12 +107,12 @@ export declare class MysqlService extends BaseService {
|
|
105
107
|
static objectToFields(obj: MysqlQueryFieldObject | MysqlQueryField[]): MysqlQueryField[];
|
106
108
|
static prepareQuery(query: string, fields: MysqlQueryField[] | MysqlQueryFieldObject): string;
|
107
109
|
static prepareQueryFieldValue(value: string | number | boolean | null | undefined, system?: boolean): string | number | boolean | null | undefined;
|
108
|
-
execute(query: string, rollbackQuery: string | null, transactionID: number): Promise<MysqlResult>;
|
109
|
-
sendQuery(conn: mysql.PoolConnection, query: string, resolve: (data: MysqlResult) => void, rollback: string | null): Promise<void>;
|
110
|
+
execute(query: string, rollbackQuery: string | null, transactionID: number, throwable?: boolean): Promise<MysqlResult>;
|
111
|
+
sendQuery(conn: mysql.PoolConnection, query: string, resolve: (data: MysqlResult) => void, rollback: string | null, throwable: boolean): Promise<void>;
|
110
112
|
queryAsync(conn: mysql.PoolConnection, query: string): Promise<{
|
111
113
|
err: MysqlError | null;
|
112
114
|
results?: any;
|
113
115
|
}>;
|
114
|
-
createMysqlQueryError(err: any): MysqlError;
|
116
|
+
createMysqlQueryError(err: any, throwable?: boolean): MysqlError;
|
115
117
|
}
|
116
118
|
export default MysqlService;
|
@@ -134,20 +134,25 @@ class MysqlService extends BaseService_1.BaseService {
|
|
134
134
|
const promises = [];
|
135
135
|
for (let i of data) {
|
136
136
|
const query = MysqlService.prepareQuery(i.query, i.fields);
|
137
|
-
promises.push(this.execute(query, i.rollbackQuery ?? null, i.transactionID ?? 0));
|
137
|
+
promises.push(this.execute(query, i.rollbackQuery ?? null, i.transactionID ?? 0, i.throwable));
|
138
138
|
}
|
139
139
|
if (this.debug)
|
140
140
|
console.log("Execute queries: ", data.length);
|
141
|
-
|
141
|
+
const result = await Promise.all(promises);
|
142
|
+
for (let i of result) {
|
143
|
+
if (i.error && (i.error.fatal || i.error.throwable))
|
144
|
+
throw i.error;
|
145
|
+
}
|
146
|
+
return result;
|
142
147
|
};
|
143
148
|
exports.REQ_MYSQL_TBEGIN.listener = async () => {
|
144
149
|
const conn = await this.pool?.getConnection();
|
145
150
|
if (!conn)
|
146
|
-
return { code: "NO_POOL", errno: 100000, fatal: true, sql: "", name: "NO_POOL", message: "Mysql pool not created" };
|
151
|
+
return { code: "NO_POOL", errno: 100000, fatal: true, sql: "", name: "NO_POOL", message: "Mysql pool not created", throwable: false };
|
147
152
|
for (let i of this.transactions) {
|
148
153
|
if (i.conn === conn) {
|
149
154
|
(0, LogService_1.logInfo)("Your connection is in transaction");
|
150
|
-
return { code: "CONN_IN_TRX", errno: 100005, fatal: true, sql: "", name: "CONN_IN_TRX", message: "Connection is in transaction" };
|
155
|
+
return { code: "CONN_IN_TRX", errno: 100005, fatal: true, throwable: false, sql: "", name: "CONN_IN_TRX", message: "Connection is in transaction" };
|
151
156
|
}
|
152
157
|
}
|
153
158
|
const tid = MysqlService.nextTransactionID++;
|
@@ -181,7 +186,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
181
186
|
fatal: true,
|
182
187
|
sql: "",
|
183
188
|
name: "NO_TRX",
|
184
|
-
message: "Transaction not found"
|
189
|
+
message: "Transaction not found",
|
185
190
|
}, data: null, rollbackError: null };
|
186
191
|
const query = MysqlService.prepareQuery(data.query.query, data.query.fields);
|
187
192
|
let err = null;
|
@@ -211,6 +216,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
211
216
|
code: "NO_TRX",
|
212
217
|
errno: 100004,
|
213
218
|
fatal: true,
|
219
|
+
throwable: false,
|
214
220
|
sql: "",
|
215
221
|
name: "NO_TRX",
|
216
222
|
message: "Transaction not found"
|
@@ -228,7 +234,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
228
234
|
fatal: true,
|
229
235
|
sql: "",
|
230
236
|
name: "NO_TRX",
|
231
|
-
message: "Transaction not found"
|
237
|
+
message: "Transaction not found",
|
238
|
+
throwable: false
|
232
239
|
};
|
233
240
|
}
|
234
241
|
if (this.debug)
|
@@ -343,7 +350,11 @@ class MysqlService extends BaseService_1.BaseService {
|
|
343
350
|
port: this.options.port,
|
344
351
|
connectionLimit: this.options.connectionLimit,
|
345
352
|
queueLimit: 10,
|
346
|
-
multipleStatements: true
|
353
|
+
multipleStatements: true,
|
354
|
+
enableKeepAlive: true,
|
355
|
+
keepAliveInitialDelay: 3 * 1000,
|
356
|
+
maxIdle: 0,
|
357
|
+
idleTimeout: 1000 * 60 * 60
|
347
358
|
});
|
348
359
|
}
|
349
360
|
catch (e) {
|
@@ -351,16 +362,20 @@ class MysqlService extends BaseService_1.BaseService {
|
|
351
362
|
return false;
|
352
363
|
}
|
353
364
|
this.pool?.on('connection', (connection) => {
|
354
|
-
|
365
|
+
if (this.debug)
|
366
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "MYSQL CONNECTION CREATED");
|
355
367
|
});
|
356
368
|
this.pool?.on('acquire', (connection) => {
|
357
|
-
|
369
|
+
if (this.debug)
|
370
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "MYSQL CONNECTION ACQUIRED");
|
358
371
|
});
|
359
372
|
this.pool?.on('release', (connection) => {
|
360
|
-
|
373
|
+
if (this.debug)
|
374
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "MYSQL CONNECTION RELEASED");
|
361
375
|
});
|
362
376
|
this.pool?.on('enqueue', () => {
|
363
|
-
|
377
|
+
if (this.debug)
|
378
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "MYSQL CONNECTION ENQUEUED");
|
364
379
|
});
|
365
380
|
if (this.debug)
|
366
381
|
console.log("Check mysql connection");
|
@@ -368,6 +383,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
368
383
|
try {
|
369
384
|
const conn = await this.pool?.getConnection();
|
370
385
|
if (conn) {
|
386
|
+
const [res, f] = await conn.query("SELECT 1");
|
371
387
|
conn?.release();
|
372
388
|
(0, LogService_1.logInfo)("${MysqlService.js}", "Connected to MYSQL!");
|
373
389
|
resolve(true);
|
@@ -511,7 +527,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
511
527
|
return "NULL";
|
512
528
|
return value;
|
513
529
|
}
|
514
|
-
async execute(query, rollbackQuery, transactionID) {
|
530
|
+
async execute(query, rollbackQuery, transactionID, throwable) {
|
515
531
|
return new Promise(async (resolve, reject) => {
|
516
532
|
if (!this.pool) {
|
517
533
|
(0, LogService_1.logError)("${MysqlService.js}", "No pool");
|
@@ -522,7 +538,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
522
538
|
fatal: true,
|
523
539
|
sql: query,
|
524
540
|
name: "NO_POOL",
|
525
|
-
message: "Mysql pool not created"
|
541
|
+
message: "Mysql pool not created",
|
542
|
+
throwable: throwable ? true : false
|
526
543
|
},
|
527
544
|
data: null,
|
528
545
|
});
|
@@ -549,7 +566,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
549
566
|
fatal: true,
|
550
567
|
sql: query,
|
551
568
|
name: "NO_CONN",
|
552
|
-
message: "Mysql pool cant get connection"
|
569
|
+
message: "Mysql pool cant get connection",
|
570
|
+
throwable: throwable ? true : false
|
553
571
|
},
|
554
572
|
data: null,
|
555
573
|
});
|
@@ -561,7 +579,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
561
579
|
break;
|
562
580
|
}
|
563
581
|
}
|
564
|
-
this.sendQuery(conn, query, resolve, rollbackQuery);
|
582
|
+
this.sendQuery(conn, query, resolve, rollbackQuery, throwable ? true : false);
|
565
583
|
}
|
566
584
|
catch (e) {
|
567
585
|
(0, LogService_1.logError)("${MysqlService.js}", e);
|
@@ -572,6 +590,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
572
590
|
code: "NO_CONN",
|
573
591
|
errno: 100001,
|
574
592
|
fatal: true,
|
593
|
+
throwable: throwable ? true : false,
|
575
594
|
sql: query,
|
576
595
|
name: "NO_CONN",
|
577
596
|
message: (e && typeof e === "object" && "message" in e) ? e.message : "Mysql cant get connection"
|
@@ -582,7 +601,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
582
601
|
}
|
583
602
|
});
|
584
603
|
}
|
585
|
-
async sendQuery(conn, query, resolve, rollback) {
|
604
|
+
async sendQuery(conn, query, resolve, rollback, throwable) {
|
586
605
|
let errCatched = false;
|
587
606
|
conn.on("error", async (err) => {
|
588
607
|
errCatched = true;
|
@@ -591,8 +610,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
591
610
|
rollbackError = (await this.queryAsync(conn, rollback)).err;
|
592
611
|
(0, LogService_1.logError)("${MysqlService.js}->conn.on('error')", err);
|
593
612
|
try {
|
594
|
-
conn.release();
|
595
613
|
conn.removeAllListeners();
|
614
|
+
conn.destroy();
|
596
615
|
}
|
597
616
|
catch (e) { }
|
598
617
|
resolve({
|
@@ -602,7 +621,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
602
621
|
fatal: true,
|
603
622
|
sql: query,
|
604
623
|
name: "CONN_ERR",
|
605
|
-
message: "Error: " + err
|
624
|
+
message: "Error: " + err,
|
625
|
+
throwable: throwable
|
606
626
|
},
|
607
627
|
data: null,
|
608
628
|
rollbackError: rollbackError
|
@@ -622,7 +642,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
622
642
|
const dup = `${queryResult.err}`.toLowerCase().indexOf("er_dup_entry") !== -1;
|
623
643
|
(0, LogService_1.logError)("${MysqlService.js}->query error", queryResult.err);
|
624
644
|
resolve({
|
625
|
-
error: queryResult.err,
|
645
|
+
error: { ...queryResult.err, throwable: throwable },
|
626
646
|
data: null,
|
627
647
|
rollbackError: rollbackError,
|
628
648
|
isDuplicateError: dup
|
@@ -633,8 +653,9 @@ class MysqlService extends BaseService_1.BaseService {
|
|
633
653
|
conn.removeAllListeners();
|
634
654
|
}
|
635
655
|
catch (e) { }
|
656
|
+
const err = queryResult.err ? { ...queryResult.err, throwable: throwable } : null;
|
636
657
|
resolve({
|
637
|
-
error:
|
658
|
+
error: err,
|
638
659
|
data: queryResult.results,
|
639
660
|
});
|
640
661
|
}
|
@@ -651,14 +672,15 @@ class MysqlService extends BaseService_1.BaseService {
|
|
651
672
|
results: result[0],
|
652
673
|
};
|
653
674
|
}
|
654
|
-
createMysqlQueryError(err) {
|
675
|
+
createMysqlQueryError(err, throwable) {
|
655
676
|
if (err && typeof err === "object" && "code" in err && "errno" in err && "sql" in err && "name" in err && "message" in err) {
|
656
677
|
return {
|
657
678
|
code: err.code,
|
658
679
|
errno: err.errno,
|
659
680
|
sql: err.sql,
|
660
681
|
name: err.name,
|
661
|
-
message: err.message
|
682
|
+
message: err.message,
|
683
|
+
throwable: throwable ? true : false
|
662
684
|
};
|
663
685
|
}
|
664
686
|
else {
|
@@ -668,7 +690,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
668
690
|
fatal: true,
|
669
691
|
sql: "no query",
|
670
692
|
name: "QUERY_ERR",
|
671
|
-
message: "Error: " + (err) ? err : ""
|
693
|
+
message: "Error: " + (err) ? err : "",
|
694
|
+
throwable: throwable ? true : false
|
672
695
|
};
|
673
696
|
}
|
674
697
|
}
|
@@ -701,4 +724,4 @@ const encrypt = (txt) => {
|
|
701
724
|
}
|
702
725
|
};
|
703
726
|
exports.default = MysqlService;
|
704
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBbUU7QUFDbkUsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFHVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBMEV2SSxNQUFhLFlBQWEsU0FBUSx5QkFBVztJQUV6QyxtQkFBbUIsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksR0FBQyxLQUFLLENBQUM7SUFDbkIsSUFBSSxHQUFpQixJQUFJLENBQUM7SUFDMUIsT0FBTyxDQUFxQjtJQUM1Qixj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QUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBQUEsT0FBTSxDQUFDLEVBQUM7UUFDTCxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFVLEVBQWEsRUFBRTtJQUN4QyxJQUFHO1FBQ0MsSUFBSSxRQUFRLEdBQUcsSUFBQSx1QkFBYyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ3JELFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDOUQ7SUFBQSxPQUFNLENBQUMsRUFBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDLENBQUE7QUFFRCxrQkFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL2ltcG9ydCBteXNxbCwgeyBGaWVsZEluZm8sIE15c3FsRXJyb3IsIFBvb2wsIFBvb2xDb25uZWN0aW9uIH0gZnJvbSBcIm15c3FsXCJcblxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9CYXNlU2VydmljZVwiO1xuaW1wb3J0IFNpZ25hbCwgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBjcmVhdGVIYXNoIH0gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbywgbG9nV2FybiB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCAqIGFzIG15c3FsIGZyb20gXCJteXNxbDIvcHJvbWlzZVwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IElFcnJvciB9IGZyb20gXCIuL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgY29uc3QgU19NWVNRTF9TVEFSVEVEPW5ldyBTaWduYWw8dm9pZD4oKVxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9RVUVSWSA9IG5ldyBSZXE8TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHRbXT4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1FVRVJZXCIpO1xuLy9leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RSQU5TQUNUSU9OID0gbmV3IFJlcTxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTlwiKTtcblxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQkVHSU4gPSBuZXcgUmVxPHZvaWQsTXlzcWxFcnJvcnxudW1iZXI+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9CRUdJTkdcIik7IC8vIHJldHVybiB0cmFuc2FjdGlvbiBpZCBvciBteXNxbCBlcnJvclxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUVVFUlk9bmV3IFJlcTx7cXVlcnk6TXlTcWxRdWVyeSx0aWQ6bnVtYmVyfSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0FERF9PUEVSQVRJT05cIik7IC8vIHRpZCBtZWFucyB0cmFuc2FjdGlvbiBpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQ09NTUlUPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RDT01NSVRcIik7IC8vIHRpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUk9MTEJBQ0s9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJPTExCQUNLXCIpOyAvLyB0aWRcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVRdWVyeSA9IGFzeW5jIChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPj0+e3JldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSl9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxTZXJ2aWNlT3B0aW9uc3tcbiAgICBjb25uZWN0aW9uTGltaXQ6bnVtYmVyLFxuICAgIGhvc3Q6c3RyaW5nLFxuICAgIHVzZXI6c3RyaW5nLFxuICAgIHBhc3N3b3JkOnN0cmluZyxcbiAgICBwb3J0Om51bWJlcixcbiAgICBkYXRhYmFzZTpzdHJpbmcsICBcbiAgICBxdWV1ZUxpbWl0PzpudW1iZXIsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0PzoodHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyk9PnZvaWQsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPzpzdHJpbmcsXG4gICAgZGVidWc/OmJvb2xlYW4sXG4gICAgbmF4VHJhbnNhY3Rpb25XYWl0VGltZT86bnVtYmVyLFxuXHRtaWdyYXRpb25zPzp7XG5cdFx0ZGlyOnN0cmluZyxcblx0XHRjYWxsYmFjazooKT0+dm9pZFxuXHR9fG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbEVycm9ye1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICBlcnJubzogbnVtYmVyLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIG5hbWU6c3RyaW5nLFxuICAgIG1lc3NhZ2U6c3RyaW5nXG4gICAgZmF0YWw/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cblxuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtOmZzLldyaXRlU3RyZWFtfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU6c3RyaW5nfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU6bnVtYmVyPTA7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOk15c3FsU2VydmljZU9wdGlvbnMpe1xuICAgICAgICBzdXBlcihcIm15c3FsXCIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBcblxuICAgICAgICAvLyBkZWNyeXB0IHdoZW4gbmVlZGVkXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5ob3N0LnN0YXJ0c1dpdGgoXCJfXCIpKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhvc3QgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5ob3N0LnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnVzZXIuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXNlciA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnVzZXIuc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMudXNlclxuICAgICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YWJhc2Uuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0YWJhc2UgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICBpZih0aGlzLm9wdGlvbnMucGFzc3dvcmQuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFzc3dvcmQgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB0cnVlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5uYXhUcmFuc2FjdGlvbldhaXRUaW1lKVxuICAgICAgICAgICAgdGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gdGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWU7XG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIC8vIGNoZWNrIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElEczpudW1iZXJbXT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYobm93LWkudGltZXN0YW1wPnRoaXMubWF4VHJhbnNhY3Rpb25XYWl0VGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiUmVsZWFzZSB0cmFuc2FjdGlvbiBjb25uZWN0aW9uIGR1ZSB0byB0aW1lb3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkSURzLnB1c2goaS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PiFyZW1vdmVkSURzLmluY2x1ZGVzKGkuaWQpKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3ZlZDogXCIsY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoKVxuXG4gICAgICAgICAgICBcblxuICAgICAgICB9LDEwMDAqMzApXG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFmdGVyIDE1IG1pbiBvZiBpbmFjdGl2aXR5LCBjbG9zZSBmaWxlXG4gICAgICAgICAgICBpZihEYXRlLm5vdygpLXRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lPjEwMDAqNjAqMTUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sMTAwMCo2MCo1KVxuXG4gICAgICAgIGlmKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcikpe1xuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj11bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY3JlYXRlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGRpclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGV4ZWN1dGVRdWVyeSAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT57IHJldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSkgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcHJvY2VzcyBleGl0IGhhbmRsZXJzIGludGVycnVwdCAoY3RybCtjKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgLy8gdGVybWluYXRlIChraWxsKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdURVJNJyxhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgICAgICBsZXQgcG9vbENyZWF0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcG9vbENyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgaWYoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMISBSZXRyeWluZyBpbiAzIHNlY29uZHMuLi5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwzMDAwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9RVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhID0+e1xuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgICAgICAgICAgZGF0YT1bZGF0YV07XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGRhdGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShpLnF1ZXJ5LGkuZmllbGRzKTtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZShxdWVyeSxpLnJvbGxiYWNrUXVlcnkgPz8gbnVsbCxpLnRyYW5zYWN0aW9uSUQgPz8gMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyaWVzOiBcIixkYXRhLmxlbmd0aClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQkVHSU4ubGlzdGVuZXI9YXN5bmMgKCk9PnsgIFxuICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMucG9vbD8uZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgaWYoIWNvbm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiTk9fUE9PTFwiLGVycm5vOjEwMDAwMCxmYXRhbDp0cnVlLHNxbDpcIlwiLG5hbWU6XCJOT19QT09MXCIsbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIn1cblxuICAgICAgICAgICAgLy8gZmluZCBjb25uIGluIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihpLmNvbm49PT1jb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2NvZGU6XCJDT05OX0lOX1RSWFwiLGVycm5vOjEwMDAwNSxmYXRhbDp0cnVlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH0sZGF0YTpudWxsLHJvbGxiYWNrRXJyb3I6bnVsbH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4KVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBleGVjdXRpb24gc3RhdHVzOlwiLGVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwiKVxuXG4gICAgICAgICAgICB0cngucXVlcmllcy5wdXNoKHtzcWw6cXVlcnksc3RhdHVzOmVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwifSlcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOnNxbERhdGE/c3FsRGF0YVswXTpudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOmVycixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVENPTU1JVC5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDb21taXQgdHJhbnNhY3Rpb246XCIsdHJ4KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10aWQpO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gcG9vbDpcIix0aGlzLnRyYW5zYWN0aW9ucyApXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHRoaXMuY29tbWl0KHRyeCk7XG5cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21taXQodHJ4OklUcmFuc2FjdGlvbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgIFxuICAgICAgICB0cnl7XG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5jb21taXQoKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdHJ4LmNvbm4ucXVlcnkoXCJDT01NSVRcIik7XG4gICAgICAgICAgICB0cnguY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbGVhc2UoKTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG5cbiAgICBhc3luYyByb2xsYmFja1RyYW5zYWN0aW9uKHRyeDpJVHJhbnNhY3Rpb24sZG9uTm90UmVtb3ZlPzpib29sZWFuKTpQcm9taXNlPE15c3FsRXJyb3J8bnVsbD57XG4gICAgICAgIGxldCBlcnI9bnVsbDtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSb2xsYmFjayBzdGFydGVkXCIsdHJ4LmNvbm4pXG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5yb2xsYmFjaygpO1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiUk9MTEJBQ0tcIik7XG4gICAgICAgICAgICB0cnguY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGlmKCFkb25Ob3RSZW1vdmUpXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+aS5pZCE9PXRyeC5pZCk7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgY29tcGxldGVcIix0cnguY29ubilcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb25cIix0cngpXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4LFwicm9sbGJhY2tcIilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hBcHAoKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hpbmcgbXlzcWwgc2VydmljZVwiKVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpXG4gICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oaSk7XG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgIH1cblxuICAgIGFzeW5jIHN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyl7XG5cbiAgICAgICAgaWYoIXRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQgJiYgIXRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgcmVwb3J0IGZhaWxlZCB0cmFuc2FjdGlvbiwgbm8gcmVwb3J0IGZ1bmN0aW9uOiB0cmFuc2FjdGlvbkZhaWxSZXBvcnQgaW4gb3B0aW9ucywgYW5kIHRyYW5zYWN0aW9uRmFpbFJlcG9ydERpciBpc250IHNldFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGNvbnN0IHl5eW1tZGQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTApLnJlcGxhY2VBbGwoXCItXCIsXCJcIik7XG5cbiAgICAgICAgICAgIC8vc3RvcmUgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyLHl5eW1tZGQrXCIuanNvblwiKTtcbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lIT09ZmlsZSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZT1maWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3RvcmUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQ6IFwiLGZpbGUsdHJ4LG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgdGhpcy5wb29sID1teXNxbC5jcmVhdGVQb29sKHtcbiAgICAgICAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICAgICAgICAgICx1c2VyOiB0aGlzLm9wdGlvbnMudXNlclxuICAgICAgICAgICAgICAgICxwYXNzd29yZDogdGhpcy5vcHRpb25zLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgLGRhdGFiYXNlOiB0aGlzLm9wdGlvbnMuZGF0YWJhc2VcbiAgICAgICAgICAgICAgICAscG9ydDogdGhpcy5vcHRpb25zLnBvcnRcbiAgICAgICAgICAgICAgICAsY29ubmVjdGlvbkxpbWl0OiB0aGlzLm9wdGlvbnMuY29ubmVjdGlvbkxpbWl0XG4gICAgICAgICAgICAgICAgLHF1ZXVlTGltaXQ6IDEwXG4gICAgICAgICAgICAgICAgLG11bHRpcGxlU3RhdGVtZW50czogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIk1ZU1FMIENPTk5FQ1RJT04gQ1JFQVRFRFwiKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb29sPy5vbignYWNxdWlyZScsIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEFDUVVJUkVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucG9vbD8ub24oJ3JlbGVhc2UnLCAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBFTlFVRVVFRFwiKVxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgY29ubmVjdGlvblxuICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDaGVjayBteXNxbCBjb25uZWN0aW9uXCIpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSxyZWplY3QpPT57XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMucG9vbD8uZ2V0Q29ubmVjdGlvbigpXG4gICAgICAgICAgICAgICAgaWYoY29ubil7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4/LnJlbGVhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ29ubmVjdGVkIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY29ubmVjdCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGFzeW5jIG9uQXBwbGljYXRpb25SZWFkeSgpIHt9XG5cblxuICAgIHN0YXRpYyBmaWVsZHNUb09iamVjdChmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0LGlnbm9yZVN5c3RlbVBhcmFtZXRlcnM/OmJvb2xlYW4pOk15c3FsUXVlcnlGaWVsZE9iamVjdHtcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZmllbGRzKSlcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIGNvbnN0IG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3Q9e307XG4gICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgaWYoIWkubmFtZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBpLnZhbHVlIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgb2JqW2kubmFtZV09aS52YWx1ZTtcbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgaWYoIWlnbm9yZVN5c3RlbVBhcmFtZXRlcnMpe1xuICAgICAgICAgICAgICAgICAgICBvYmpbaS5uYW1lXT17XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTppLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOmkuc3lzdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6aS5pZ25vcmVJbkluc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluVXBkYXRlOmkuaWdub3JlSW5VcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6aS51c2VJblJlcGxhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOmkubmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2VcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09aS52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBzdGF0aWMgb2JqZWN0VG9GaWVsZHMob2JqOk15c3FsUXVlcnlGaWVsZE9iamVjdHxNeXNxbFF1ZXJ5RmllbGRbXSk6TXlzcWxRdWVyeUZpZWxkW117XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkob2JqKSlcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIGNvbnN0IGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXT1bXTtcbiAgICAgICAgZm9yKGxldCBpIGluIG9iail7XG4gICAgICAgICAgICBpZihvYmpbaV0gJiYgdHlwZW9mIG9ialtpXSA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICAgICAgbGV0IG1vID0gb2JqW2ldIGFzIFJlY29yZDxzdHJpbmcsc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkPjtcbiAgICAgICAgICAgICAgICBpZighbW8pe1xuICAgICAgICAgICAgICAgICAgICBtbz17XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOmksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUluUmVwbGFjZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTptby5uYW1lIGFzIHN0cmluZyA/PyBpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTptby52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtOm1vLnN5c3RlbSBhcyBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVJbkluc2VydDptby5pZ25vcmVJbkluc2VydCBhcyBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTptby5pZ25vcmVJblVwZGF0ZSBhcyBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6bW8udXNlSW5SZXBsYWNlIGFzIGJvb2xlYW5cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOmksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOm9ialtpXSBhcyBzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeShxdWVyeTpzdHJpbmcsZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCk6c3RyaW5ne1xuICAgICAgICBcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZmllbGRzKSlcbiAgICAgICAgICAgIGZpZWxkcyA9IE15c3FsU2VydmljZS5vYmplY3RUb0ZpZWxkcyhmaWVsZHMpO1xuXG4gICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgY29uc3QgdmFsID10aGlzLnByZXBhcmVRdWVyeUZpZWxkVmFsdWUoaS52YWx1ZSxpLnN5c3RlbSk7XG4gICAgICAgICAgICBpLl9wYXJzZWRWYWx1ZT12YWw7XG4gICAgICAgICAgICBxdWVyeT1xdWVyeS5yZXBsYWNlQWxsKFwiQFwiK2kubmFtZSx2YWwrXCJcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRtcCA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmKHRtcC5pbmRleE9mKFwic2VsZWN0XCIpPT09MCAmJiB0bXAuaW5kZXhPZihcImxpbWl0XCIpPT09LTEpXG4gICAgICAgICAgICBxdWVyeSs9XCIgTElNSVQgMTAwXCJcbiAgICAgICAgXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBOT0xJTUlUXCIsXCJcIilcblxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAZmllbGRzXCIpIT09LTEpe1xuICAgICAgICAgICAgbGV0IGluc2VydEZpZWxkTmFtZXM9W11cbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZFZhbHVlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICAgICAgaWYoaS5pZ25vcmVJbkluc2VydClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBpbnNlcnRGaWVsZE5hbWVzLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgJylcbiAgICAgICAgICAgICAgICBpbnNlcnRGaWVsZFZhbHVlcy5wdXNoKGkuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBxdWVyeT1xdWVyeVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCdAZmllbGRzJyxpbnNlcnRGaWVsZE5hbWVzLmpvaW4oXCIsXCIpKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCdAdmFsdWVzJyxpbnNlcnRGaWVsZFZhbHVlcy5qb2luKFwiLFwiKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAaW5zZXJ0XCIpIT09LTEpe1xuICAgICAgICAgICAgbGV0IG9uaW5zZXJ0TmFtZXM9W11cbiAgICAgICAgICAgIGxldCBvbmluc2VydFZhbHVlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICAgICAgaWYoaS5pZ25vcmVJbkluc2VydClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25pbnNlcnROYW1lcy5wdXNoKGkubmFtZSlcbiAgICAgICAgICAgICAgICBvbmluc2VydFZhbHVlcy5wdXNoKGkuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQGluc2VydFwiLGAoJHtvbmluc2VydE5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICgke29uaW5zZXJ0VmFsdWVzLmpvaW4oXCIsXCIpfSlgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYocXVlcnkuaW5kZXhPZihcIkBvbnVwZGF0ZVwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvblVwZGF0ZT1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICAgICAgaWYoaS5pZ25vcmVJblVwZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25VcGRhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9udXBkYXRlXCIsb25VcGRhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoJ0BvbmR1cGxpY2F0ZScpIT09LTEpe1xuICAgICAgICAgICAgbGV0IG9uRHVwbGljYXRlPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICAgICAgaWYoIWkudXNlSW5SZXBsYWNlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBvbkR1cGxpY2F0ZS5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCA9ICcraS5fcGFyc2VkVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJAb25kdXBsaWNhdGVcIixvbkR1cGxpY2F0ZS5qb2luKFwiICwgXCIpKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgcmV0dXJuICBxdWVyeTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJlcGFyZVF1ZXJ5RmllbGRWYWx1ZSh2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsc3lzdGVtPzpib29sZWFuKTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWR7XG4gICAgICAgIGlmKCFzeXN0ZW0gJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWU/dmFsdWUucmVwbGFjZUFsbCgnXCInLCdcXFxcXCInKTpudWxsXG4gICAgICAgICAgICBpZih2YWx1ZSE9PW51bGwpXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAnXCInK3ZhbHVlKydcIidcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiTlVMTFwiXG4gICAgICAgIH1cbiAgICAgICAgaWYodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBcIk5VTExcIlxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG5cbiAgICBhc3luYyBleGVjdXRlKHF1ZXJ5OnN0cmluZyxyb2xsYmFja1F1ZXJ5OnN0cmluZ3xudWxsLHRyYW5zYWN0aW9uSUQ6bnVtYmVyKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGxldCBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9ufG51bGw9bnVsbFxuICAgICAgICAgICAgICAgIGlmKHRyYW5zYWN0aW9uSUQgJiYgdHJhbnNhY3Rpb25JRD4wKXtcbiAgICAgICAgICAgICAgICAgICAgY29ubiA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRyYW5zYWN0aW9uSUQpPy5jb25uID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcnkgb24gdHJhbnNhY3Rpb246IFwiLGNvbm4pXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4pXG5cbiAgICAgICAgICAgICAgICAvLyBpZiBjb25uZWN0aW9uIG5vdCBjcmVhdGVkXG4gICAgICAgICAgICAgICAgaWYoIWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsYE5vIGNvbm5lY3Rpb24gY3JlYXRlZCFgKVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiTXlzcWwgcG9vbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHF1ZXJ5XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoaS5jb25uPT09Y29ubil7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRRdWVyeShjb25uLHF1ZXJ5LHJlc29sdmUscm9sbGJhY2tRdWVyeSk7XG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlY3JlYXRlIHBvb2wsIGNvbm5lY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBpZihgJHtlfWAuaW5kZXhPZignRUNPTk5SRUZVU0VEJykhPT0tMSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZVBvb2woKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6KGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgXCJtZXNzYWdlXCIgaW4gZSBhcyBhbnkpPyhlIGFzIGFueSkubWVzc2FnZTpcIk15c3FsIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZFF1ZXJ5KGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb24scXVlcnk6c3RyaW5nLHJlc29sdmU6KGRhdGE6TXlzcWxSZXN1bHQpPT52b2lkLHJvbGxiYWNrOnN0cmluZ3xudWxsKXtcbiAgICAgICAgXG4gICAgICAgIGxldCBlcnJDYXRjaGVkPWZhbHNlO1xuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuICAgICAgICAgICAgZXJyQ2F0Y2hlZD10cnVlO1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuICAgICBcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAzLFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIkNPTk5fRVJSXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJFcnJvcjogXCIrZXJyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcjpyb2xsYmFja0Vycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgICAgIC8vIGRldGVybWluZSBkdXBsaWNhdGUgZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IGR1cCA9IGAke3F1ZXJ5UmVzdWx0LmVycn1gLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xO1xuXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjpxdWVyeVJlc3VsdC5lcnIsXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZUVycm9yOmR1cFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY2xvc2UgY29ubiBvbiBzdWNjZXNzXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgfWNhdGNoKGUpe31cblxuICAgICAgICAvLyBoYW5kbGUgc3VjY2Vzc1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGVycm9yOnF1ZXJ5UmVzdWx0LmVycixcbiAgICAgICAgICAgIGRhdGE6cXVlcnlSZXN1bHQucmVzdWx0cyxcbiAgICAgICAgfSlcblxuICAgIH1cblxuXG4gICAgLy8gQXN5bmMgcXVlcnkgd3JhcHBlciB0byBjb25uLnF1ZXJ5XG4gICAgYXN5bmMgcXVlcnlBc3luYyhjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyk6UHJvbWlzZTx7ZXJyOk15c3FsRXJyb3J8bnVsbCxyZXN1bHRzPzphbnl9PntcblxuICAgICAgICBsZXQgcmVzdWx0PW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICByZXR1cm4ge2Vycjp0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyOm51bGwsXG4gICAgICAgICAgICByZXN1bHRzOnJlc3VsdFswXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU15c3FsUXVlcnlFcnJvcihlcnI6YW55KTpNeXNxbEVycm9ye1xuICAgICAgICBpZihlcnIgJiYgIHR5cGVvZiBlcnI9PT1cIm9iamVjdFwiICYmIFwiY29kZVwiIGluIGVyciAmJiBcImVycm5vXCIgaW4gZXJyICYmIFwic3FsXCIgaW4gZXJyICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnIpe1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOiBlcnIuZXJybm8sXG4gICAgICAgICAgICAgICAgICAgIHNxbDogZXJyLnNxbCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTplcnIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTplcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAyLFxuICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNxbDogXCJubyBxdWVyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6XCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiKyhlcnIpP2VycjpcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuY29uc3Qgc2VjcmV0X2tleT1cIkFLTFdrYWp3JV4mZGd3cWh3Izk4NDUzaTIzYmZrMjNybjJrbmtuZ2xyZ2plaXRcIlxuY29uc3Qgc2VjcmV0X2l2PVwicnRoYWRyZmsyM3JuMmtuIypGTktBQGd0NDRkZjN0c2xyZ2ojIyFpdFwiXG5cbi8vIEdlbmVyYXRlIHNlY3JldCBoYXNoIHdpdGggY3J5cHRvIHRvIHVzZSBmb3IgZW5jcnlwdGlvblxuY29uc3Qga2V5ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9rZXkpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDMyKVxuY29uc3QgaXYgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2l2KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAxNilcblxuY29uc3QgZGVjcnlwdCA9KGVuY3J5cHRlZDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KTtcbiAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkLCAnYmluYXJ5JywgJ3V0ZjgnKTtcbiAgICAgIGRlY3J5cHRlZCArPSBkZWNpcGhlci5maW5hbCgndXRmOCcpO1xuICAgICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY29uc3QgZW5jcnlwdCA9ICh0eHQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBsZXQgZW5jaXBoZXIgPSBjcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KSxcbiAgICAgIGVuY3J5cHRlZCA9IGVuY2lwaGVyLnVwZGF0ZSh0eHQsICd1dGY4JywgJ2JpbmFyeScpO1xuICAgICAgZW5jcnlwdGVkICs9IGVuY2lwaGVyLmZpbmFsKCdiaW5hcnknKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE15c3FsU2VydmljZTsiXX0=
|
727
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBNEV2SSxNQUFhLFlBQWEsU0FBUSx5QkFBVztJQUV6QyxtQkFBbUIsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksR0FBQyxLQUFLLENBQUM7SUFDbkIsSUFBSSxHQUFpQixJQUFJLENBQUM7SUFDMUIsT0FBTyxDQUFxQjtJQUM1Qixj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UG9vbCwgUG9vbENvbm5lY3Rpb24gfSBmcm9tIFwibXlzcWxcIlxuXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gXCIuL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgY3JlYXRlQ2lwaGVyaXYsIGNyZWF0ZURlY2lwaGVyaXYsIGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSBcIi4vTG9nU2VydmljZVwiO1xuaW1wb3J0ICogYXMgbXlzcWwgZnJvbSBcIm15c3FsMi9wcm9taXNlXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgU19NWVNRTF9TVEFSVEVEPW5ldyBTaWduYWw8dm9pZD4oKVxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9RVUVSWSA9IG5ldyBSZXE8TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHRbXT4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1FVRVJZXCIpO1xuLy9leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RSQU5TQUNUSU9OID0gbmV3IFJlcTxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTlwiKTtcblxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQkVHSU4gPSBuZXcgUmVxPHZvaWQsTXlzcWxFcnJvcnxudW1iZXI+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9CRUdJTkdcIik7IC8vIHJldHVybiB0cmFuc2FjdGlvbiBpZCBvciBteXNxbCBlcnJvclxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUVVFUlk9bmV3IFJlcTx7cXVlcnk6TXlTcWxRdWVyeSx0aWQ6bnVtYmVyfSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0FERF9PUEVSQVRJT05cIik7IC8vIHRpZCBtZWFucyB0cmFuc2FjdGlvbiBpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQ09NTUlUPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RDT01NSVRcIik7IC8vIHRpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUk9MTEJBQ0s9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJPTExCQUNLXCIpOyAvLyB0aWRcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVRdWVyeSA9IGFzeW5jIChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPj0+e3JldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSl9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxTZXJ2aWNlT3B0aW9uc3tcbiAgICBjb25uZWN0aW9uTGltaXQ6bnVtYmVyLFxuICAgIGhvc3Q6c3RyaW5nLFxuICAgIHVzZXI6c3RyaW5nLFxuICAgIHBhc3N3b3JkOnN0cmluZyxcbiAgICBwb3J0Om51bWJlcixcbiAgICBkYXRhYmFzZTpzdHJpbmcsICBcbiAgICBxdWV1ZUxpbWl0PzpudW1iZXIsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0PzoodHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyk9PnZvaWQsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPzpzdHJpbmcsXG4gICAgZGVidWc/OmJvb2xlYW4sXG4gICAgbmF4VHJhbnNhY3Rpb25XYWl0VGltZT86bnVtYmVyLFxuXHRtaWdyYXRpb25zPzp7XG5cdFx0ZGlyOnN0cmluZyxcblx0XHRjYWxsYmFjazooKT0+dm9pZFxuXHR9fG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbEVycm9ye1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICBlcnJubzogbnVtYmVyLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIG5hbWU6c3RyaW5nLFxuICAgIG1lc3NhZ2U6c3RyaW5nXG4gICAgZmF0YWw/OmJvb2xlYW4sXG4gICAgdGhyb3dhYmxlOmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbiAgICB0aHJvd2FibGU/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cblxuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtOmZzLldyaXRlU3RyZWFtfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU6c3RyaW5nfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU6bnVtYmVyPTA7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOk15c3FsU2VydmljZU9wdGlvbnMpe1xuICAgICAgICBzdXBlcihcIm15c3FsXCIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBcblxuICAgICAgICAvLyBkZWNyeXB0IHdoZW4gbmVlZGVkXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5ob3N0LnN0YXJ0c1dpdGgoXCJfXCIpKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhvc3QgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5ob3N0LnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnVzZXIuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXNlciA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnVzZXIuc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMudXNlclxuICAgICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YWJhc2Uuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0YWJhc2UgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICBpZih0aGlzLm9wdGlvbnMucGFzc3dvcmQuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFzc3dvcmQgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB0cnVlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5uYXhUcmFuc2FjdGlvbldhaXRUaW1lKVxuICAgICAgICAgICAgdGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gdGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWU7XG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIC8vIGNoZWNrIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElEczpudW1iZXJbXT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYobm93LWkudGltZXN0YW1wPnRoaXMubWF4VHJhbnNhY3Rpb25XYWl0VGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiUmVsZWFzZSB0cmFuc2FjdGlvbiBjb25uZWN0aW9uIGR1ZSB0byB0aW1lb3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkSURzLnB1c2goaS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PiFyZW1vdmVkSURzLmluY2x1ZGVzKGkuaWQpKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3ZlZDogXCIsY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoKVxuXG4gICAgICAgICAgICBcblxuICAgICAgICB9LDEwMDAqMzApXG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFmdGVyIDE1IG1pbiBvZiBpbmFjdGl2aXR5LCBjbG9zZSBmaWxlXG4gICAgICAgICAgICBpZihEYXRlLm5vdygpLXRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lPjEwMDAqNjAqMTUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sMTAwMCo2MCo1KVxuXG4gICAgICAgIGlmKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcikpe1xuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj11bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY3JlYXRlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGRpclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGV4ZWN1dGVRdWVyeSAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT57IHJldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSkgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcHJvY2VzcyBleGl0IGhhbmRsZXJzIGludGVycnVwdCAoY3RybCtjKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgLy8gdGVybWluYXRlIChraWxsKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdURVJNJyxhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgICAgICBsZXQgcG9vbENyZWF0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcG9vbENyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgaWYoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMISBSZXRyeWluZyBpbiAzIHNlY29uZHMuLi5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwzMDAwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9RVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhID0+e1xuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgICAgICAgICAgZGF0YT1bZGF0YV07XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGRhdGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShpLnF1ZXJ5LGkuZmllbGRzKTtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZShxdWVyeSxpLnJvbGxiYWNrUXVlcnkgPz8gbnVsbCxpLnRyYW5zYWN0aW9uSUQgPz8gMCxpLnRocm93YWJsZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyaWVzOiBcIixkYXRhLmxlbmd0aClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiByZXN1bHQpe1xuICAgICAgICAgICAgICAgIGlmKGkuZXJyb3IgJiYgKGkuZXJyb3IuZmF0YWwgfHwgaS5lcnJvci50aHJvd2FibGUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQkVHSU4ubGlzdGVuZXI9YXN5bmMgKCk9PnsgIFxuICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMucG9vbD8uZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgaWYoIWNvbm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiTk9fUE9PTFwiLGVycm5vOjEwMDAwMCxmYXRhbDp0cnVlLHNxbDpcIlwiLG5hbWU6XCJOT19QT09MXCIsbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIix0aHJvd2FibGU6ZmFsc2V9XG5cbiAgICAgICAgICAgIC8vIGZpbmQgY29ubiBpbiB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYoaS5jb25uPT09Y29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiQ09OTl9JTl9UUlhcIixlcnJubzoxMDAwMDUsZmF0YWw6dHJ1ZSx0aHJvd2FibGU6ZmFsc2Usc3FsOlwiXCIsbmFtZTpcIkNPTk5fSU5fVFJYXCIsbWVzc2FnZTpcIkNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIn1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpZCA9IE15c3FsU2VydmljZS5uZXh0VHJhbnNhY3Rpb25JRCsrO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZ2luIHRyYW5zYWN0aW9uIHdpdGggaWQgXCIsdGlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgY29ubi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubi5xdWVyeShcIlNUQVJUIFRSQU5TQUNUSU9OXCIpO1xuICAgICAgICAgICAgICAgIC8vY29uc3QgcmVzID0gYXdhaXQgY29ubi5xdWVyeShcIlNFVCBhdXRvY29tbWl0PTBcIik7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBzdGFydGVkXCIpXG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih7aWQ6dGlkLGNvbm46Y29ubix0aW1lc3RhbXA6RGF0ZS5ub3coKSxxdWVyaWVzOlt7c3FsOlwiU1RBUlQgVFJBTlNBQ1RJT05cIixzdGF0dXM6XCJlcnJvclwifV19KVxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDp0aWQsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOkRhdGUubm93KCksXG4gICAgICAgICAgICAgICAgY29ubjpjb25uLFxuICAgICAgICAgICAgICAgIHF1ZXJpZXM6W11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbnMgcG9vbDogXCIsdGhpcy50cmFuc2FjdGlvbnMpXG5cbiAgICAgICAgICAgIHJldHVybiB0aWQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFJFUV9NWVNRTF9UUVVFUlkubGlzdGVuZXI9YXN5bmMgZGF0YT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09ZGF0YS50aWQpO1xuICAgICAgICAgICAgaWYoIXRyeClcbiAgICAgICAgICAgICAgICByZXR1cm4ge2Vycjoge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgIH0sZGF0YTpudWxsLHJvbGxiYWNrRXJyb3I6bnVsbH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4KVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBleGVjdXRpb24gc3RhdHVzOlwiLGVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwiKVxuXG4gICAgICAgICAgICB0cngucXVlcmllcy5wdXNoKHtzcWw6cXVlcnksc3RhdHVzOmVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwifSlcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOnNxbERhdGE/c3FsRGF0YVswXTpudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOmVycixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQ09NTUlULmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWl0IHRyYW5zYWN0aW9uOlwiLHRyeClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dGlkKTtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHBvb2w6XCIsdGhpcy50cmFuc2FjdGlvbnMgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0aGlzLmNvbW1pdCh0cngpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tbWl0KHRyeDpJVHJhbnNhY3Rpb24pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICBcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiQ09NTUlUXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbih0cng6SVRyYW5zYWN0aW9uLGRvbk5vdFJlbW92ZT86Ym9vbGVhbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgc3RhcnRlZFwiLHRyeC5jb25uKVxuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4ucm9sbGJhY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIlJPTExCQUNLXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBpZighZG9uTm90UmVtb3ZlKVxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10cnguaWQpO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIGNvbXBsZXRlXCIsdHJ4LmNvbm4pXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJvbGxiYWNrIHRyYW5zYWN0aW9uXCIsdHJ4KVxuICAgICAgICAgICAgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeCxcInJvbGxiYWNrXCIpXG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgYXN5bmMgZmluaXNoQXBwKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRmluaXNoaW5nIG15c3FsIHNlcnZpY2VcIilcbiAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKVxuICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGkpO1xuXG4gICAgICAgIGlmKHRoaXMucG9vbCl7XG4gICAgICAgICAgICB0cnl7YXdhaXQgdGhpcy5wb29sLmVuZCgpO31jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjbG9zZSBNWVNRTCBwb29sIVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeCxtZXNzYWdlKVxuXG4gICAgICAgICAgICBpZighdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0ud3JpdGUoSlNPTi5zdHJpbmdpZnkoe3F1ZXJpZXM6dHJ4LnF1ZXJpZXMsdGltZTp0cngudGltZXN0YW1wLGRhdGUsbWVzc2FnZX0pK1wiXFxufUVPQntcXG5cIixlcnI9PntcbiAgICAgICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHdyaXRlIHRvIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGZpbGVcIilcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIlRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IHN0b3JlZFwiKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0KHRyeCxtZXNzYWdlKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHJlY3JlYXRlUG9vbCgpOlByb21pc2U8Ym9vbGVhbj57XG5cbiAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ29ubmVjdGluZyB0byBteXNxbDogXFxuIEhPU1Q6IFwiK3RoaXMub3B0aW9ucy5ob3N0KydcXG4gUE9SVDonK3RoaXMub3B0aW9ucy5wb3J0KVxuXG4gICAgICAgIGlmKHRoaXMucG9vbCl7XG4gICAgICAgICAgICB0aGlzLnBvb2wucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnl7YXdhaXQgdGhpcy5wb29sLmVuZCgpO31jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjbG9zZSBNWVNRTCBwb29sIVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb29sID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICBlbmFibGVLZWVwQWxpdmU6IHRydWUsXG4gICAgICAgIC8vIFdlIHNob3VsZCBzdGFydCBzZW5kaW5nIHRoZW0gZWFybHlcbiAgICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5OiAzICogMTAwMCwgLy8gMyBzZWNvbmRzXG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgaWRsZSBjb25uZWN0aW9ucywgYnV0IGl0J3Mgbm90IG1hbmRhdG9yeSBmb3IgdGhlIGZpeCB0byB3b3JrLCBpdCBzZWVtc1xuICAgICAgICBtYXhJZGxlOiAwLFxuICAgICAgICAvLyBJZGxlIHRpbWVvdXQgbXVjaCBsYXJnZXIgdGhhbiBrZWVwIGFsaXZlIGRlbGF5IGFuZCBtdWNoIHNtYWxsZXIgdGhhbiBNeVNRTCdzIHRpbWVvdXQgc2V0dGluZ1xuICAgICAgICBpZGxlVGltZW91dDogNSAqIDYwICogMTAwMCAvLyA1IG1pbnV0ZXNcbiAgICAgICAgKi9cblxuICAgICAgICB0cnl7XG4gICAgICAgICAgICB0aGlzLnBvb2wgPW15c3FsLmNyZWF0ZVBvb2woe1xuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0XG4gICAgICAgICAgICAgICAgLHVzZXI6IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgICAgICAgICAgLHBhc3N3b3JkOiB0aGlzLm9wdGlvbnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAsZGF0YWJhc2U6IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICAgICAgICAgICxwb3J0OiB0aGlzLm9wdGlvbnMucG9ydFxuICAgICAgICAgICAgICAgICxjb25uZWN0aW9uTGltaXQ6IHRoaXMub3B0aW9ucy5jb25uZWN0aW9uTGltaXRcbiAgICAgICAgICAgICAgICAscXVldWVMaW1pdDogMTBcbiAgICAgICAgICAgICAgICAsbXVsdGlwbGVTdGF0ZW1lbnRzOiB0cnVlXG5cbiAgICAgICAgICAgICAgICAsZW5hYmxlS2VlcEFsaXZlOnRydWVcbiAgICAgICAgICAgICAgICAsa2VlcEFsaXZlSW5pdGlhbERlbGF5OjMqMTAwMFxuICAgICAgICAgICAgICAgICxtYXhJZGxlOjBcbiAgICAgICAgICAgICAgICAsaWRsZVRpbWVvdXQ6MTAwMCo2MCo2MFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU/OmJvb2xlYW4pOlByb21pc2U8TXlzcWxSZXN1bHQ+e1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmU6KGRhdGE6TXlzcWxSZXN1bHQpPT52b2lkLHJlamVjdCk9PntcbiAgICAgICAgICAgIC8vIENoZWNrIHBvb2xcbiAgICAgICAgICAgIGlmKCF0aGlzLnBvb2wpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJObyBwb29sXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19QT09MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiTXlzcWwgcG9vbCBub3QgY3JlYXRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubilcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgY29ubiA9IGF3YWl0IHRoaXMucG9vbC5nZXRDb25uZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJ5XCIsY29ubilcblxuICAgICAgICAgICAgICAgIC8vIGlmIGNvbm5lY3Rpb24gbm90IGNyZWF0ZWRcbiAgICAgICAgICAgICAgICBpZighY29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixgTm8gY29ubmVjdGlvbiBjcmVhdGVkIWApXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJNeXNxbCBwb29sIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgcXVlcnlcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgICAgICBpZihpLmNvbm49PT1jb25uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFF1ZXJ5KGNvbm4scXVlcnkscmVzb2x2ZSxyb2xsYmFja1F1ZXJ5LHRocm93YWJsZT90cnVlOmZhbHNlKTtcblxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gcmVjcmVhdGUgcG9vbCwgY29ubmVjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGlmKGAke2V9YC5pbmRleE9mKCdFQ09OTlJFRlVTRUQnKSE9PS0xKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTooZSAmJiB0eXBlb2YgZSA9PT0gXCJvYmplY3RcIiAmJiBcIm1lc3NhZ2VcIiBpbiBlIGFzIGFueSk/KGUgYXMgYW55KS5tZXNzYWdlOlwiTXlzcWwgY2FudCBnZXQgY29ubmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzZW5kUXVlcnkoY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixxdWVyeTpzdHJpbmcscmVzb2x2ZTooZGF0YTpNeXNxbFJlc3VsdCk9PnZvaWQscm9sbGJhY2s6c3RyaW5nfG51bGwsdGhyb3dhYmxlOmJvb2xlYW4pe1xuICAgICAgICBcbiAgICAgICAgbGV0IGVyckNhdGNoZWQ9ZmFsc2U7XG5cbiAgICAgICAgY29ubi5vbihcImVycm9yXCIsYXN5bmMgZXJyPT57XG4gICAgICAgICAgICBlcnJDYXRjaGVkPXRydWU7XG5cbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yID0gbnVsbDtcbiAgICAgICAgICAgIGlmKHJvbGxiYWNrKVxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I9KGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHJvbGxiYWNrKSkuZXJyXG4gICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+Y29ubi5vbignZXJyb3InKVwiLGVycilcblxuICAgICAgICAgICAgLy8gY2xvc2UgY29ubiBvbiBzdWNjZXNzXG4gICAgICAgICAgICB0cnl7XG5cbiAgICAgICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgIGNvbm4uZGVzdHJveSgpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuICAgICBcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAzLFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIkNPTk5fRVJSXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJFcnJvcjogXCIrZXJyLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcjpyb2xsYmFja0Vycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgICAgIC8vIGRldGVybWluZSBkdXBsaWNhdGUgZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IGR1cCA9IGAke3F1ZXJ5UmVzdWx0LmVycn1gLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xO1xuXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXBcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgLy8gaGFuZGxlIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnlSZXN1bHQuZXJyP3suLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX06bnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICBkYXRhOnF1ZXJ5UmVzdWx0LnJlc3VsdHMsXG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvLyBBc3luYyBxdWVyeSB3cmFwcGVyIHRvIGNvbm4ucXVlcnlcbiAgICBhc3luYyBxdWVyeUFzeW5jKGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb24scXVlcnk6c3RyaW5nKTpQcm9taXNlPHtlcnI6TXlzcWxFcnJvcnxudWxsLHJlc3VsdHM/OmFueX0+e1xuXG4gICAgICAgIGxldCByZXN1bHQ9bnVsbDtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY29ubi5xdWVyeShxdWVyeSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIHJldHVybiB7ZXJyOnRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnI6bnVsbCxcbiAgICAgICAgICAgIHJlc3VsdHM6cmVzdWx0WzBdLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlTXlzcWxRdWVyeUVycm9yKGVycjphbnksdGhyb3dhYmxlPzpib29sZWFuKTpNeXNxbEVycm9ye1xuICAgICAgICBpZihlcnIgJiYgIHR5cGVvZiBlcnI9PT1cIm9iamVjdFwiICYmIFwiY29kZVwiIGluIGVyciAmJiBcImVycm5vXCIgaW4gZXJyICYmIFwic3FsXCIgaW4gZXJyICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnIpe1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOiBlcnIuZXJybm8sXG4gICAgICAgICAgICAgICAgICAgIHNxbDogZXJyLnNxbCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTplcnIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTplcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcIlFVRVJZX0VSUlwiLFxuICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDIsXG4gICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgc3FsOiBcIm5vIHF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgbmFtZTpcIlFVRVJZX0VSUlwiLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJFcnJvcjogXCIrKGVycik/ZXJyOlwiXCIsXG4gICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuY29uc3Qgc2VjcmV0X2tleT1cIkFLTFdrYWp3JV4mZGd3cWh3Izk4NDUzaTIzYmZrMjNybjJrbmtuZ2xyZ2plaXRcIlxuY29uc3Qgc2VjcmV0X2l2PVwicnRoYWRyZmsyM3JuMmtuIypGTktBQGd0NDRkZjN0c2xyZ2ojIyFpdFwiXG5cbi8vIEdlbmVyYXRlIHNlY3JldCBoYXNoIHdpdGggY3J5cHRvIHRvIHVzZSBmb3IgZW5jcnlwdGlvblxuY29uc3Qga2V5ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9rZXkpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDMyKVxuY29uc3QgaXYgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2l2KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAxNilcblxuY29uc3QgZGVjcnlwdCA9KGVuY3J5cHRlZDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KTtcbiAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkLCAnYmluYXJ5JywgJ3V0ZjgnKTtcbiAgICAgIGRlY3J5cHRlZCArPSBkZWNpcGhlci5maW5hbCgndXRmOCcpO1xuICAgICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY29uc3QgZW5jcnlwdCA9ICh0eHQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBsZXQgZW5jaXBoZXIgPSBjcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KSxcbiAgICAgIGVuY3J5cHRlZCA9IGVuY2lwaGVyLnVwZGF0ZSh0eHQsICd1dGY4JywgJ2JpbmFyeScpO1xuICAgICAgZW5jcnlwdGVkICs9IGVuY2lwaGVyLmZpbmFsKCdiaW5hcnknKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE15c3FsU2VydmljZTsiXX0=
|