oxygen-cli 1.20.2 → 1.21.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/build/core/OxygenCore.js +4 -3
- package/build/errors/OxygenError.js +9 -5
- package/build/errors/helper.js +10 -5
- package/build/lib/util.js +5 -2
- package/build/ox_modules/module-db.js +2 -2
- package/build/ox_modules/module-email.js +97 -49
- package/build/ox_modules/module-eyes.js +4 -21
- package/build/ox_modules/module-http.js +148 -62
- package/build/ox_modules/module-mailinator.js +25 -32
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +4 -11
- package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
- package/build/ox_modules/module-mob.js +65 -52
- package/build/ox_modules/module-pdf.js +12 -32
- package/build/ox_modules/module-proxy.js +9 -9
- package/build/ox_modules/module-serial.js +14 -12
- package/build/ox_modules/module-soap.js +113 -77
- package/build/ox_modules/module-twilio.js +27 -27
- package/build/ox_modules/module-utils.js +43 -5
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +24 -0
- package/build/ox_modules/module-web/commands/index.js +25 -1
- package/build/ox_modules/module-web/commands/isSelected.js +2 -2
- package/build/ox_modules/module-web/commands/maximizeWindow.js +24 -0
- package/build/ox_modules/module-web/commands/minimizeWindow.js +24 -0
- package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
- package/build/ox_modules/module-web.js +87 -64
- package/build/ox_modules/utils.js +40 -4
- package/build/ox_services/service-devtools/submodule-network.js +8 -8
- package/build/ox_services/service-devtools.js +3 -3
- package/build/runners/WorkerProcess.js +22 -20
- package/package.json +8 -5
|
@@ -266,10 +266,22 @@ module.exports = {
|
|
|
266
266
|
this._prevImplicitTimeout = timeouts.implicit;
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
+
if (timeouts && timeouts.pageLoad) {
|
|
270
|
+
this._prevPageLoadTimeout = timeouts.pageLoad;
|
|
271
|
+
}
|
|
272
|
+
|
|
269
273
|
if (this.driver.setTimeout) {
|
|
270
|
-
|
|
271
|
-
'
|
|
272
|
-
|
|
274
|
+
if (this.driver.capabilities && this.driver.capabilities.browserName) {
|
|
275
|
+
// browserName 'default' on android
|
|
276
|
+
await this.driver.setTimeout({
|
|
277
|
+
'implicit': timeout,
|
|
278
|
+
'pageLoad': timeout
|
|
279
|
+
});
|
|
280
|
+
} else {
|
|
281
|
+
await this.driver.setTimeout({
|
|
282
|
+
'implicit': timeout
|
|
283
|
+
});
|
|
284
|
+
}
|
|
273
285
|
}
|
|
274
286
|
},
|
|
275
287
|
restoreTimeoutImplicit: async function () {
|
|
@@ -278,6 +290,12 @@ module.exports = {
|
|
|
278
290
|
'implicit': this._prevImplicitTimeout
|
|
279
291
|
});
|
|
280
292
|
}
|
|
293
|
+
|
|
294
|
+
if (this._prevPageLoadTimeout && this.driver.setTimeout) {
|
|
295
|
+
await this.driver.setTimeout({
|
|
296
|
+
'pageLoad': this._prevPageLoadTimeout
|
|
297
|
+
});
|
|
298
|
+
}
|
|
281
299
|
},
|
|
282
300
|
assertArgument: function (arg, name) {
|
|
283
301
|
if (arg === undefined || arg === null) {
|
|
@@ -376,6 +394,24 @@ module.exports = {
|
|
|
376
394
|
}
|
|
377
395
|
|
|
378
396
|
return null;
|
|
397
|
+
},
|
|
398
|
+
hasCircularDependency: function (obj) {
|
|
399
|
+
try {
|
|
400
|
+
JSON.stringify(obj);
|
|
401
|
+
} catch (e) {
|
|
402
|
+
if (String(e).includes('Converting circular structure to JSON')) {
|
|
403
|
+
return String(e);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return false;
|
|
408
|
+
},
|
|
409
|
+
assertCircular: function (obj) {
|
|
410
|
+
const hasCircularDependency = this.hasCircularDependency(obj);
|
|
411
|
+
|
|
412
|
+
if (hasCircularDependency) {
|
|
413
|
+
throw new _OxygenError.default(errHelper.errorCode.CIRCULAR_ERROR, hasCircularDependency);
|
|
414
|
+
}
|
|
379
415
|
}
|
|
380
416
|
};
|
|
381
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJwcm92aWRlcnMiLCJQRVJGRUNUTyIsIkJST1dTRVJTVEFDSyIsIlNBVUNFTEFCUyIsIkxBTUJEQVRFU1QiLCJURVNUSU5HQk9UIiwiY29udGV4dExpc3QiLCJhbmRyb2lkIiwiaW9zIiwiaHlicmlkIiwid2ViIiwiaXNFbGVtZW50Tm90Rm91bmQiLCJlbCIsInJlc3VsdCIsImVycm9yIiwibWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJtb2R1bGUiLCJleHBvcnRzIiwibWF0Y2hQYXR0ZXJuIiwidmFsIiwicGF0dGVybiIsImdsb2JUb1JlZ2V4IiwidG9TdHJpbmciLCJyZXBsYWNlIiwicmVnZXgiLCJpbmRleE9mIiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwidGVzdCIsImZsYWdzIiwiZ2V0RWxlbWVudCIsImxvY2F0b3IiLCJ3YWl0Rm9yVmlzaWJsZSIsInRpbWVvdXQiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJjYWxsIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaGVscGVycyIsImdldFdkaW9Mb2NhdG9yIiwiZHJpdmVyIiwiJCIsImVsZW1lbnROb3RGb3VuZCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJ3YWl0Rm9yRGlzcGxheWVkIiwid2FpdEZvclRpbWVvdXQiLCJlIiwiaW5jbHVkZXMiLCJFTEVNRU5UX05PVF9WSVNJQkxFIiwiZ2V0RWxlbWVudHMiLCJlbHMiLCIkJCIsImVsZW1lbnRzTm90Rm91bmQiLCJnZXRDaGlsZEVsZW1lbnQiLCJwYXJlbnRFbGVtZW50IiwiU0NSSVBUX0VSUk9SIiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNlbGVuaXVtVGltZW91dCIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJ0aW1lb3V0cyIsImNhcGFiaWxpdGllcyIsImJyb3dzZXJOYW1lIiwiZ2V0VGltZW91dHMiLCJzdG9wVXJsIiwiY29uc29sZSIsImxvZyIsImltcGxpY2l0IiwiX3ByZXZJbXBsaWNpdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYXNzZXJ0QXJndW1lbnQiLCJhcmciLCJ1bmRlZmluZWQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJhbG93ZWRDb250ZXh0cyIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiaXNXZWIiLCJzdWJzdHIiLCJnZXRMb2dUeXBlcyIsInByb3ZpZGVyIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJ3ZGlvT3B0cyIsImhvc3RuYW1lIl0sIm1hcHBpbmdzIjoiOzs7O0FBVUE7Ozs7QUFWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBekI7O0FBR0EsTUFBTUMsU0FBUyxHQUFHO0FBQ2RDLEVBQUFBLFFBQVEsRUFBRSxVQURJO0FBRWRDLEVBQUFBLFlBQVksRUFBRSxjQUZBO0FBR2RDLEVBQUFBLFNBQVMsRUFBRSxPQUhHO0FBSWRDLEVBQUFBLFVBQVUsRUFBRSxRQUpFO0FBS2RDLEVBQUFBLFVBQVUsRUFBRTtBQUxFLENBQWxCO0FBUUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxPQUFPLEVBQUUsU0FETztBQUVoQkMsRUFBQUEsR0FBRyxFQUFFLEtBRlc7QUFHaEJDLEVBQUFBLE1BQU0sRUFBRSxRQUhRO0FBSWhCQyxFQUFBQSxHQUFHLEVBQUU7QUFKVyxDQUFwQjs7QUFPQSxNQUFNQyxpQkFBaUIsR0FBSUMsRUFB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SCxLQUZNLE1BRUEsSUFBSTJGLFFBQVEsQ0FBQzVCLFlBQVQsQ0FBc0IsZUFBdEIsQ0FBSixFQUE0QztBQUMvQyxhQUFPakUsU0FBUyxDQUFDRyxTQUFqQjtBQUNILEtBRk0sTUFFQSxJQUFJMEYsUUFBUSxDQUFDQyxRQUFULENBQWtCMUMsUUFBbEIsQ0FBMkIsWUFBM0IsQ0FBSixFQUE4QztBQUNqRCxhQUFPcEQsU0FBUyxDQUFDSSxVQUFqQjtBQUNILEtBRk0sTUFFQSxJQUFJeUYsUUFBUSxDQUFDNUIsWUFBVCxDQUFzQixvQkFBdEIsQ0FBSixFQUFpRDtBQUNwRCxhQUFPakUsU0FBUyxDQUFDSyxVQUFqQjtBQUNIOztBQUVELFdBQU8sSUFBUDtBQUNIO0FBN1ZZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5jb25zdCBwcm92aWRlcnMgPSB7XHJcbiAgICBQRVJGRUNUTzogJ3BlcmZlY3RvJyxcclxuICAgIEJST1dTRVJTVEFDSzogJ2Jyb3dzZXJzdGFjaycsXHJcbiAgICBTQVVDRUxBQlM6ICdzYXVjZScsXHJcbiAgICBMQU1CREFURVNUOiAnbGFtYmRhJyxcclxuICAgIFRFU1RJTkdCT1Q6ICd0ZXN0aW5nYm90J1xyXG59O1xyXG5cclxuY29uc3QgY29udGV4dExpc3QgPSB7XHJcbiAgICBhbmRyb2lkOiAnYW5kcm9pZCcsXHJcbiAgICBpb3M6ICdpb3MnLFxyXG4gICAgaHlicmlkOiAnaHlicmlkJyxcclxuICAgIHdlYjogJ3dlYidcclxufTtcclxuXHJcbmNvbnN0IGlzRWxlbWVudE5vdEZvdW5kID0gKGVsKSA9PiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgZWwuZXJyb3IgJiYgKFxyXG4gICAgICAgIGVsLmVycm9yLmVycm9yID09PSAnbm8gc3VjaCBlbGVtZW50JyB8fFxyXG4gICAgICAgIChlbC5lcnJvci5tZXNzYWdlICYmIC8qIHdpbmFwcGRyaXZlciB3aW4ucmlnaHRDbGljayAqLyBlbC5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ25vIHN1Y2ggZWxlbWVudCcpIHx8XHJcbiAgICAgICAgZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdBbiBlbGVtZW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkJykpKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIG1hdGNoUGF0dGVybjogZnVuY3Rpb24odmFsLCBwYXR0ZXJuKSB7XHJcbiAgICAgICAgaWYgKCF2YWwgJiYgIXBhdHRlcm4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2xvYlRvUmVnZXggPSByZXF1aXJlKCdnbG9iLXRvLXJlZ2V4cCcpO1xyXG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG5cclxuICAgICAgICB2YXIgcmVnZXg7XHJcbiAgICAgICAgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXg6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIHVzaW5nIGEgcmVndWxhci1leHByZXNzaW9uXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnN1YnN0cmluZygncmVnZXg6Jy5sZW5ndGgpLCAnZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdyZWdleGk6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhci1leHByZXNzaW9uXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnN1YnN0cmluZygncmVnZXhpOicubGVuZ3RoKSwgJ2lnJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2V4YWN0OicpID09IDAgfHwgcGF0dGVybiA9PT0gJycpIHsgIC8vIG1hdGNoIGEgc3RyaW5nIGV4YWN0bHksIHZlcmJhdGltXHJcbiAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnN1YnN0cmluZygnZXhhY3Q6Jy5sZW5ndGgpID09PSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2dsb2I6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIGFnYWluc3QgYSBjYXNlLWluc2Vuc2l0aXZlIFwiZ2xvYlwiIHBhdHRlcm5cclxuICAgICAgICAgICAgcmVnZXggPSBnbG9iVG9SZWdleChwYXR0ZXJuLnN1YnN0cmluZygnZ2xvYjonLmxlbmd0aCksIHsgZmxhZ3M6ICdpZycgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBzYW1lIGFzIGdsb2IgbWF0Y2hpbmdcclxuICAgICAgICAgICAgcmVnZXggPSBnbG9iVG9SZWdleChwYXR0ZXJuLCB7IGZsYWdzOiAnaWcnIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbDtcclxuICAgICAgICBpZiAobG9jYXRvciAmJiBsb2NhdG9yLmNvbnN0cnVjdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0VsZW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfRk9VTkQsIGBVbmFibGUgdG8gZmluZCBlbGVtZW50OiAke2xvY2F0b3J9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2FpdEZvclZpc2libGUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGVsLndhaXRGb3JEaXNwbGF5ZWQoeyB0aW1lb3V0OnRpbWVvdXQgPyB0aW1lb3V0IDogdGhpcy53YWl0Rm9yVGltZW91dH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChlLm1lc3NhZ2UgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdzdGlsbCBub3QgZGlzcGxheWVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIGBFbGVtZW50IG5vdCB2aXNpYmxlOiAke2xvY2F0b3J9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHRoaXMuZHJpdmVyLiQkKHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudE5vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWwpO1xyXG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgZWxlbWVudDogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2hpbGRFbGVtZW50czogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgdGltZW91dCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKCEocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LiQkKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVscyA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJCQobG9jYXRvcik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kcml2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZW91dHM7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9PT0gJ01pY3Jvc29mdEVkZ2UnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgb24gRWRnZVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xyXG4gICAgICAgICAgICAvLyBjaHJvbWUgPj0gNzVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuc3RvcFVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dHMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaW1lb3V0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmYWlscyBvbiBwZXJmZWN0byBtb2JpbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRUaW1lb3V0cyBlcnJvcicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3MiAmJiBjaHJvbWUgPCA3NVxyXG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ID0gdGltZW91dHMuaW1wbGljaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoeyAnaW1wbGljaXQnOiB0aW1lb3V0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVzdG9yZVRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgJiYgdGhpcy5kcml2ZXIuc2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIGlzIHJlcXVpcmVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnROdW1iZXI6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Qm9vbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9IHR5cGVvZih0cnVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRUaW1lb3V0OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjb250ZXh0TGlzdDogY29udGV4dExpc3QsXHJcblxyXG4gICAgYXNzZXJ0Q29udGV4dDogYXN5bmMgZnVuY3Rpb24oLi4uYWxvd2VkQ29udGV4dHMpIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuICAgICAgICBjb25zdCBpc1dlYiA9IChjb250ZXh0ICYmIChjb250ZXh0LmluZGV4T2YoJ1dFQlZJRVcnKSA+IC0xIHx8IGNvbnRleHQuaW5kZXhPZignQ0hST01JVU0nKSA+IC0xKSk7XHJcblxyXG4gICAgICAgIGlmIChpc1dlYikge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3Qud2ViKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5oeWJyaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5hbmRyb2lkKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5pb3MpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0V2Rpb0xvY2F0b3I6IGZ1bmN0aW9uKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2NhdG9yID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIHhwYXRoIGxvY2F0b3IgYXMgaXNcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIFhQYXRoIGluc3RlYWQgb2YgQ1NTIGZvciBicm93c2VyIHRlc3RzLCBzaW5jZSBJRCBjYW4gY29udGFpbiBpbGxlZ2FsIGNoYXJhY3RlcnNcclxuICAgICAgICAgICAgLy8gYW5kIGVzY2FwaW5nIGRvZXNuJ3Qgd29yayByZWxpYWJseSBvciBpbiBpZGVudGljYWwgbWFubmVyIGluIGFsbCBicm93c2VyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Nzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0YWc9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPCcgKyBsb2NhdG9yLnN1YnN0cigndGFnPScubGVuZ3RoKSArICcgLz4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TG9nVHlwZXM6IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoY29udGV4dCA9PT0gJ05BVElWRV9BUFAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2xvZ2NhdCcsICdidWdyZXBvcnQnLCAnc2VydmVyJ107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnYnJvd3NlcicsICdkcml2ZXInXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHByb3ZpZGVyOiBwcm92aWRlcnMsXHJcblxyXG4gICAgZGV0ZXJtaW5lUHJvdmlkZXI6IGZ1bmN0aW9uKHdkaW9PcHRzKSB7XHJcbiAgICAgICAgaWYgKCF3ZGlvT3B0cyB8fCAhd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddIHx8ICh3ZGlvT3B0cy5ob3N0bmFtZSAmJiB3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygncGVyZmVjdG9tb2JpbGUuY29tJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuUEVSRkVDVE87XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjazpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5CUk9XU0VSU1RBQ0s7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlNBVUNFTEFCUztcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmhvc3RuYW1lLmluY2x1ZGVzKCdsYW1iZGF0ZXN0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5MQU1CREFURVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlRFU1RJTkdCT1Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufTtcclxuIl19
|
|
417
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJwcm92aWRlcnMiLCJQRVJGRUNUTyIsIkJST1dTRVJTVEFDSyIsIlNBVUNFTEFCUyIsIkxBTUJEQVRFU1QiLCJURVNUSU5HQk9UIiwiY29udGV4dExpc3QiLCJhbmRyb2lkIiwiaW9zIiwiaHlicmlkIiwid2ViIiwiaXNFbGVtZW50Tm90Rm91bmQiLCJlbCIsInJlc3VsdCIsImVycm9yIiwibWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJtb2R1bGUiLCJleHBvcnRzIiwibWF0Y2hQYXR0ZXJuIiwidmFsIiwicGF0dGVybiIsImdsb2JUb1JlZ2V4IiwidG9TdHJpbmciLCJyZXBsYWNlIiwicmVnZXgiLCJpbmRleE9mIiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwidGVzdCIsImZsYWdzIiwiZ2V0RWxlbWVudCIsImxvY2F0b3IiLCJ3YWl0Rm9yVmlzaWJsZSIsInRpbWVvdXQiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJjYWxsIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaGVscGVycyIsImdldFdkaW9Mb2NhdG9yIiwiZHJpdmVyIiwiJCIsImVsZW1lbnROb3RGb3VuZCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJ3YWl0Rm9yRGlzcGxheWVkIiwid2FpdEZvclRpbWVvdXQiLCJlIiwiaW5jbHVkZXMiLCJFTEVNRU5UX05PVF9WSVNJQkxFIiwiZ2V0RWxlbWVudHMiLCJlbHMiLCIkJCIsImVsZW1lbnRzTm90Rm91bmQiLCJnZXRDaGlsZEVsZW1lbnQiLCJwYXJlbnRFbGVtZW50IiwiU0NSSVBUX0VSUk9SIiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNlbGVuaXVtVGltZW91dCIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJ0aW1lb3V0cyIsImNhcGFiaWxpdGllcyIsImJyb3dzZXJOYW1lIiwiZ2V0VGltZW91dHMiLCJzdG9wVXJsIiwiY29uc29sZSIsImxvZyIsImltcGxpY2l0IiwiX3ByZXZJbXBsaWNpdFRpbWVvdXQiLCJwYWdlTG9hZCIsIl9wcmV2UGFnZUxvYWRUaW1lb3V0Iiwic2V0VGltZW91dCIsImFzc2VydEFyZ3VtZW50IiwiYXJnIiwidW5kZWZpbmVkIiwiYXNzZXJ0QXJndW1lbnRTdHJpbmciLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRDb250ZXh0IiwiYWxvd2VkQ29udGV4dHMiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImlzV2ViIiwic3Vic3RyIiwiZ2V0TG9nVHlwZXMiLCJwcm92aWRlciIsImRldGVybWluZVByb3ZpZGVyIiwid2Rpb09wdHMiLCJob3N0bmFtZSIsImhhc0NpcmN1bGFyRGVwZW5kZW5jeSIsIm9iaiIsIkpTT04iLCJzdHJpbmdpZnkiLCJTdHJpbmciLCJhc3NlcnRDaXJjdWxhciIsIkNJUkNVTEFSX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7O0FBVUE7Ozs7QUFWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBekI7O0FBR0EsTUFBTUMsU0FBUyxHQUFHO0FBQ2RDLEVBQUFBLFFBQVEsRUFBRSxVQURJO0FBRWRDLEVBQUFBLFlBQVksRUFBRSxjQUZBO0FBR2RDLEVBQUFBLFNBQVMsRUFBRSxPQUhHO0FBSWRDLEVBQUFBLFVBQVUsRUFBRSxRQUpFO0FBS2RDLEVBQUFBLFVBQVUsRUFBRTtBQUxFLENBQWxCO0FBUUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxPQUFPLEVB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LFVBQVVDLEdBQVYsRUFBZTtBQUNsQyxRQUFJO0FBQ0FDLE1BQUFBLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixHQUFmO0FBQ0gsS0FGRCxDQUVFLE9BQU8vQyxDQUFQLEVBQVU7QUFDUixVQUFJa0QsTUFBTSxDQUFDbEQsQ0FBRCxDQUFOLENBQVVDLFFBQVYsQ0FBbUIsdUNBQW5CLENBQUosRUFBaUU7QUFDN0QsZUFBT2lELE1BQU0sQ0FBQ2xELENBQUQsQ0FBYjtBQUNIO0FBQ0o7O0FBQ0QsV0FBTyxLQUFQO0FBQ0gsR0F4WFk7QUEwWGJtRCxFQUFBQSxjQUFjLEVBQUUsVUFBU0osR0FBVCxFQUFjO0FBQzFCLFVBQU1ELHFCQUFxQixHQUFHLEtBQUtBLHFCQUFMLENBQTJCQyxHQUEzQixDQUE5Qjs7QUFDQSxRQUFJRCxxQkFBSixFQUEyQjtBQUN2QixZQUFNLElBQUluRCxvQkFBSixDQUFZaEQsU0FBUyxDQUFDaUQsU0FBVixDQUFvQndELGNBQWhDLEVBQWdETixxQkFBaEQsQ0FBTjtBQUNIO0FBQ0o7QUEvWFksQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuXHJcbmNvbnN0IHByb3ZpZGVycyA9IHtcclxuICAgIFBFUkZFQ1RPOiAncGVyZmVjdG8nLFxyXG4gICAgQlJPV1NFUlNUQUNLOiAnYnJvd3NlcnN0YWNrJyxcclxuICAgIFNBVUNFTEFCUzogJ3NhdWNlJyxcclxuICAgIExBTUJEQVRFU1Q6ICdsYW1iZGEnLFxyXG4gICAgVEVTVElOR0JPVDogJ3Rlc3Rpbmdib3QnXHJcbn07XHJcblxyXG5jb25zdCBjb250ZXh0TGlzdCA9IHtcclxuICAgIGFuZHJvaWQ6ICdhbmRyb2lkJyxcclxuICAgIGlvczogJ2lvcycsXHJcbiAgICBoeWJyaWQ6ICdoeWJyaWQnLFxyXG4gICAgd2ViOiAnd2ViJ1xyXG59O1xyXG5cclxuY29uc3QgaXNFbGVtZW50Tm90Rm91bmQgPSAoZWwpID0+IHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgICBlbC5lcnJvciAmJiAoXHJcbiAgICAgICAgZWwuZXJyb3IuZXJyb3IgPT09ICdubyBzdWNoIGVsZW1lbnQnIHx8XHJcbiAgICAgICAgKGVsLmVycm9yLm1lc3NhZ2UgJiYgLyogd2luYXBwZHJpdmVyIHdpbi5yaWdodENsaWNrICovIGVsLmVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnbm8gc3VjaCBlbGVtZW50JykgfHxcclxuICAgICAgICBlbC5lcnJvci5tZXNzYWdlICYmIC8qIHdpbmFwcGRyaXZlciAqLyBlbC5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQnKSkpXHJcbiAgICApIHtcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgbWF0Y2hQYXR0ZXJuOiBmdW5jdGlvbih2YWwsIHBhdHRlcm4pIHtcclxuICAgICAgICBpZiAoIXZhbCAmJiAhcGF0dGVybikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnbG9iVG9SZWdleCA9IHJlcXVpcmUoJ2dsb2ItdG8tcmVnZXhwJyk7XHJcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcblxyXG4gICAgICAgIHZhciByZWdleDtcclxuICAgICAgICBpZiAocGF0dGVybi5pbmRleE9mKCdyZWdleDonKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSByZWd1bGFyLWV4cHJlc3Npb25cclxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleDonLmxlbmd0aCksICdnJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4aTonKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIHVzaW5nIGEgY2FzZS1pbnNlbnNpdGl2ZSByZWd1bGFyLWV4cHJlc3Npb25cclxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleGk6Jy5sZW5ndGgpLCAnaWcnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZignZXhhY3Q6JykgPT0gMCB8fCBwYXR0ZXJuID09PSAnJykgeyAgLy8gbWF0Y2ggYSBzdHJpbmcgZXhhY3RseSwgdmVyYmF0aW1cclxuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3Vic3RyaW5nKCdleGFjdDonLmxlbmd0aCkgPT09IHZhbDtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZignZ2xvYjonKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggYWdhaW5zdCBhIGNhc2UtaW5zZW5zaXRpdmUgXCJnbG9iXCIgcGF0dGVyblxyXG4gICAgICAgICAgICByZWdleCA9IGdsb2JUb1JlZ2V4KHBhdHRlcm4uc3Vic3RyaW5nKCdnbG9iOicubGVuZ3RoKSwgeyBmbGFnczogJ2lnJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gcHJlZml4IHNhbWUgYXMgZ2xvYiBtYXRjaGluZ1xyXG4gICAgICAgICAgICByZWdleCA9IGdsb2JUb1JlZ2V4KHBhdHRlcm4sIHsgZmxhZ3M6ICdpZycgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFbGVtZW50OiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB3YWl0Rm9yVmlzaWJsZSwgdGltZW91dCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVsO1xyXG4gICAgICAgIGlmIChsb2NhdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IgJiYgbG9jYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRWxlbWVudCcpIHtcclxuICAgICAgICAgICAgZWwgPSBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XHJcbiAgICAgICAgICAgIGVsID0gYXdhaXQgdGhpcy5kcml2ZXIuJChsb2NhdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnROb3RGb3VuZCA9IGlzRWxlbWVudE5vdEZvdW5kKGVsKTtcclxuICAgICAgICBpZiAoZWxlbWVudE5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZWwud2FpdEZvckRpc3BsYXllZCh7IHRpbWVvdXQ6dGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBlbHMgPSBbXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZWxzID0gYXdhaXQgdGhpcy5kcml2ZXIuJCQodGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzTm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbHMpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENoaWxkRWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XHJcblxyXG4gICAgICAgIGlmICghKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC4kKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVsID0gYXdhaXQgcGFyZW50RWxlbWVudC4kKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfRk9VTkQsIGBVbmFibGUgdG8gZmluZCBlbGVtZW50OiAke2xvY2F0b3J9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2FpdEZvclZpc2libGUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGVsLndhaXRGb3JEaXNwbGF5ZWQoeyB0aW1lb3V0OiB0aW1lb3V0ID8gdGltZW91dCA6IHRoaXMud2FpdEZvclRpbWVvdXR9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5tZXNzYWdlICYmIGUubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGRpc3BsYXllZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9WSVNJQkxFLCBgRWxlbWVudCBub3QgdmlzaWJsZTogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCBwYXJlbnRFbGVtZW50LCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIHBhcmVudEVsZW1lbnQsIG11c3QgYmUgYSB2YWxpZCBlbGVtZW50Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZWxzID0gYXdhaXQgcGFyZW50RWxlbWVudC4kJChsb2NhdG9yKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzTm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbHMpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVscztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGltZW91dEltcGxpY2l0OiBhc3luYyBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyaXZlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICYmIHRpbWVvdXQgPiB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgdGltZW91dCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICYmIHRpbWVvdXQgPiB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICogMTAwMH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0aW1lb3V0cztcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID09PSAnTWljcm9zb2Z0RWRnZSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBvbiBFZGdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLmdldFRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3NVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnN0b3BVcmwuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0cyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpbWVvdXRzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZhaWxzIG9uIHBlcmZlY3RvIG1vYmlsZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFRpbWVvdXRzIGVycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMudGltZW91dHMpIHtcclxuICAgICAgICAgICAgLy8gY2hyb21lID49IDcyICYmIGNocm9tZSA8IDc1XHJcbiAgICAgICAgICAgIHRpbWVvdXRzID0gdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXRzICYmIHRpbWVvdXRzLmltcGxpY2l0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgPSB0aW1lb3V0cy5pbXBsaWNpdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRpbWVvdXRzICYmIHRpbWVvdXRzLnBhZ2VMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgPSB0aW1lb3V0cy5wYWdlTG9hZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJyb3dzZXJOYW1lICdkZWZhdWx0JyBvbiBhbmRyb2lkIFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVzdG9yZVRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgJiYgdGhpcy5kcml2ZXIuc2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgJiYgdGhpcy5kcml2ZXIuc2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ3BhZ2VMb2FkJzogdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIGlzIHJlcXVpcmVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnROdW1iZXI6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Qm9vbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9IHR5cGVvZih0cnVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRUaW1lb3V0OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjb250ZXh0TGlzdDogY29udGV4dExpc3QsXHJcblxyXG4gICAgYXNzZXJ0Q29udGV4dDogYXN5bmMgZnVuY3Rpb24oLi4uYWxvd2VkQ29udGV4dHMpIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuICAgICAgICBjb25zdCBpc1dlYiA9IChjb250ZXh0ICYmIChjb250ZXh0LmluZGV4T2YoJ1dFQlZJRVcnKSA+IC0xIHx8IGNvbnRleHQuaW5kZXhPZignQ0hST01JVU0nKSA+IC0xKSk7XHJcblxyXG4gICAgICAgIGlmIChpc1dlYikge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3Qud2ViKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5oeWJyaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5hbmRyb2lkKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5pb3MpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0V2Rpb0xvY2F0b3I6IGZ1bmN0aW9uKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2NhdG9yID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIHhwYXRoIGxvY2F0b3IgYXMgaXNcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIFhQYXRoIGluc3RlYWQgb2YgQ1NTIGZvciBicm93c2VyIHRlc3RzLCBzaW5jZSBJRCBjYW4gY29udGFpbiBpbGxlZ2FsIGNoYXJhY3RlcnNcclxuICAgICAgICAgICAgLy8gYW5kIGVzY2FwaW5nIGRvZXNuJ3Qgd29yayByZWxpYWJseSBvciBpbiBpZGVudGljYWwgbWFubmVyIGluIGFsbCBicm93c2VyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Nzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0YWc9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPCcgKyBsb2NhdG9yLnN1YnN0cigndGFnPScubGVuZ3RoKSArICcgLz4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TG9nVHlwZXM6IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoY29udGV4dCA9PT0gJ05BVElWRV9BUFAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2xvZ2NhdCcsICdidWdyZXBvcnQnLCAnc2VydmVyJ107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnYnJvd3NlcicsICdkcml2ZXInXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHByb3ZpZGVyOiBwcm92aWRlcnMsXHJcblxyXG4gICAgZGV0ZXJtaW5lUHJvdmlkZXI6IGZ1bmN0aW9uKHdkaW9PcHRzKSB7XHJcbiAgICAgICAgaWYgKCF3ZGlvT3B0cyB8fCAhd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddIHx8ICh3ZGlvT3B0cy5ob3N0bmFtZSAmJiB3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygncGVyZmVjdG9tb2JpbGUuY29tJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuUEVSRkVDVE87XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjazpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5CUk9XU0VSU1RBQ0s7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlNBVUNFTEFCUztcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmhvc3RuYW1lLmluY2x1ZGVzKCdsYW1iZGF0ZXN0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5MQU1CREFURVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlRFU1RJTkdCT1Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob2JqKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5jbHVkZXMoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydENpcmN1bGFyOiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICBjb25zdCBoYXNDaXJjdWxhckRlcGVuZGVuY3kgPSB0aGlzLmhhc0NpcmN1bGFyRGVwZW5kZW5jeShvYmopO1xyXG4gICAgICAgIGlmIChoYXNDaXJjdWxhckRlcGVuZGVuY3kpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5DSVJDVUxBUl9FUlJPUiwgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59O1xyXG4iXX0=
|
|
@@ -32,9 +32,9 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
32
32
|
this._devTools = devTools;
|
|
33
33
|
this._driver = this._parent.getDriver();
|
|
34
34
|
|
|
35
|
-
this.
|
|
35
|
+
this._driver.on('Network.responseReceived', this._onNetworkResponseReceived.bind(this));
|
|
36
36
|
|
|
37
|
-
this.
|
|
37
|
+
this._driver.on('Network.requestWillBeSent', this._onNetworkRequestWillBeSent.bind(this));
|
|
38
38
|
|
|
39
39
|
super.init();
|
|
40
40
|
return true;
|
|
@@ -42,11 +42,11 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
42
42
|
|
|
43
43
|
async dispose() {
|
|
44
44
|
try {
|
|
45
|
-
if (this.
|
|
46
|
-
await this.
|
|
47
|
-
await this.
|
|
48
|
-
await this.
|
|
49
|
-
await this.
|
|
45
|
+
if (this._driver) {
|
|
46
|
+
await this._driver.removeListener('Network.responseReceived', () => {});
|
|
47
|
+
await this._driver.removeListener('Network.requestWillBeSent', () => {});
|
|
48
|
+
await this._driver.emit('Network.disable');
|
|
49
|
+
await this._driver.emit('Network.close');
|
|
50
50
|
}
|
|
51
51
|
} catch (e) {}
|
|
52
52
|
|
|
@@ -345,4 +345,4 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
exports.default = NetworkSubModule;
|
|
348
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIk5ldHdvcmtTdWJNb2R1bGUiLCJPeHlnZW5TdWJNb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJwYXJlbnQiLCJfZGV2VG9vbHMiLCJfbmV0d29ya1JlcXVlc3RzIiwiX2NvbGxlY3REYXRhIiwiaW5pdCIsImRldlRvb2xzIiwiX3BhcmVudCIsImdldERyaXZlciIsIl9kcml2ZXIiLCJzZXNzaW9uIiwib24iLCJfb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCIsImJpbmQiLCJfb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQiLCJkaXNwb3NlIiwicmVtb3ZlTGlzdGVuZXIiLCJlbWl0IiwiZSIsInN0YXJ0Iiwic3RvcCIsImdldFJlcXVlc3RzIiwid2FpdEZvclVybCIsInBhdHRlcm4iLCJ0aW1lb3V0IiwiX2lzSW5pdGlhbGl6ZWQiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImhlbHBlcnMiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsIkRhdGUiLCJub3ciLCJyZXEiLCJ0ZXN0IiwidXJsIiwicGF1c2UiLCJUSU1FT1VUIiwid2FpdEZvck5vdFVybCIsIndhaXRGb3IiLCJtYXRjaGVyIiwiYXNzZXJ0VXJsIiwiQVNTRVJUX0VSUk9SIiwiYXNzZXJ0U3RhdHVzQ29kZSIsInN0YXR1c0NvZGUiLCJmYWlsdXJlTWVzc2FnZSIsIm1hdGNoZWRSZXEiLCJzdGF0dXMiLCJtZXNzYWdlIiwiYXNzZXJ0UmVzcG9uc2VDb250ZW50IiwiY29udGVudCIsInJlc3AiLCJjZHAiLCJyZXF1ZXN0SWQiLCJib2R5IiwiYmFzZTY0RW5jb2RlZCIsImluZGV4T2YiLCJwYXJhbXMiLCJyZXNwb25zZUJvZHkiLCJjb25zb2xlIiwibG9nIiwicmVxdWVzdFBvc3REYXRhIiwicmVzcG9uc2UiLCJtaW1lVHlwZSIsIkpTT04iLCJwYXJzZSIsInBvc3REYXRhIiwicHVzaCIsInJlZGlyZWN0UmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztBQUVBOztBQUNBOzs7O0FBRWUsTUFBTUEsZ0JBQU4sU0FBK0JDLGdDQUEvQixDQUErQztBQUMxREMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBZTtBQUN0QixVQUFNRCxJQUFOLEVBQVlDLE1BQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsRUFBeEI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0g7O0FBRURDLEVBQUFBLElBQUksQ0FBQ0MsUUFBRCxFQUFXO0FBQ1gsUUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQyxLQUFLQyxPQUFuQixJQUE4QixDQUFDLEtBQUtBLE9BQUwsQ0FBYUMsU0FBNUMsSUFBeUQsT0FBTyxLQUFLRCxPQUFMLENBQWFDLFNBQXBCLEtBQWtDLFVBQTNGLElBQXlHLENBQUMsS0FBS0QsT0FBTCxDQUFhQyxTQUFiLEVBQTlHLEVBQXdJO0FBQ3BJLFlBQU1ILElBQU47QUFDQSxhQUFPLEtBQVA7QUFDSDs7QUFDRCxTQUFLSCxTQUFMLEdBQWlCSSxRQUFqQjtBQUNBLFNBQUtHLE9BQUwsR0FBZSxLQUFLRixPQUFMLENBQWFDLFNBQWIsRUFBZjs7QUFDQSxTQUFLTixTQUFMLENBQWVRLE9BQWYsQ0FBdUJDLEVBQXZCLENBQTBCLDBCQUExQixFQUFzRCxLQUFLQywwQkFBTCxDQUFnQ0MsSUFBaEMsQ0FBcUMsSUFBckMsQ0FBdEQ7O0FBQ0EsU0FBS1gsU0FBTCxDQUFlUSxPQUFmLENBQXVCQyxFQUF2QixDQUEwQiwyQkFBMUIsRUFBdUQsS0FBS0csMkJBQUwsQ0FBaUNELElBQWpDLENBQXNDLElBQXRDLENBQXZEOztBQUNBLFVBQU1SLElBQU47QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFF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QVIsQ0FBWSx5REFBWixFQUF1RTVDLENBQXZFO0FBQ0g7O0FBRUQsVUFBSTtBQUNBLFlBQUk2QyxlQUFlLElBQUlBLGVBQWUsQ0FBQ0ssUUFBdkMsRUFBaUQ7QUFDN0NMLFVBQUFBLGVBQWUsQ0FBQ0ssUUFBaEIsR0FBMkJGLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixlQUFlLENBQUNLLFFBQTNCLENBQTNCO0FBQ0g7QUFDSixPQUpELENBSUUsT0FBT2xELENBQVAsRUFBVTtBQUVSMkMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksb0RBQVosRUFBa0U1QyxDQUFsRTtBQUNIOztBQUVELFdBQUtmLGdCQUFMLENBQXNCa0UsSUFBdEIsQ0FBMkI7QUFBRWQsUUFBQUEsU0FBUyxFQUFFSSxNQUFNLENBQUNKLFNBQXBCO0FBQStCLFdBQUdJLE1BQU0sQ0FBQ1csZ0JBQXpDO0FBQTJEUCxRQUFBQTtBQUEzRCxPQUEzQjtBQUNIO0FBQ0o7O0FBeld5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vbml0b3JpbmcgYW5kIGFuYWx5emluZyBDaHJvbWUgYnJvd3NlciBuZXR3b3JrIGFjdGl2aXRpZXMuXHJcbiovXHJcbmltcG9ydCB7IE94eWdlblN1Yk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvcmUvT3h5Z2VuU3ViTW9kdWxlJztcclxuXHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrU3ViTW9kdWxlIGV4dGVuZHMgT3h5Z2VuU3ViTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBhcmVudCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUsIHBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkZXZUb29scykge1xyXG4gICAgICAgIGlmICghZGV2VG9vbHMgfHwgIXRoaXMuX3BhcmVudCB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlciB8fCB0eXBlb2YgdGhpcy5fcGFyZW50LmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlcigpKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IGRldlRvb2xzO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IHRoaXMuX3BhcmVudC5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kZXZUb29scy5zZXNzaW9uLm9uKCdOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQnLCB0aGlzLl9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2RldlRvb2xzLnNlc3Npb24ub24oJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnQnLCB0aGlzLl9vbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudC5iaW5kKHRoaXMpKTtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RldlRvb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZXZUb29scy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQnLCAoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZXZUb29scy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGV2VG9vbHMuc2Vzc2lvbi5lbWl0KCdOZXR3b3JrLmRpc2FibGUnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RldlRvb2xzLnNlc3Npb24uZW1pdCgnTmV0d29yay5jbG9zZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbmV0d29ya1JlcXVlc3RzID0gW107XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBCZWdpbiBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQW55IHByZXZpb3VzbHkgY29sbGVjdGVkIHJlcXVlc3RzIHdpbGwgYmUgZGlzY2FyZGVkLiBOZXR3b3JrIHJlcXVlc3QgY29sbGVjdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBvbiBDaHJvbWUgNjMgYW5kIGxhdGVyLlxyXG4gICAgICogQGZ1bmN0aW9uIHN0YXJ0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIubmV0d29yay5zdGFydCgpO1xyXG4gICAgICogd2ViLm9wZW4oXCJodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb21cIik7XHJcbiAgICAgKiAvLyBwcmludCB0aGUgY29sbGVjdGVkIHJlcXVlc3Qgc28gZmFyOlxyXG4gICAgICogbGV0IHJlcXVlc3RzID0gd2ViLm5ldHdvcmsuZ2V0UmVxdWVzdHMoKTtcclxuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xyXG4gICAgICogICBsb2cuaW5mbyhyZXEpO1xyXG4gICAgICogfVxyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvclVybCgnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkwgbWF0Y2g6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgY3VzdG9tIG1hdGNoZXI6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1c1RleHQgPT09ICdPSycgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTdG9wIGNvbGxlY3RpbmcgbmV0d29yayByZXF1ZXN0cy5cclxuICAgICAqIEBmdW5jdGlvbiBzdG9wXHJcbiAgICAgKi9cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJuIGFsbCB0aGUgY29sbGVjdGVkIG5ldHdvcmsgcmVxdWVzdHMgc28gZmFyLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlcXVlc3RzXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX0gQXJyYXkgY29udGFpbmluZyBuZXR3b3JrIHJlcXVlc3RzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXF1ZXN0cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmV0d29ya1JlcXVlc3RzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXYWl0IGZvciBhIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yVXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yVXJsKHBhdHRlcm4sIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChwYXR0ZXJuLCAncGF0dGVybicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBGYWlsIHRoZSB0ZXN0IGlmIHJlcXVlc3Qgd2l0aCBhIG1hdGNoaW5nIFVSTCB3YXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBmcmFtZS5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yTm90VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIHdhaXRGb3JOb3RVcmwocGF0dGVybiwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHBhdHRlcm4sICdwYXR0ZXJuJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHBhdHRlcm4udGVzdChyZXEudXJsKSB8fCBwYXR0ZXJuID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBgQSByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3BhdHRlcm59XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdhaXQgZm9yIGEgbmV0d29yayByZXF1ZXN0LlxyXG4gICAgICogQGZ1bmN0aW9uIG5ldHdvcmtXYWl0Rm9yXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXRjaGVyIC0gTWF0Y2hpbmcgZnVuY3Rpb24uIFNob3VsZCByZXR1cm4gdHJ1ZSBvbiBtYXRjaCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgd2FpdEZvcihtYXRjaGVyLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KG1hdGNoZXIsICdtYXRjaGVyJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVyKHJlcSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsICdObyByZXF1ZXN0IGZvdW5kIHVzaW5nIHRoZSBwcm92aWRlZCBtYXRjaGVyLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRVcmxcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFVybCh1cmwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzQ29kZSAtIEEgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNzZXJ0U3RhdHVzQ29kZSh1cmwsIHN0YXR1c0NvZGUsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChzdGF0dXNDb2RlLCAnc3RhdHVzQ29kZScpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSBtYXRjaGVkUmVxLnN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFRoZSBleHBlY3RlZCBzdGF0dXMgY29kZSBcIiR7c3RhdHVzQ29kZX1cIiBkb2VzIG5vdCBtYXRjaCBcIiR7bWF0Y2hlZFJlcS5zdGF0dXN9XCIuYDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB3aGV0aGVyIEhUVFAgcmVzcG9uc2UgY29udGVudCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgb3IgcGF0dGVybi5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRSZXNwb25zZUNvbnRlbnRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gY29udGVudCAtIEEgcmVzcG9uc2UgYm9keSBjb250ZW50IHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFJlc3BvbnNlQ29udGVudCh1cmwsIGNvbnRlbnQsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChjb250ZW50LCAnY29udGVudCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLl9kcml2ZXIuY2RwKCdOZXR3b3JrJywnZ2V0UmVzcG9uc2VCb2R5Jywge1xyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IG1hdGNoZWRSZXEucmVxdWVzdElkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5ib2R5ICYmICFyZXNwLmJhc2U2NEVuY29kZWQpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgY29udGVudC50ZXN0KHJlc3AuYm9keSkgfHwgcmVzcC5ib2R5LmluZGV4T2YoY29udGVudCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFJlc3BvbnNlIFwiJHt1cmx9XCIgYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIFwiJHtjb250ZW50fS5gO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkKHBhcmFtcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VCb2R5O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlc3BvbnNlQm9keScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVzcG9uc2VCb2R5IGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgTmV0d29yay5nZXRSZXNwb25zZUJvZHkgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdFBvc3REYXRhO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlcXVlc3RQb3N0RGF0YScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgTmV0d29yay5nZXRSZXF1ZXN0UG9zdERhdGEgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMgJiZcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZXNwb25zZSAmJlxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJlc3BvbnNlLm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkgJiYgcmVzcG9uc2VCb2R5LmJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LmJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlQm9keS5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGpzb24gcGFyc2UgcmVzcG9uc2UgQm9keSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCByZXNwb25zZUJvZHkgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFBvc3REYXRhICYmIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UG9zdERhdGEucG9zdERhdGEgPSBKU09OLnBhcnNlKHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBqc29uIHBhcnNlIHJlcXVlc3QgUG9zdCBEYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIHJlcXVlc3RQb3N0RGF0YSBwYXJzZSBlJywgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cy5wdXNoKHsgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkLCAuLi5wYXJhbXMucmVzcG9uc2UsIHJlc3BvbnNlQm9keSwgcmVxdWVzdFBvc3REYXRhIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3REYXRhICYmIHBhcmFtcy5yZWRpcmVjdFJlc3BvbnNlKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdFBvc3REYXRhO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlcXVlc3RQb3N0RGF0YScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1JlcXVlc3RXaWxsQmVTZW50IE5ldHdvcmsuZ2V0UmVxdWVzdFBvc3REYXRhIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0UG9zdERhdGEgJiYgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUganNvbiBwYXJzZSByZXF1ZXN0IFBvc3QgRGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCByZXF1ZXN0UG9zdERhdGEgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMucHVzaCh7IHJlcXVlc3RJZDogcGFyYW1zLnJlcXVlc3RJZCwgLi4ucGFyYW1zLnJlZGlyZWN0UmVzcG9uc2UsIHJlcXVlc3RQb3N0RGF0YSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
348
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIk5ldHdvcmtTdWJNb2R1bGUiLCJPeHlnZW5TdWJNb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJwYXJlbnQiLCJfZGV2VG9vbHMiLCJfbmV0d29ya1JlcXVlc3RzIiwiX2NvbGxlY3REYXRhIiwiaW5pdCIsImRldlRvb2xzIiwiX3BhcmVudCIsImdldERyaXZlciIsIl9kcml2ZXIiLCJvbiIsIl9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIiwiYmluZCIsIl9vbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCIsImRpc3Bvc2UiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXQiLCJlIiwic3RhcnQiLCJzdG9wIiwiZ2V0UmVxdWVzdHMiLCJ3YWl0Rm9yVXJsIiwicGF0dGVybiIsInRpbWVvdXQiLCJfaXNJbml0aWFsaXplZCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiRGF0ZSIsIm5vdyIsInJlcSIsInRlc3QiLCJ1cmwiLCJwYXVzZSIsIlRJTUVPVVQiLCJ3YWl0Rm9yTm90VXJsIiwid2FpdEZvciIsIm1hdGNoZXIiLCJhc3NlcnRVcmwiLCJBU1NFUlRfRVJST1IiLCJhc3NlcnRTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImZhaWx1cmVNZXNzYWdlIiwibWF0Y2hlZFJlcSIsInN0YXR1cyIsIm1lc3NhZ2UiLCJhc3NlcnRSZXNwb25zZUNvbnRlbnQiLCJjb250ZW50IiwicmVzcCIsImNkcCIsInJlcXVlc3RJZCIsImJvZHkiLCJiYXNlNjRFbmNvZGVkIiwiaW5kZXhPZiIsInBhcmFtcyIsInJlc3BvbnNlQm9keSIsImNvbnNvbGUiLCJsb2ciLCJyZXF1ZXN0UG9zdERhdGEiLCJyZXNwb25zZSIsIm1pbWVUeXBlIiwiSlNPTiIsInBhcnNlIiwicG9zdERhdGEiLCJwdXNoIiwicmVkaXJlY3RSZXNwb25zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBRUE7O0FBQ0E7Ozs7QUFFZSxNQUFNQSxnQkFBTixTQUErQkMsZ0NBQS9CLENBQStDO0FBQzFEQyxFQUFBQSxXQUFXLENBQUNDLElBQUQsRUFBT0MsTUFBUCxFQUFlO0FBQ3RCLFVBQU1ELElBQU4sRUFBWUMsTUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixFQUF4QjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDSDs7QUFFREMsRUFBQUEsSUFBSSxDQUFDQyxRQUFELEVBQVc7QUFDWCxRQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDLEtBQUtDLE9BQW5CLElBQThCLENBQUMsS0FBS0EsT0FBTCxDQUFhQyxTQUE1QyxJQUF5RCxPQUFPLEtBQUtELE9BQUwsQ0FBYUMsU0FBcEIsS0FBa0MsVUFBM0YsSUFBeUcsQ0FBQyxLQUFLRCxPQUFMLENBQWFDLFNBQWIsRUFBOUcsRUFBd0k7QUFDcEksWUFBTUgsSUFBTjtBQUNBLGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUtILFNBQUwsR0FBaUJJLFFBQWpCO0FBQ0EsU0FBS0csT0FBTCxHQUFlLEtBQUtGLE9BQUwsQ0FBYUMsU0FBYixFQUFmOztBQUNBLFNBQUtDLE9BQUwsQ0FBYUMsRUFBYixDQUFnQiwwQkFBaEIsRUFBNEMsS0FBS0MsMEJBQUwsQ0FBZ0NDLElBQWhDLENBQXFDLElBQXJDLENBQTVDOztBQUNBLFNBQUtILE9BQUwsQ0FBYUMsRUFBYixDQUFnQiwyQkFBaEIsRUFBNkMsS0FBS0csMkJBQUwsQ0FBaUNELElBQWpDLENBQXNDLElBQXRDLENBQTdDOztBQUNBLFVBQU1QLElBQU47QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFWSxRQUFQUyxPQUFPLEdBQUc7QUFFWixRQUFJO0FBQ0EsVUFB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QUFBLGVBQWUsQ0FBQ0ssUUFBaEIsR0FBMkJGLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixlQUFlLENBQUNLLFFBQTNCLENBQTNCO0FBQ0g7QUFDSixPQUpELENBSUUsT0FBT2xELENBQVAsRUFBVTtBQUVSMkMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksb0RBQVosRUFBa0U1QyxDQUFsRTtBQUNIOztBQUVELFdBQUtkLGdCQUFMLENBQXNCaUUsSUFBdEIsQ0FBMkI7QUFBRWQsUUFBQUEsU0FBUyxFQUFFSSxNQUFNLENBQUNKLFNBQXBCO0FBQStCLFdBQUdJLE1BQU0sQ0FBQ1csZ0JBQXpDO0FBQTJEUCxRQUFBQTtBQUEzRCxPQUEzQjtBQUNIO0FBQ0o7O0FBeld5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vbml0b3JpbmcgYW5kIGFuYWx5emluZyBDaHJvbWUgYnJvd3NlciBuZXR3b3JrIGFjdGl2aXRpZXMuXHJcbiovXHJcbmltcG9ydCB7IE94eWdlblN1Yk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvcmUvT3h5Z2VuU3ViTW9kdWxlJztcclxuXHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrU3ViTW9kdWxlIGV4dGVuZHMgT3h5Z2VuU3ViTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBhcmVudCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUsIHBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkZXZUb29scykge1xyXG4gICAgICAgIGlmICghZGV2VG9vbHMgfHwgIXRoaXMuX3BhcmVudCB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlciB8fCB0eXBlb2YgdGhpcy5fcGFyZW50LmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlcigpKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IGRldlRvb2xzO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IHRoaXMuX3BhcmVudC5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIub24oJ05ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCcsIHRoaXMuX29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyLm9uKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgdGhpcy5fb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kcml2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5yZW1vdmVMaXN0ZW5lcignTmV0d29yay5yZXNwb25zZVJlY2VpdmVkJywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLmVtaXQoJ05ldHdvcmsuZGlzYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLmVtaXQoJ05ldHdvcmsuY2xvc2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2RldlRvb2xzID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQmVnaW4gY29sbGVjdGluZyBuZXR3b3JrIHJlcXVlc3RzLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFueSBwcmV2aW91c2x5IGNvbGxlY3RlZCByZXF1ZXN0cyB3aWxsIGJlIGRpc2NhcmRlZC4gTmV0d29yayByZXF1ZXN0IGNvbGxlY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gQ2hyb21lIDYzIGFuZCBsYXRlci5cclxuICAgICAqIEBmdW5jdGlvbiBzdGFydFxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm5ldHdvcmsuc3RhcnQoKTtcclxuICAgICAqIHdlYi5vcGVuKFwiaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tXCIpO1xyXG4gICAgICogLy8gcHJpbnQgdGhlIGNvbGxlY3RlZCByZXF1ZXN0IHNvIGZhcjpcclxuICAgICAqIGxldCByZXF1ZXN0cyA9IHdlYi5uZXR3b3JrLmdldFJlcXVlc3RzKCk7XHJcbiAgICAgKiBmb3IgKGxldCByZXEgb2YgcmVxdWVzdHMpIHtcclxuICAgICAqICAgbG9nLmluZm8ocmVxKTtcclxuICAgICAqIH1cclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHZlcmJhdGltIFVSTCBtYXRjaDpcclxuICAgICAqIHdlYi5uZXR3b3JrLndhaXRGb3JVcmwoJ2h0dHBzOi8vd3d3LnlvdXJ3ZWJzaXRlLmNvbS9mb28vYmFyJyk7XHJcbiAgICAgKiAvLyB3YWl0IGZvciBhIHJlcXVlc3QgdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gVVJMIG1hdGNoOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvclVybCgvaHR0cHM6XFwvXFwvLipcXC9mb29cXC9iYXIvKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIGN1c3RvbSBtYXRjaGVyOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvcihmdW5jdGlvbiAocmVxdWVzdCkge1xyXG4gICAgICogICByZXR1cm4gcmVxdWVzdC5zdGF0dXNUZXh0ID09PSAnT0snICYmIHJlcXVlc3QudXJsID09PSAnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMgPSBbXTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU3RvcCBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gc3RvcFxyXG4gICAgICovXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybiBhbGwgdGhlIGNvbGxlY3RlZCBuZXR3b3JrIHJlcXVlc3RzIHNvIGZhci5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXF1ZXN0c1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0W119IEFycmF5IGNvbnRhaW5pbmcgbmV0d29yayByZXF1ZXN0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVxdWVzdHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ldHdvcmtSZXF1ZXN0cztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgd2FpdEZvclVybChwYXR0ZXJuLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQocGF0dGVybiwgJ3BhdHRlcm4nKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgcGF0dGVybi50ZXN0KHJlcS51cmwpIHx8IHBhdHRlcm4gPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3BhdHRlcm59XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRmFpbCB0aGUgdGVzdCBpZiByZXF1ZXN0IHdpdGggYSBtYXRjaGluZyBVUkwgd2FzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvck5vdFVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yTm90VXJsKHBhdHRlcm4sIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChwYXR0ZXJuLCAncGF0dGVybicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYEEgcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHtwYXR0ZXJufVwiIHdhcyBmb3VuZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXYWl0IGZvciBhIG5ldHdvcmsgcmVxdWVzdC5cclxuICAgICAqIEBmdW5jdGlvbiBuZXR3b3JrV2FpdEZvclxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWF0Y2hlciAtIE1hdGNoaW5nIGZ1bmN0aW9uLiBTaG91bGQgcmV0dXJuIHRydWUgb24gbWF0Y2gsIG9yIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIHdhaXRGb3IobWF0Y2hlciwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChtYXRjaGVyLCAnbWF0Y2hlcicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihyZXEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCAnTm8gcmVxdWVzdCBmb3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgbWF0Y2hlci4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBpZiBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRVcmwodXJsLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHVybCwgJ3VybCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHdoZXRoZXIgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdmFsdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzQ29kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSB1cmwgLSBBIHJlcXVlc3QgVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXR1c0NvZGUgLSBBIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFN0YXR1c0NvZGUodXJsLCBzdGF0dXNDb2RlLCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoc3RhdHVzQ29kZSwgJ3N0YXR1c0NvZGUnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFJlcSA9IHJlcTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gbWF0Y2hlZFJlcS5zdGF0dXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGZhaWx1cmVNZXNzYWdlIHx8IGBUaGUgZXhwZWN0ZWQgc3RhdHVzIGNvZGUgXCIke3N0YXR1c0NvZGV9XCIgZG9lcyBub3QgbWF0Y2ggXCIke21hdGNoZWRSZXEuc3RhdHVzfVwiLmA7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIG9yIHBhdHRlcm4uXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2VDb250ZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGNvbnRlbnQgLSBBIHJlc3BvbnNlIGJvZHkgY29udGVudCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gZmFpbHVyZU1lc3NhZ2UgLSBBbiBvcHRpb25hbCBmYWlsdXJlIG1lc3NhZ2UuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhc3NlcnRSZXNwb25zZUNvbnRlbnQodXJsLCBjb250ZW50LCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoY29udGVudCwgJ2NvbnRlbnQnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFJlcSA9IHJlcTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlc3BvbnNlQm9keScsIHtcclxuICAgICAgICAgICAgcmVxdWVzdElkOiBtYXRjaGVkUmVxLnJlcXVlc3RJZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXNwICYmIHJlc3AuYm9keSAmJiAhcmVzcC5iYXNlNjRFbmNvZGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIGNvbnRlbnQudGVzdChyZXNwLmJvZHkpIHx8IHJlc3AuYm9keS5pbmRleE9mKGNvbnRlbnQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGZhaWx1cmVNZXNzYWdlIHx8IGBSZXNwb25zZSBcIiR7dXJsfVwiIGJvZHkgY29udGVudCBkb2VzIG5vdCBtYXRjaCBcIiR7Y29udGVudH0uYDtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZChwYXJhbXMpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlQm9keTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXNwb25zZUJvZHknLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlc3BvbnNlQm9keSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIE5ldHdvcmsuZ2V0UmVzcG9uc2VCb2R5IGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3RQb3N0RGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXF1ZXN0UG9zdERhdGEnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlcXVlc3RQb3N0RGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIE5ldHdvcmsuZ2V0UmVxdWVzdFBvc3REYXRhIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zICYmXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVzcG9uc2UgJiZcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZXNwb25zZS5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ICYmIHJlc3BvbnNlQm9keS5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keS5ib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZUJvZHkuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBqc29uIHBhcnNlIHJlc3BvbnNlIEJvZHkgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgcmVzcG9uc2VCb2R5IHBhcnNlIGUnLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RQb3N0RGF0YSAmJiByZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUganNvbiBwYXJzZSByZXF1ZXN0IFBvc3QgRGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCByZXF1ZXN0UG9zdERhdGEgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMucHVzaCh7IHJlcXVlc3RJZDogcGFyYW1zLnJlcXVlc3RJZCwgLi4ucGFyYW1zLnJlc3BvbnNlLCByZXNwb25zZUJvZHksIHJlcXVlc3RQb3N0RGF0YSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX29uTmV0d29ya1JlcXVlc3RXaWxsQmVTZW50KHBhcmFtcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSAmJiBwYXJhbXMucmVkaXJlY3RSZXNwb25zZSkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3RQb3N0RGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXF1ZXN0UG9zdERhdGEnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlcXVlc3RQb3N0RGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCBOZXR3b3JrLmdldFJlcXVlc3RQb3N0RGF0YSBlJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFBvc3REYXRhICYmIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSA9IEpTT04ucGFyc2UocmVxdWVzdFBvc3REYXRhLnBvc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGpzb24gcGFyc2UgcmVxdWVzdCBQb3N0IERhdGEgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQgcmVxdWVzdFBvc3REYXRhIHBhcnNlIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fbmV0d29ya1JlcXVlc3RzLnB1c2goeyByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWQsIC4uLnBhcmFtcy5yZWRpcmVjdFJlc3BvbnNlLCByZXF1ZXN0UG9zdERhdGEgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
@@ -59,9 +59,9 @@ class DevToolsService extends _OxygenService.default {
|
|
|
59
59
|
console.log('UNSUPPORTED_ERROR_MESSAGE', UNSUPPORTED_ERROR_MESSAGE);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
if (devToolsSvc.
|
|
62
|
+
if (devToolsSvc._isSupported) {
|
|
63
63
|
global.browser = module.getDriver();
|
|
64
|
-
await devToolsSvc.before();
|
|
64
|
+
await devToolsSvc.before(null, null, this._driver);
|
|
65
65
|
submodule.init(devToolsSvc);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -80,4 +80,4 @@ class DevToolsService extends _OxygenService.default {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
exports.default = DevToolsService;
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzLmpzIl0sIm5hbWVzIjpbIkRldlRvb2xzU2VydmljZSIsIk94eWdlblNlcnZpY2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjdHgiLCJyZXN1bHRzIiwibG9nZ2VyIiwiX3N1Yk1vZHVsZXMiLCJpc1NlcnZpY2VJbml0aWFsaXplZCIsIm9uTW9kdWxlTG9hZGVkIiwibW9kdWxlIiwiZ2V0RHJpdmVyIiwiZ2V0Q2FwYWJpbGl0aWVzIiwibmV0d29ya1N1Ym1vZHVsZSIsIk5ldHdvcmtTdWJNb2R1bGUiLCJhZGRTdWJNb2R1bGUiLCJuYW1lIiwib25Nb2R1bGVJbml0aWFsaXplZCIsInN1Ym1vZHVsZSIsImlzSW5pdGlhbGl6ZWQiLCJjYXBhYmlsaXRpZXMiLCJfZHJpdmVyIiwiZGVidWdnZXJBZGRyZXNzIiwicHJvdmlkZXIiLCJkZXZUb29sc1N2YyIsIldESU9EZXZUb29sc1NlcnZpY2UiLCJVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFIiwiYmVmb3JlU2Vzc2lvbiIsImNvbnNvbGUiLCJsb2ciLCJfaXNTdXBwb3J0ZWQiLCJnbG9iYWwiLCJicm93c2VyIiwiYmVmb3JlIiwiaW5pdCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJkaXNwb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVlLE1BQU1BLGVBQU4sU0FBOEJDLHNCQUE5QixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLEdBQVYsRUFBZUMsT0FBZixFQUF3QkMsTUFBeEIsRUFBZ0M7QUFDdkMsVUFBTUgsT0FBTixFQUFlQyxHQUFmLEVBQW9CQyxPQUFwQixFQUE2QkMsTUFBN0I7QUFFQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsSUFBNUI7QUFDSDs7QUFDREMsRUFBQUEsY0FBYyxDQUFDQyxNQUFELEVBQVM7QUFFbkIsUUFBSSxDQUFDQSxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxTQUFuQixJQUFnQyxPQUFPRCxNQUFNLENBQUNDLFNBQWQsS0FBNEIsVUFBNUQsSUFBMEUsQ0FBQ0QsTUFBTSxDQUFDRSxlQUFsRixJQUFxRyxPQUFPRixNQUFNLENBQUNFLGVBQWQsS0FBa0MsVUFBM0ksRUFBdUo7QUFDbko7QUFDSDs7QUFFRCxVQUFNQyxnQkFBZ0IsR0FBRyxJQUFJQyx5QkFBSixDQUFxQixTQUFyQixFQUFnQ0osTUFBaEMsQ0FBekI7QUFDQUEsSUFBQUEsTUFBTSxDQUFDSyxZQUFQLENBQW9CLFNBQXBCLEVBQStCRixnQkFBL0I7QUFDQSxTQUFLTixXQUFMLENBQWlCRyxNQUFNLENBQUNNLElBQXhCLElBQWdDSCxnQkFBaEM7QUFDSDs7QUFDd0IsUUFBbkJJLG1CQUFtQixDQUFDUCxNQUFELEVBQVM7QUFFOUIsUUFBSSxDQUFDQSxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxTQUFuQixJQUFnQyxPQUFPRCxNQUFNLENBQUNDLFNBQWQsS0FBNEIsVUFBNUQsSUFBMEUsQ0FBQ0QsTUFBTSxDQUFDRSxlQUFsRixJQUFxRyxPQUFPRixNQUFNLENBQUNFLGVBQWQsS0FBa0MsVUFBM0ksRUFBdUo7QUFDbko7QUFDSDs7QUFDRCxVQUFNTSxTQUFTLEdBQUcsS0FBS1gsV0FBTCxDQUFpQkcsTUFBTSxDQUFDTSxJQUF4QixDQUFsQjs7QUFDQSxRQUFJLENBQUNFLFNBQUQsSUFBY0EsU0FBUyxDQUFDQyxhQUE1QixFQUEyQztBQUN2QztBQUNIOztBQUVELFFBQUloQixPQUFPLEdBQUcsRUFBZDtBQUNBLFVBQU1pQixZQUFZLEdBQUdWLE1BQU0sQ0FBQ0UsZUFBUCxFQUFyQjtBQUNBLFNBQUtTLE9BQUwsR0FBZVgsTUFBTSxDQUFDQyxTQUFQLEVBQWY7O0FBRUEsUUFDSSxLQUFLVSxPQUFMLElBQ0EsS0FBS0EsT0FBTCxDQUFhRCxZQURiLElBRUEsS0FBS0MsT0FBTCxDQUFhRCxZQUFiLENBQTBCLG9CQUExQixDQUZBLElBR0EsS0FBS0MsT0FBTCxDQUFhRCxZQUFiLENBQTBCLG9CQUExQixFQUFnRCxpQkFBaEQsQ0FKSixFQUtFO0FBQ0VqQixNQUFBQSxPQUFPLENBQUNtQixlQUFSLEdBQTBCLEtBQUtELE9BQUwsQ0FBYUQsWUFBYixDQUEwQixvQkFBMUIsRUFBZ0QsaUJBQWhELENBQTFCO0FBQ0g7O0FBR0QsUUFBSSxLQUFLQyxPQUFMLENBQWFFLFFBQWIsS0FBMEIsSUFBOUIsRUFBb0M7QUFFaEMsWUFBTUMsV0FBVyxHQUFHLElBQUlDLHdCQUFKLENBQXdCdEIsT0FBeEIsQ0FBcEI7QUFDQSxZQUFNdUIseUJBQXlCLEdBQUdGLFdBQVcsQ0FBQ0csYUFBWixDQUEwQixJQUExQixFQUFnQ1AsWUFBaEMsQ0FBbEM7O0FBRUEsVUFBSU0seUJBQUosRUFBK0I7QUFDM0JFLFFBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDJCQUFaLEVBQXlDSCx5QkFBekM7QUFDSDs7QUFFRCxVQUFJRixXQUFXLENBQUNNLFlBQWhCLEVBQThCO0FBRzFCQyxRQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJ0QixNQUFNLENBQUNDLFNBQVAsRUFBakI7QUFDQSxjQUFNYSxXQUFXLENBQUNTLE1BQVosQ0FBbUIsSUFBbkIsRUFBeUIsSUFBekIsRUFBK0IsS0FBS1osT0FBcEMsQ0FBTjtBQUNBSCxRQUFBQSxTQUFTLENBQUNnQixJQUFWLENBQWVWLFdBQWY7QUFFSDtBQUNKO0FBQ0o7O0FBQ0RXLEVBQUFBLG1CQUFtQixDQUFDekIsTUFBRCxFQUFTO0FBQ3hCLFVBQU1RLFNBQVMsR0FBRyxLQUFLWCxXQUFMLENBQWlCRyxNQUFNLENBQUNNLElBQXhCLENBQWxCOztBQUNBLFFBQUksQ0FBQ0UsU0FBTCxFQUFnQjtBQUNaO0FBQ0g7O0FBQ0RBLElBQUFBLFNBQVMsQ0FBQ2tCLE9BQVY7QUFDSDs7QUFsRXNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5yZWFjaGFibGUgKi9cclxuaW1wb3J0IFdESU9EZXZUb29sc1NlcnZpY2UgZnJvbSAnQHdkaW8vZGV2dG9vbHMtc2VydmljZSc7XHJcblxyXG5pbXBvcnQgT3h5Z2VuU2VydmljZSBmcm9tICcuLi9jb3JlL094eWdlblNlcnZpY2UnO1xyXG5pbXBvcnQgTmV0d29ya1N1Yk1vZHVsZSBmcm9tICcuL3NlcnZpY2UtZGV2dG9vbHMvc3VibW9kdWxlLW5ldHdvcmsnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2VG9vbHNTZXJ2aWNlIGV4dGVuZHMgT3h5Z2VuU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGN0eCwgcmVzdWx0cywgbG9nZ2VyKTtcclxuICAgICAgICAvLyBoYXNoIG9mIHdlYmRyaXZlciBiYXNlZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fc3ViTW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuaXNTZXJ2aWNlSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgb25Nb2R1bGVMb2FkZWQobW9kdWxlKSB7XHJcbiAgICAgICAgLy8gc2tpcCBhbnkgbW9kdWxlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IC5nZXREcml2ZXIoKSBtZXRob2QgKGUuZy4gbm90IHdlYmRyaXZlciBiYXNlZClcclxuICAgICAgICBpZiAoIW1vZHVsZSB8fCAhbW9kdWxlLmdldERyaXZlciB8fCB0eXBlb2YgbW9kdWxlLmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhbW9kdWxlLmdldENhcGFiaWxpdGllcyB8fCB0eXBlb2YgbW9kdWxlLmdldENhcGFiaWxpdGllcyAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXR3b3JrU3VibW9kdWxlID0gbmV3IE5ldHdvcmtTdWJNb2R1bGUoJ25ldHdvcmsnLCBtb2R1bGUpO1xyXG4gICAgICAgIG1vZHVsZS5hZGRTdWJNb2R1bGUoJ25ldHdvcmsnLCBuZXR3b3JrU3VibW9kdWxlKTtcclxuICAgICAgICB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXSA9IG5ldHdvcmtTdWJtb2R1bGU7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSkge1xyXG4gICAgICAgIC8vIHNraXAgYW55IG1vZHVsZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBnZXREcml2ZXIgbWV0aG9kIChlLmcuIG5vdCB3ZWJkcml2ZXIgYmFzZWQpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5nZXREcml2ZXIgfHwgdHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicgfHwgIW1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgfHwgdHlwZW9mIG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcclxuICAgICAgICBpZiAoIXN1Ym1vZHVsZSB8fCBzdWJtb2R1bGUuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ11bJ2RlYnVnZ2VyQWRkcmVzcyddXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZGVidWdnZXJBZGRyZXNzID0gdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ11bJ2RlYnVnZ2VyQWRkcmVzcyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCB1c2luZyBhbnkgM3JkIHBhcnR5IHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKHRoaXMuX2RyaXZlci5wcm92aWRlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIERldlRvb2xzU2VydmljZSBhbmQgaG9vayBpdCB0byB0aGUgY3VycmVudCB3ZWJkcml2ZXIgb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IGRldlRvb2xzU3ZjID0gbmV3IFdESU9EZXZUb29sc1NlcnZpY2Uob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IFVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UgPSBkZXZUb29sc1N2Yy5iZWZvcmVTZXNzaW9uKG51bGwsIGNhcGFiaWxpdGllcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoVU5TVVBQT1JURURfRVJST1JfTUVTU0FHRSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1VOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UnLCBVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRldlRvb2xzU3ZjLl9pc1N1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlIGdsb2JhbC5icm93c2VyIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHdlYmRyaXZlciBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgb3JnR2xvYmFsQnJvd3NlciA9IGdsb2JhbC5icm93c2VyO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmJyb3dzZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBkZXZUb29sc1N2Yy5iZWZvcmUobnVsbCwgbnVsbCwgdGhpcy5fZHJpdmVyKTtcclxuICAgICAgICAgICAgICAgIHN1Ym1vZHVsZS5pbml0KGRldlRvb2xzU3ZjKTtcclxuICAgICAgICAgICAgICAgIC8vIGdsb2JhbC5icm93c2VyID0gb3JnR2xvYmFsQnJvd3NlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uTW9kdWxlV2lsbERpc3Bvc2UobW9kdWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc3VibW9kdWxlID0gdGhpcy5fc3ViTW9kdWxlc1ttb2R1bGUubmFtZV07XHJcbiAgICAgICAgaWYgKCFzdWJtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJtb2R1bGUuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG59Il19
|