@magic-xpa/engine 4.1100.0-dev4110.207 → 4.1100.0-dev4110.213
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/src/ClientManager.mjs +5 -5
- package/esm2022/src/CurrentClientVersion.mjs +2 -2
- package/esm2022/src/gui/MgForm.mjs +45 -2
- package/esm2022/src/tasks/Task.mjs +4 -3
- package/fesm2022/magic-xpa-engine.mjs +50 -7
- package/fesm2022/magic-xpa-engine.mjs.map +1 -1
- package/package.json +4 -4
- package/src/ClientManager.d.ts +1 -0
- package/src/gui/MgForm.d.ts +3 -0
@@ -30,6 +30,7 @@ export class ClientManager {
|
|
30
30
|
static _instance = null;
|
31
31
|
_globalUniqueSessionId = null;
|
32
32
|
_buttonIsClicked = false;
|
33
|
+
static handlingFirstParkableControl = false;
|
33
34
|
static _executionPropertiesFileName = null;
|
34
35
|
static assetsURL = "./assets";
|
35
36
|
static get Instance() {
|
@@ -57,7 +58,7 @@ export class ClientManager {
|
|
57
58
|
}
|
58
59
|
break;
|
59
60
|
case "mousedown":
|
60
|
-
if (control.isButton() || (control.ConnectedControl && guiEvent.fromButton)) {
|
61
|
+
if (control.isButton() || control.isCheckBox() || (control.ConnectedControl && guiEvent.fromButton)) {
|
61
62
|
this._buttonIsClicked = true;
|
62
63
|
}
|
63
64
|
else if (!control.isSubform())
|
@@ -78,7 +79,8 @@ export class ClientManager {
|
|
78
79
|
case "focus":
|
79
80
|
if (this._buttonIsClicked || (control.ConnectedControl && guiEvent.fromButton))
|
80
81
|
return;
|
81
|
-
|
82
|
+
if (!ClientManager.handlingFirstParkableControl)
|
83
|
+
Events.OnFocus(control, lineIdx, true, false);
|
82
84
|
break;
|
83
85
|
case "dblclick":
|
84
86
|
Events.OnDblClick(control, lineIdx);
|
@@ -264,8 +266,6 @@ export class ClientManager {
|
|
264
266
|
val = new ExpVal(StorageAttribute.ALPHA, false, value);
|
265
267
|
GlobalParams.Instance.setValue(key, new MirrorExpVal(val), true);
|
266
268
|
});
|
267
|
-
ClientManager.StartExecution(httpClient);
|
268
|
-
Logger.Instance.Flush();
|
269
269
|
}
|
270
270
|
static async StopExecution() {
|
271
271
|
try {
|
@@ -411,4 +411,4 @@ export class ClientManager {
|
|
411
411
|
return ClientManager.assetsURL;
|
412
412
|
}
|
413
413
|
}
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpZW50TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvQ2xpZW50TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RixPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsY0FBYyxFQUVkLE9BQU8sRUFFUCxHQUFHLEVBQUUsYUFBYSxFQUNsQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLE1BQU0sRUFDUCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUc5QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLGFBQWEs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VyxFQUFFLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBR3ZELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0QsSUFBSSw4QkFBOEIsR0FBbUMsY0FBYztZQUNuRixvQ0FBb0MsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFMUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQWlCLDhCQUE4QixDQUFDLENBQUM7UUFHM0csdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFTSxNQUFNLENBQUMsWUFBWTtRQUN4QixPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIERhdGVUaW1lLCBOU3RyaW5nLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5cclxuaW1wb3J0IHtcclxuICBEYXRlVGltZVV0aWxzLFxyXG4gIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBNaXNjLFxyXG4gIE9TRW52aXJvbm1lbnQsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBYTUxDb25zdGFudHNcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBDb21tYW5kVHlwZSxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV2ZW50cyxcclxuICBHdWlEYXRhQ29sbGVjdGlvbixcclxuICBHdWlFbnZpcm9ubWVudCxcclxuICBMYXN0Rm9jdXNlZFZhbCxcclxuICBNYW5hZ2VyLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgUElDLCBQcm9wSW50ZXJmYWNlLFxyXG4gIFJ1bnRpbWVDb250ZXh0QmFzZSxcclxuICBTdHlsZXMsXHJcbiAgRXhwVmFsXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge0V2ZW50c01hbmFnZXJ9IGZyb20gJy4vZXZlbnQvRXZlbnRzTWFuYWdlcic7XHJcbmltcG9ydCB7R3VpRXZlbnRzUHJvY2Vzc29yfSBmcm9tICcuL0d1aUV2ZW50c1Byb2Nlc3Nvcic7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4vZW52L0Vudmlyb25tZW50JztcclxuaW1wb3J0IHtMYW5ndWFnZURhdGF9IGZyb20gJy4vZW52L0xhbmd1YWdlRGF0YSc7XHJcbmltcG9ydCB7VGFza3NUYWJsZX0gZnJvbSAnLi90YXNrcy9UYXNrc1RhYmxlJztcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gJy4vZ3VpL01nQ29udHJvbCc7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gJy4vY29tbWFuZHMvSUNsaWVudENvbW1hbmQnO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gJy4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7TUdEYXRhQ29sbGVjdGlvbn0gZnJvbSAnLi90YXNrcy9NR0RhdGFDb2xsZWN0aW9uJztcclxuaW1wb3J0IHtVbmlxdWVJRFV0aWxzfSBmcm9tICcuL3V0aWwvVW5pcXVlSURVdGlscyc7XHJcbmltcG9ydCB7SHR0cE1hbmFnZXJ9IGZyb20gJy4vaHR0cC9IdHRwTWFuYWdlcic7XHJcbmltcG9ydCB7Q29tbWFuZHNUYWJsZX0gZnJvbSAnLi9Db21tYW5kc1RhYmxlJztcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSAnLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3InO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb259IGZyb20gJy4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlJztcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJ9IGZyb20gJy4vQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyJztcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gJy4vdGFza3MvTUdEYXRhJztcclxuaW1wb3J0IHtTZXJ2ZXJFcnJvcn0gZnJvbSAnLi9yZW1vdGUvU2VydmVyRXJyb3InO1xyXG5pbXBvcnQge0h0dHBDbGllbnRFdmVudHN9IGZyb20gJy4vaHR0cC9jbGllbnQvSHR0cENsaWVudEV2ZW50cyc7XHJcbmltcG9ydCB7SUd1aUV2ZW50fSBmcm9tICcuL2JyaWRnZS9JR3VpRXZlbnQnO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tICcuL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5JztcclxuaW1wb3J0IHtDdXJyZW50Q2xpZW50VmVyc2lvbn0gZnJvbSAnLi9DdXJyZW50Q2xpZW50VmVyc2lvbic7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gJy4vZGF0YS9EYXRhVmlldyc7XHJcbmltcG9ydCB7TGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tICcuL3J0L0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7RW52UGFyYW1zVGFibGV9IGZyb20gJy4vZW52L0VudlZhcmlhYmxlc1RhYmxlJztcclxuaW1wb3J0IHtHbG9iYWxQYXJhbXMsIE1pcnJvckV4cFZhbH0gZnJvbSAnLi9leHAvR2xvYmFsUGFyYW1zVGFibGUnO1xyXG5pbXBvcnQge09wZW5VUkxDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL1NlcnZlclRvQ2xpZW50L09wZW5VUkxDb21tYW5kJztcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gJy4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4vQWNjZXNzSGVscGVyJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7Q29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7R1VJTWFuYWdlcn0gZnJvbSBcIi4vR1VJTWFuYWdlclwiO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIENsaWVudE1hbmFnZXIge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IENsaWVudE1hbmFnZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX2dsb2JhbFVuaXF1ZVNlc3Npb25JZDogc3RyaW5nID0gbnVsbDtcclxuLy8gIHByaXZhdGUgX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7IC8vIGNvbnRyb2wgd2hlcmUgbGFzdCBwYXJraW5nIHdhcyBhdHRlbXB0ZWQgYnV0IHdlIGRpZCBub3QgcGFyayBvbiBpdFxyXG4gIHByaXZhdGUgX2J1dHRvbklzQ2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy8gQSBzdGF0aWMgdmFyaWFibGUgdG8gaG9sZCBleGVjdXRpb24gcHJvcGVydGllcyBmaWxlIGVpdGhlciBmcm9tIHRoZSBhc3NldHMgZm9sZGVyIG9yIHRoZSBVUkwgcHJvdmlkZWQgYnkgdGhlIGN1c3RvbWVyLlxyXG4gIHByaXZhdGUgc3RhdGljIF9leGVjdXRpb25Qcm9wZXJ0aWVzRmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgXHJcbiAgLy8gQSBzdGF0aWMgdmFyaWFibGUgdG8gaG9sZCBhc3NldHMgVVJMLCBoYXZpbmcgZGVmYXVsdCB2YWx1ZSBvZiBhc3NldHMgZm9sZGVyLlxyXG4gIHByaXZhdGUgc3RhdGljIGFzc2V0c1VSTDogc3RyaW5nID0gXCIuL2Fzc2V0c1wiO1xyXG5cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IENsaWVudE1hbmFnZXIge1xyXG4gICAgaWYgKENsaWVudE1hbmFnZXIuX2luc3RhbmNlID09PSBudWxsKVxyXG4gICAgICBDbGllbnRNYW5hZ2VyLl9pbnN0YW5jZSA9IG5ldyBDbGllbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgcmV0dXJuIENsaWVudE1hbmFnZXIuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEFkZEV2ZW50KGd1aUV2ZW50OiBJR3VpRXZlbnQpOiB2b2lkIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+TUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5HZXRUYXNrQnlJRChndWlFdmVudC5UYXNrSUQpO1xyXG4gICAgbGV0IGxpbmVJZHg6IG51bWJlciA9ICtndWlFdmVudC5MaW5lO1xyXG4gICAgbGV0IGR2Um93SWR4OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh0YXNrICE9IG51bGwpIHtcclxuICAgICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKGd1aUV2ZW50LkNvbnRyb2xOYW1lICE9PSBudWxsKVxyXG4gICAgICAgIGNvbnRyb2wgPSB0YXNrLmdldEZvcm0oKS5HZXRDdHJsKGd1aUV2ZW50LkNvbnRyb2xOYW1lKTtcclxuXHJcbiAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgZHY6IERhdGFWaWV3ID0gPERhdGFWaWV3PnRhc2suRGF0YVZpZXc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuSXNUYWJsZUNoaWxkKSB7XHJcbiAgICAgICAgICBsaW5lSWR4IC09IGR2LlJlY29yZHNCZWZvcmVDdXJyZW50VmlldztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChndWlFdmVudC5FdmVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICBjYXNlIFwiY29sdW1uU29ydFwiOlxyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5pc0NvbHVtblNvcnRhYmxlKCkpIHtcclxuICAgICAgICAgICAgICBFdmVudHMuT25Db2x1bW5DbGljayhjb250cm9sLCBndWlFdmVudC5MaW5lLCBndWlFdmVudC5Db250cm9sTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XHJcbiAgICAgICAgICAgIC8vIERlZmVjdCAxNTIyODggJiBEZWZlY3QgMTUyMjY4OiBQcm9ibGVtOiBXaGVuIGJ1dHRvbiBpcyBjbGlja2VkLCB3ZSBnZXQgZm9jdXMgZXZlbnQgZmlyc3QgYW5kIGlmIG1lc3NhZ2VCb3ggaXMgb3BlbmVkIGhlcmUgbGlrZSB2ZXJpZnksIGV0Yy5cclxuICAgICAgICAgICAgLy8gd2UgZG8gbm90IHJlY2VpdmUgY2xpY2sgZXZlbnQuIEhlbmNlIGV2ZW50cyBhcmUgbm90IHByb2Nlc3NlZC4gU29sdXRpb246IFdlIGRvIG5lZWQgY2xpY2sgaGFuZGxpbmcgZm9yIGJ1dHRvbiBhcyBpdCBpcyBjYWxsZWQgd2hlbiB3ZSBwYXJrXHJcbiAgICAgICAgICAgIC8vIG9uIGJ1dHRvbiBhbmQgcHJlc3Mgc3BhY2Uga2V5LiBXZSBuZWVkIGZvY3VzIGV2ZW50IGhhbmRsaW5nIGZvciBleGVjdXRpbmcgQ1AgJiBDUyB3aGVuIHBhcmtlZCBvbiBidXR0b24gYnkgdGFiIGtleS4gU28gd2UgbmVlZCB0byBtYW5hZ2VcclxuICAgICAgICAgICAgLy8gaG93IGNsaWNrIGlzIGhhbmRsZWQuIFdlIGRvIG5vdCBuZWVkIGZvY3VzIGV2ZW50IGhhbmRsaW5nIHdoZW4gd2UgY2xpY2sgb24gYnV0dG9uLCBzbyBvbiBtb3VzZWRvd24sIHNldCBhIGZsYWcgd2hpY2ggd2lsbCBiZSB1c2VkIGluIGZvY3VzXHJcbiAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsaW5nIHRvIHNraXAgaXRzIGhhbmRsaW5nLiBUaGVuIHdlIHdpbGwgcmVjZWl2ZSBjbGljayBldmVudCB3aGVyZSB0aGlzIHdpbGwgYmUgYWN0dWFsbHkgaGFuZGxlZCBhbmQgaGVuY2Ugd29yay5cclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNCdXR0b24oKSB8fCAoY29udHJvbC5Db25uZWN0ZWRDb250cm9sICYmIGd1aUV2ZW50LmZyb21CdXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYnV0dG9uSXNDbGlja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghY29udHJvbC5pc1N1YmZvcm0oKSlcclxuICAgICAgICAgICAgICBFdmVudHMuR2V0UnVudGltZUNvbnRleHQoTWFuYWdlci5HZXRDdXJyZW50Q29udGV4dElEKCkpLkxhc3RDbGlja2VkQ3RybE5hbWUgPSBjb250cm9sLmdldE5hbWUoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBcImNsaWNrXCI6XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLmlzQnV0dG9uKCkgfHwgKGNvbnRyb2wuQ29ubmVjdGVkQ29udHJvbCAmJiBndWlFdmVudC5mcm9tQnV0dG9uKSl7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uU2VsZWN0aW9uKFwiXCIsIGNvbnRyb2wsIGxpbmVJZHgsIHRydWUpO1xyXG4gICAgICAgICAgICAgIEV2ZW50cy5HZXRSdW50aW1lQ29udGV4dChNYW5hZ2VyLkdldEN1cnJlbnRDb250ZXh0SUQoKSkuTGFzdENsaWNrZWRDdHJsTmFtZSA9IGNvbnRyb2wuZ2V0TmFtZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2J1dHRvbklzQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNvcnRpbmcgc2hvdWxkIGJlIGhhbmRsZWQgb25seSBvbiBjb2x1bW4gY2xpY2sgYW5kIG5vdCBvbiByb3dEYXRhXHJcbiAgICAgICAgICAgIC8vIGVsc2UgaWYgKGNvbnRyb2wuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ09MVU1OKSB7XHJcbiAgICAgICAgICAgIC8vICAgRXZlbnRzLk9uQ29sdW1uQ2xpY2soY29udHJvbCwgZ3VpRXZlbnQuTGluZSwgZ3VpRXZlbnQuQ29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50cy5PbkZvY3VzKGNvbnRyb2wsIGxpbmVJZHgsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICBsZXQgcHJvZHVjZUNsaWNrOiBib29sZWFuID0gY29udHJvbC5pc0J1dHRvbigpIHx8IGNvbnRyb2wuaXNUZXh0Q29udHJvbCgpIHx8IGNvbnRyb2wuaXNMYWJlbCgpIHx8IGNvbnRyb2wuaXNUYWJDb250cm9sKCkgfHwgY29udHJvbC5pc1RhYmxlQ29udHJvbCgpIHx8IGNvbnRyb2wuaXNDb21ib0JveCgpIHx8IGNvbnRyb2wuaXNJbWFnZUNvbnRyb2woKTtcclxuICAgICAgICAgICAgICBFdmVudHMuT25Nb3VzZURvd24oY29udHJvbC5nZXRGb3JtKCksIGNvbnRyb2wsIG51bGwsIHRydWUsIGxpbmVJZHgsIGZhbHNlLCBwcm9kdWNlQ2xpY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImZvY3VzXCI6XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fYnV0dG9uSXNDbGlja2VkIHx8IChjb250cm9sLkNvbm5lY3RlZENvbnRyb2wgJiYgZ3VpRXZlbnQuZnJvbUJ1dHRvbikpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gLy8gSWYgd2UgYXR0ZW1wdCB0byBwYXJrIG9uIGNvbnRyb2wgd2hlcmUgd2UgZG8gbm90IHdhbnQgdG8gYWxsb3cgdG8gcGFyayBsaWtlIGlmIGNvbnRyb2wgaGFzIGV4cHJlc3Npb24gb3IgcGFyZW50IHRhc2sgZmllbGQsIGRvIG5vdCBhbGxvdyB0byBmb2N1cyBvbiBpdC5cclxuICAgICAgICAgICAgLy8gLy8gU2V0IEZvY3VzIGJhY2sgdG8gbGFzdEZvY3VzZWRDb250cm9sLiBXZSBuZWVkIF9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wgYXMgd2UgZ2V0IGZvY3VzIGV2ZW50IG9uIGEgY29udHJvbCB0d2ljZS4gU28gdG8gYXZvaWQgdG8gc2hvdyBlcnJvciBtdWx0aXBsZSB0aW1lcyxcclxuICAgICAgICAgICAgLy8gLy8gbWFpbnRhaW4gX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbC5cclxuICAgICAgICAgICAgLy8gaWYgKGNvbnRyb2wgIT09IHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCAmJiBjb250cm9sLkhhc0V4cE9yUGFyZW50VGFza0ZpZWxkKCkpIHtcclxuICAgICAgICAgICAgLy8gICAvLyBTaG93IGVycm9yIG9ubHkgZm9yIGNvbnRyb2xzIGhhdmluZyBEYXRhIHByb3BlcnR5IGFuZCBwYXJrYWJsZVxyXG4gICAgICAgICAgICAvLyAgIGlmKGNvbnRyb2wuaXNMaXN0Qm94KCkgfHwgY29udHJvbC5pc0NoZWNrQm94KCkgfHwgY29udHJvbC5pc0NvbWJvQm94KCkgfHwgY29udHJvbC5pc1RleHRDb250cm9sKCkgfHwgY29udHJvbC5pc1JhZGlvKCkgfHwgY29udHJvbC5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgQ29tbWFuZHMubWVzc2FnZUJveChudWxsLCBcIkVycm9yXCIsIFwiQ29udHJvbCBlaXRoZXIgaGFzIGV4cHJlc3Npb24gb3IgaGFzIHBhcmVudCB0YXNrIHZhcmlhYmxlIGF0dGFjaGVkIHRvIGl0LiBGYWlsZWQgdG8gcGFyayBvbiBjb250cm9sIHdpdGggbmFtZTogXCIgKyBjb250cm9sLk5hbWUsIFN0eWxlcy5NU0dCT1hfSUNPTl9FUlJPUiB8IFN0eWxlcy5NU0dCT1hfQlVUVE9OX09LKTtcclxuICAgICAgICAgICAgLy8gICAgIC8vIERlZmVjdCAxNTI3Mjg6IFVzZSBsYXN0IGZvY3VzZWQgdGFzayBpbnN0ZWFkIGNvbnRyb2wgdGFzayBhcyBjb250cm9sIGNhbiBiZSBmcm9tIHN1YmZvcm0uXHJcbiAgICAgICAgICAgIC8vICAgICBGb2N1c01hbmFnZXIuU2V0Rm9jdXMoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpLCBMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCksIDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpID09PSBudWxsID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCA9IGNvbnRyb2w7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBFdmVudHMuT25Gb2N1cyhjb250cm9sLCBsaW5lSWR4LCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJkYmxjbGlja1wiOlxyXG4gICAgICAgICAgICBFdmVudHMuT25EYmxDbGljayhjb250cm9sLCBsaW5lSWR4KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZWRcIjpcclxuICAgICAgICAgICAgRXZlbnRzLk9uU2VsZWN0aW9uKGd1aUV2ZW50LlZhbHVlLCBjb250cm9sLCBsaW5lSWR4LCB0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxyXG4gICAgICAgICAgICBFdmVudHMuT25LZXlEb3duKCB0YXNrLmdldEZvcm0oKSwgY29udHJvbCwgZ3VpRXZlbnQubW9kaWZpZXJzLCBndWlFdmVudC5rZXlDb2RlLCAwLDAsICcnLGZhbHNlLCcnLHRydWUgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwic2V0ZXh0ZXJuYWx2YWx1ZVwiOlxyXG4gICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkFkZEV4dGVybmFsVmFsdWVFdmVudCgoPE1nQ29udHJvbD5jb250cm9sKSwgZ3VpRXZlbnQuZXh0ZXJuYWxWYWx1ZSwgZ3VpRXZlbnQucGFyYW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidW5oYW5kbGVkIGV2ZW50OiBcXFwiXCIgKyBndWlFdmVudC5FdmVudFR5cGUgKyBcIlxcXCJcIik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGd1aUV2ZW50LkV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImZvY3VzT25Ob25NYWdpY0NvbnRyb2xcIjpcclxuICAgICAgICAgICAgY29udHJvbCA9IExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBFdmVudHMuT25Gb2N1c09uTm9uTWFnaWNDb250cm9sKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImNsaWNrXCI6XHJcbiAgICAgICAgICAgIGlmKGd1aUV2ZW50LkNvbnRyb2xOYW1lID09PSBcIm1hZ2ljUm93XCIpIHtcclxuICAgICAgICAgICAgICBkdlJvd0lkeCA9IGd1aUV2ZW50LkxpbmUgLSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlJlY29yZHNCZWZvcmVDdXJyZW50VmlldztcclxuICAgICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLmFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kTGluZSh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCwgZHZSb3dJZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIm5hdmlnYXRlSW5UYWJsZVwiOlxyXG4gICAgICAgICAgICBpZiAoZ3VpRXZlbnQuQ29udHJvbE5hbWUgPT09IFwibWFnaWNSb3dcIilcclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRlSW5Sb3dFdmVudCh0YXNrLCBndWlFdmVudC5WYWx1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImNsb3NlXCI6XHJcbiAgICAgICAgICAgIGlmICh0YXNrLklzUm91dGUoKSlcclxuICAgICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkFkZFJvdXRlckNsb3NlZEV2ZW50KHRhc2spO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgRXZlbnRzLkNsb3NlRm9ybUV2ZW50KHRhc2suZ2V0Rm9ybSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiZGlzcG9zZVwiOlxyXG4gICAgICAgICAgICBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLmRlbGV0ZU1HRGF0YVRyZWUodGFzay5nZXRNZ2RJRCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwicmVzaXplXCI6XHJcbiAgICAgICAgICAgIEV2ZW50cy5UYWJsZVJlc2l6ZUV2ZW50KHRhc2suZ2V0Rm9ybSgpLmdldFRhYmxlQ3RybCgpLCBndWlFdmVudC5QYWdlU2l6ZSk7XHJcbiAgICAgICAgICAvL2Nhc2UgJ2JyZWFrJyBpcyBtaXNzaW5nIGZvciAncmVzaXplJyB3aXRoIGludGVudGlvbiB0byBleGVjdXRlIGdldFJvd3Mgd2l0aCB0aGUgZGVzaXJlZCBkYXRhdmlldyByb3cgaW5kZXguXHJcbiAgICAgICAgICBjYXNlIFwiZ2V0Um93c1wiOlxyXG4gICAgICAgICAgICBkdlJvd0lkeCA9IGxpbmVJZHggLSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlJlY29yZHNCZWZvcmVDdXJyZW50VmlldztcclxuICAgICAgICAgICAgbGV0IGxhc3RGb2N1c2VkVmFsOiBMYXN0Rm9jdXNlZFZhbCA9IHtndWlNZ0NvbnRyb2w6IHRhc2suZ2V0Rm9ybSgpLmdldFRhYmxlQ3RybCgpLCBMaW5lOiBkdlJvd0lkeCwgVmFsOiBcIlwifTtcclxuICAgICAgICAgICAgRXZlbnRzLk9uR2V0Um93c0RhdGEodGFzay5nZXRGb3JtKCkuZ2V0VGFibGVDdHJsKCksIGR2Um93SWR4LCB0cnVlLCBsYXN0Rm9jdXNlZFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIlJvdXRlck5hdmlnYXRlXCI6XHJcbiAgICAgICAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuQWRkUm91dGVFdmVudCh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCQ0xJRU5UX1JPVVRFLCBndWlFdmVudC5Sb3V0ZXJQYXRoLCBndWlFdmVudC5Sb3V0ZXJPdXRsZXROYW1lLFxyXG4gICAgICAgICAgICAgIGd1aUV2ZW50LlJvdXRlclBhcmFtcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInNldGV4dGVybmFsdmFsdWVcIjpcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIlVuYWJsZSB0byBmaW5kIHswfTogVHJ5aW5nIHRvIHNldCB2YWx1ZSBmb3IgYSBub24tZXhpc3RpbmcgY29udHJvbC5cIiwgZ3VpRXZlbnQuQ29udHJvbE5hbWUpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggXCJ1bmhhbmRsZWQgZXZlbnQ6IFxcXCJcIiArIGd1aUV2ZW50LkV2ZW50VHlwZSArIFwiXFxcIlwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIC8vdGFzayA9PSBudWxsXHJcbiAgICAgIHN3aXRjaCAoZ3VpRXZlbnQuRXZlbnRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImNvbmZpcm1hdGlvbkNsb3NlZFwiOlxyXG4gICAgICAgICAgdGhpcy5Db25maXJtYXRpb25DbG9zZWQoZ3VpRXZlbnQua2V5Q29kZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0ZUluUm93RXZlbnQodGFzazogVGFzaywgZXZ0OiBzdHJpbmcpIHtcclxuICAgIGxldCBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OT05FO1xyXG4gICAgZXZ0ID0gZXZ0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChldnQpIHtcclxuICAgICAgY2FzZSBcImJlZ2luLXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJwcmV2aW91cy1wYWdlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX1BSVlBBR0U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiZW5kLXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJuZXh0LXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfTlhUUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJwcmV2aW91cy1saW5lXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX1BSVkxJTkU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwibmV4dC1saW5lXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX05YVExJTkU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiYmVnaW4tdGFibGVcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHVEJMO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcImVuZC10YWJsZVwiOlxyXG4gICAgICAgIGludGVybmFsRXZ0ID0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9FTkRUQkw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGludGVybmFsRXZ0ICE9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OT05FKVxyXG4gICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLmFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlKHRhc2ssIGludGVybmFsRXZ0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmFpc2UgY2FsbGJhY2sgb24gY2xvc2luZyBjb25maXJtYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENvbmZpcm1hdGlvbkNsb3NlZChyZXM6IG51bWJlcik6IHZvaWRcclxuICB7XHJcbiAgICBDb21tYW5kcy5SZXNvbHZlUHJvbWlzZShyZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB0aGUgd29yayB0aHJlYWQncyBlbnRyeSBtZXRob2RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIFdvcmtUaHJlYWRFeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoTG9nZ2VyLkluc3RhbmNlLlNob3VsZExvZygpKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiXCIsIHRydWUpO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIlN0YXJ0ZWQgb24gXCIgKyBEYXRlVGltZVV0aWxzLlRvU3RyaW5nKERhdGVUaW1lLk5vdywgWE1MQ29uc3RhbnRzLkVSUk9SX0xPR19EQVRFX0ZPUk1BVCwgTG9nZ2VyLkluc3RhbmNlKSwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuV3JpdGVFeGVjdXRpb25Qcm9wZXJ0aWVzVG9Mb2coKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoYXdhaXQgQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLlN0YXJ0U2Vzc2lvbigpKSB7XHJcbiAgICAgICAgbGV0IG1nRGF0YVRhYjogTUdEYXRhQ29sbGVjdGlvbiA9IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2U7XHJcbiAgICAgICAgbGV0IHN0YXJ0dXBNZ0RhdGE6IE1HRGF0YSA9IG1nRGF0YVRhYi5TdGFydHVwTWdEYXRhO1xyXG4gICAgICAgIG1nRGF0YVRhYi5jdXJyTWdkSUQgPSBzdGFydHVwTWdEYXRhLkdldElkKCk7XHJcblxyXG4gICAgICAgIGxldCBub25JbnRlcmFjdGl2ZVRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgICAgIGlmICghc3RhcnR1cE1nRGF0YS5Jc0Fib3J0aW5nKVxyXG4gICAgICAgICAgbm9uSW50ZXJhY3RpdmVUYXNrID0gYXdhaXQgVGFzay5TdGFydFByb2dyYW0oZmFsc2UsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbkludGVyYWN0aXZlVGFzayA9PT0gbnVsbClcclxuICAgICAgICAgIGF3YWl0IEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuRXZlbnRzTG9vcChzdGFydHVwTWdEYXRhKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLk5vbkludGVyYWN0aXZlRXZlbnRzTG9vcChzdGFydHVwTWdEYXRhLCBub25JbnRlcmFjdGl2ZVRhc2spO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhlIFwiZW5kIG9mIHdvcmtcIiBmbGFnIG9ubHkgZm9yIHRoZSBtYWluIHdpbmRvd1xyXG4gICAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2Uuc2V0RW5kT2ZXb3JrKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgICBsZXQgaXNOb1Jlc3VsdEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU2VydmVyRXJyb3IgJiYgKDxTZXJ2ZXJFcnJvcj5leCkuR2V0Q29kZSgpID09PSBTZXJ2ZXJFcnJvci5JTkZfTk9fUkVTVUxUKVxyXG4gICAgICAgICAgaXNOb1Jlc3VsdEVycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFpc05vUmVzdWx0RXJyb3IpXHJcbiAgICAgICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLlByb2Nlc3NBYm9ydGluZ0Vycm9yKGV4KTtcclxuXHJcbiAgICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5zZXRFbmRPZldvcmsodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGF3YWl0IEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuQ2hlY2tBbmRTaG93U3Bpbm5lcihmYWxzZSk7XHJcblxyXG4gICAgICBDb21tYW5kcy5hZGRHbG9iYWxDb21tYW5kKENvbW1hbmRUeXBlLkVYSVRfTUFHSUMpO1xyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBXcml0ZSBFeGVjdXRpb24gcHJvcGVydGllcyB0byBsb2cuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBXcml0ZUV4ZWN1dGlvblByb3BlcnRpZXNUb0xvZygpOiB2b2lkIHtcclxuICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuU2hvdWxkTG9nU2VydmVyUmVsYXRlZE1lc3NhZ2VzKCkpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlVG9Mb2coXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiLCB0cnVlKTtcclxuICAgICAgLy8gV3JpdGUgaGVhZGluZ1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIkV4ZWN1dGlvbiBQcm9wZXJ0aWVzOlwiLCB0cnVlKTtcclxuXHJcbiAgICAgIGxldCBwcm9wc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KFNlcnZlckNvbmZpZy5JbnN0YW5jZSk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKHByb3BzU3RyaW5nLCB0cnVlKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBDbGllbnRNYW5hZ2VyLl9leGVjdXRpb25Qcm9wZXJ0aWVzRmlsZU5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlNlcnZlckNvbmZpZ1VSTFwiKSA/PyBcIi4vYXNzZXRzL3NlcnZlci1jb25maWcuanNvblwiO1xyXG4gICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLkluaXQoUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuUkNfTk9fQ09OVEVYVF9JRCk7XHJcbiAgICBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuSW5pdChNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlKTtcclxuICAgIExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5MYXN0QWN0aW9uVGltZSA9IE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCk7XHJcblxyXG5cclxuICAgIFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLlNob3VsZFNjcmFtYmxlQW5kVW5zY3JhbWJsZU1lc3NhZ2VzID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgLy8gVE9ETzogSG93IHRvIGdldCBQcm9jZXNzLkdldEN1cnJlbnRQcm9jZXNzKCkuSWQ/XHJcbiAgICB0aGlzLl9nbG9iYWxVbmlxdWVTZXNzaW9uSWQgPSBVbmlxdWVJRFV0aWxzLkdldFVuaXF1ZU1hY2hpbmVJRCgpICsgXCJfXCI7IC8vICsgUHJvY2Vzcy5HZXRDdXJyZW50UHJvY2VzcygpLklkO1xyXG5cclxuICAgIHRoaXMuUmVnaXN0ZXJEZWxlZ2F0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gSW5pdGlhbGl6ZSB0aGUgZGF0YSBuZWVkZWQgYnkgdGhlIGd1aSBsaWJyYXJ5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IENsaWVudE1hbmFnZXIgaW5zdGFuY2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBJbml0R3VpTWFuYWdlcigpOiB2b2lkIHtcclxuICAgIE1hbmFnZXIuRXZlbnRzTWFuYWdlciA9IEV2ZW50c01hbmFnZXIuSW5zdGFuY2U7XHJcbiAgICBNYW5hZ2VyLkRlZmF1bHRTZXJ2ZXJOYW1lID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLmdldFNlcnZlcigpO1xyXG4gICAgTWFuYWdlci5EZWZhdWx0UHJvdG9jb2wgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0UHJvdG9jb2woKTtcclxuICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuSW5zdGFuY2U7XHJcbiAgICBHdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZSA9IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2U7XHJcbiAgICBSdW50aW1lQ29udGV4dEJhc2Uubm9Db250ZXh0SWQgPSBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5SQ19OT19DT05URVhUX0lEO1xyXG4gIH1cclxuXHJcbiAgLy8vIEluaXRpYWxpemUgZ2xvYmFsIGRhdGEgaW4gb2JqZWN0cyB1c2VkIHRvIG92ZXJjb21lIHRoZSBjaXJjdWxhciByZWZlcmVuY2VzIGlzc3VlXHJcbiAgcHJpdmF0ZSBJbml0Q2lyY3VsYXJSZWZlcmVuY2VzQnlwYXNzZXMoKSB7XHJcbiAgICBUYXNrc1RhYmxlLmNyZWF0ZU5ld3Rhc2sgPSBUYXNrLkNyZWF0ZVRhc2s7XHJcbiAgICBPcGVuVVJMQ29tbWFuZC5jcmVhdGVOZXdDb21tYW5kc1RhYmxlID0gQ29tbWFuZHNUYWJsZS5jcmVhdGVDb21tYW5kc1RhYmxlO1xyXG5cclxuICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyID0gRXZlbnRzTWFuYWdlci5JbnN0YW5jZTtcclxuICAgIEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZSA9IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2U7XHJcbiAgICBBY2Nlc3NIZWxwZXIuZW52UGFyYW1zVGFibGUgPSBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZTtcclxuICAgIEFjY2Vzc0hlbHBlci5nbG9iYWxQYXJhbXMgPSBHbG9iYWxQYXJhbXMuSW5zdGFuY2U7XHJcbiAgICBBY2Nlc3NIZWxwZXIubGFuZ3VhZ2VEYXRhID0gTGFuZ3VhZ2VEYXRhLkluc3RhbmNlO1xyXG4gICAgQWNjZXNzSGVscGVyLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuSW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEVudHJ5IHBvaW50IHRvIHRoZSBXZWIgQ2xpZW50IDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJhcmdzXCI+YXJyYXkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50czwvcGFyYW0+XHJcbiAgc3RhdGljIE1haW4oaHR0cENsaWVudDogSHR0cENsaWVudCwgYXJnczogTWFwPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xyXG4gICAgbGV0IHZhbDogRXhwVmFsO1xyXG5cclxuICAgIGFyZ3MuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICB2YWwgPSBuZXcgRXhwVmFsKFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEsIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgIEdsb2JhbFBhcmFtcy5JbnN0YW5jZS5zZXRWYWx1ZShrZXksIG5ldyBNaXJyb3JFeHBWYWwodmFsKSwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUT0RPIDogQ2hlY2sgaG93IHRvIGxvYWQgZnJvbSBTdHVkaW8gaS5lLiBGN1xyXG4gICAgLy8gaWYgKGFyZ3MubGVuZ3RoICE9PSAwICYmIE5TdHJpbmcuU3RhcnRzV2l0aChhcmdzWzBdLCBcIi9zcGF3bmFoZWFkXCIpKSB7XHJcbiAgICAvLyAgIENsaWVudE1hbmFnZXIuX3N0YXJ0ZWRGcm9tU3R1ZGlvID0gdHJ1ZTtcclxuICAgIC8vICAgU3R1ZGlvTGF1bmNoZXIuSW5pdChhcmdzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2VcclxuICAgIENsaWVudE1hbmFnZXIuU3RhcnRFeGVjdXRpb24oaHR0cENsaWVudCk7XHJcblxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLkZsdXNoKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFRlcm1pbmF0ZSB0aGUgY2xpZW50IGFuZCB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBTdG9wRXhlY3V0aW9uKCk6IFByb21pc2UgPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSXNBYm9ydGluZ01hZ2ljRW5naW5lID0gdHJ1ZTtcclxuICAgICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLkNsb3NpbmdGb3JtVUkgPSB0cnVlO1xyXG5cclxuICAgICAgYXdhaXQgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLmVuZFRhc2sodHJ1ZSwgZmFsc2UsXHJcbiAgICAgICAgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4Mykge1xyXG4gICAgICBpZiAoZXgzIGluc3RhbmNlb2YgQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleDMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aHJvdyBleDM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgU3RhcnRFeGVjdXRpb24oaHR0cENsaWVudDpIdHRwQ2xpZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBIdHRwTWFuYWdlci5zZXROYXRpdmVIdHRwQ2xpZW50KGh0dHBDbGllbnQpO1xyXG4gICAgbGV0IGxvYWRlZDogYm9vbGVhbiA9IGF3YWl0IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuTG9hZEV4ZWN1dGlvblByb3BzKCk7XHJcblxyXG4gICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICBuZXcgR3VpRXZlbnRzUHJvY2Vzc29yKCk7XHJcbiAgICAgIENsaWVudE1hbmFnZXIuSW5zdGFuY2UuSW5pdEd1aU1hbmFnZXIoKTtcclxuICAgICAgQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Jbml0Q2lyY3VsYXJSZWZlcmVuY2VzQnlwYXNzZXMoKTtcclxuICAgICAgbGV0IHZlcnNpb25TdHJpbmcgPSBDdXJyZW50Q2xpZW50VmVyc2lvbiA9PT0gICcwLjAuMC4wJyA/IFwiRGV2ZWxvcG1lbnQgbW9kZVwiIDogXCJWZXJzaW9uIDogXCIgKyBDdXJyZW50Q2xpZW50VmVyc2lvbiA7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIk1hZ2ljIFdlYiBDbGllbnQuIFwiICsgdmVyc2lvblN0cmluZyk7XHJcblxyXG4gICAgICBIdHRwTWFuYWdlci5HZXRJbnN0YW5jZSgpLkh0dHBDb21tdW5pY2F0aW9uVGltZW91dE1TID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLkdldEZpcnN0SHR0cFJlcXVlc3RUaW1lb3V0KCk7XHJcblxyXG4gICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkluaXQoKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Jbml0aWFsaXplKFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLkdldEluc3RhbmNlKCkucGFyc2VMb2dMZXZlbChTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0SW50ZXJuYWxMb2dMZXZlbCgpKSxmYWxzZSk7XHJcblxyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSBuZXcgTUdEYXRhKFxyXG4gICAgICAgIG5ldyBDb21tYW5kc1RhYmxlKCksXHJcbiAgICAgICAgbmV3IENvbW1hbmRzVGFibGUoKSxcclxuICAgICAgICAwLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgIGF3YWl0IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuYWRkTUdEYXRhKG1nZCwgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICBhd2FpdCBDbGllbnRNYW5hZ2VyLkluc3RhbmNlLldvcmtUaHJlYWRFeGVjdXRpb24oKTtcclxuXHJcbiAgICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuU2hvdWxkTG9nKCkpIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhPU0Vudmlyb25tZW50LkVvbFNlcSArIFwiRW5kZWQgb24gXCIgKyBEYXRlVGltZVV0aWxzLlRvU3RyaW5nKERhdGVUaW1lLk5vdywgWE1MQ29uc3RhbnRzLkVSUk9SX0xPR19EQVRFX0ZPUk1BVCwgTG9nZ2VyLkluc3RhbmNlKSArIE9TRW52aXJvbm1lbnQuRW9sU2VxICsgT1NFbnZpcm9ubWVudC5Fb2xTZXEsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICBhd2FpdCBHVUlNYW5hZ2VyLkluc3RhbmNlLk1lc3NhZ2VCb3goXCJFcnJvclwiLCBcIkZhaWxlZCB0byBsb2FkIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgKFwiICsgdGhpcy5fZXhlY3V0aW9uUHJvcGVydGllc0ZpbGVOYW1lICsgXCIpXCIsIFN0eWxlcy5NU0dCT1hfSUNPTl9FUlJPUiB8IFN0eWxlcy5NU0dCT1hfQlVUVE9OX09LKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gTG9hZHMgdGhlIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGZpbGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLFxyXG4gIC8vLyBhcHBsaWNhdGlvbiBhbmQgcHJvZ3JhbSB0byBleGVjdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBMb2FkRXhlY3V0aW9uUHJvcHMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyByZXR1cm4gdHJ1ZSwgaWYgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cclxuICAgIGxldCByZXNwb25zZTogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBzdWNjZWVkZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGlzRXJyb3IgY2Fubm90IGJlIHRydWUgaGVyZSwgYmVjYXVzZSBpdCBpcyByZXR1cm5lZCBieSBydW50aW1lIGVuZ2luZSBhbmQgdG8gcmVhZCBleGVjdXRpb24gcHJvcGVydGllcywgd2UgZG8gbm90IHJlYWNoIHRoZSBlbmdpbmUuXHJcbiAgICAgIGxldCBpc0Vycm9yOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5HZXRDb250ZW50KENsaWVudE1hbmFnZXIuX2V4ZWN1dGlvblByb3BlcnRpZXNGaWxlTmFtZSwgbnVsbCwgZmFsc2UsIGlzRXJyb3IpO1xyXG4gICAgICBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuSW5pdChKU09OLnBhcnNlKHJlc3BvbnNlKSk7XHJcblxyXG4gICAgICBsZXQgYXNzZXRzVVJMID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLmdldEFzc2V0c1VSTCgpO1xyXG5cclxuICAgICAgaWYoYXNzZXRzVVJMICE9PSBudWxsKXtcclxuICAgICAgICBDbGllbnRNYW5hZ2VyLmFzc2V0c1VSTCA9IGFzc2V0c1VSTDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB3aW5kb3cuYXNzZXRzVVJMID0gQ2xpZW50TWFuYWdlci5hc3NldHNVUkw7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgc3VjY2VlZGVkID0gZmFsc2U7XHJcbiAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSB3cml0ZSB0aGUgZXJyb3IgbWVzc2FnZSB0byBsb2c/XHJcbiAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJyb3dzZXI/XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1Y2NlZWRlZDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pmdsb2JhbCB1bmlxdWUgSUQgb2YgdGhlIHNlc3Npb24gPSAnbWFjaGluZSB1bmlxdWUgSUQnICsgJ3Byb2Nlc3MgSUQnPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0R2xvYmFsVW5pcXVlU2Vzc2lvbklEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2xvYmFsVW5pcXVlU2Vzc2lvbklkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgY29udHJvbCdzIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljICBHZXRDb250cm9sUGljdHVyZU1hc2sodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBQSUNcclxuICB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz5NR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcblxyXG4gICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG5cclxuICAgIGlmIChjb250cm9sTmFtZSAhPT0gbnVsbCAmJiB0YXNrICE9IG51bGwpIHtcclxuICAgICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgICAgcGljID0gY29udHJvbC5nZXRQSUMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGljO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBmb3JtYXR0ZWQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljICBHZXRGb3JtYXR0ZWRWYWx1ZSh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz5NR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcblxyXG4gICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gICAgbGV0IG5ld1ZhbHVlOiBhbnkgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwgICYmIHRhc2sgIT09IG51bGwpXHJcbiAgICAgIGNvbnRyb2wgPSB0YXNrLmdldEZvcm0oKS5HZXRDdHJsKGNvbnRyb2xOYW1lKTtcclxuICAgIGlmIChjb250cm9sICE9IG51bGwgJiYgY29udHJvbC5EYXRhVHlwZSA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgaWYgKGNvbnRyb2wuaXNSZXBlYXRhYmxlKCkgJiYgIGNvbnRyb2wuZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQpLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICB7XHJcbiAgICAgICAgICBsZXQgcGljdmFsID0gY29udHJvbC5nZXRQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1BVCkuZ2V0UHJldlZhbHVlKCtyb3dJZCk7XHJcbiAgICAgICAgICBwaWMgPSBuZXcgUElDIChwaWN2YWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgIGNvbnRyb2wuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHBpYyA9IGNvbnRyb2wuZ2V0UElDKCk7XHJcblxyXG4gICAgICBsZXQgZGlzcFZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgbGV0ICBuZXdQaWMgPSBwaWMuZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk7XHJcblxyXG4gICAgICBsZXQgbnVtID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50b051bShkaXNwVmFsdWUsIG5ld1BpYywgMCk7XHJcbiAgICAgIG5ld1ZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5mcm9tTnVtKG51bSwgcGljKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgcmFuZ2VkIHZhbHVlIGZvciBpbnB1dCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljICBHZXRSYW5nZWRWYWx1ZSh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZ1xyXG4gIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+TUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG5cclxuICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgIHJldHVybiBjb250cm9sLmdldFJhbmdlZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHVzZXIgaW5wdXQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyAgVmFsaWRhdGVDb250cm9sVmFsdWUodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZmxkIHJhbmdlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIEdldEZsZFJhbmdlcyh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC5nZXRSYW5nZXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgd2hldGhlciBjbGllbnQvc2VydmVyIGNhY2hlIGV4aXN0c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRyYW5zQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY2xpZW50VHJhbnNDYWNoZUV4aXN0czogYm9vbGVhbiA9IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRDdXJyTUdEYXRhKCkuY2xpZW50VHJhbnNhY3Rpb25DYWNoZUV4aXN0cygpO1xyXG4gICAgbGV0IHNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHM6IGJvb2xlYW4gPSBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZ2V0Q3Vyck1HRGF0YSgpLnNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50VHJhbnNDYWNoZUV4aXN0cyB8fCBzZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRXhpc3RzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTdWJzY3JpYmUgZm9yIGV2ZW50cyBkZWZpbmVkIGF0IEh0dHBDbGllbnRFdmVudHMgYW5kXHJcbiAgLy8vIGF0dGFjaCBhcHByb3ByaWF0ZSBldmVudCBoYW5kbGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSZWdpc3RlckRlbGVnYXRlcygpOiB2b2lkIHtcclxuICAgIEh0dHBDbGllbnRFdmVudHMuR2V0RXhlY3V0aW9uUHJvcGVydHlfRXZlbnQgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuR2V0RXhlY3V0aW9uUHJvcGVydHkuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRSdW50aW1lQ3R4SURfRXZlbnQgPSB0aGlzLkdldFJ1bnRpbWVDdHhJRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRHbG9iYWxVbmlxdWVTZXNzaW9uSURfRXZlbnQgPSB0aGlzLkdldEdsb2JhbFVuaXF1ZVNlc3Npb25JRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5TaG91bGREaXNwbGF5R2VuZXJpY0Vycm9yX0V2ZW50ID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLlNob3VsZERpc3BsYXlHZW5lcmljRXJyb3IuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXRyaWV2ZXMgcnVudGltZSBjb250ZXh0IElEXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ1bnRpbWVDdHhJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5Db250ZXh0SUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNlbmQgYSByZXF1ZXN0IHRvIHNlcnZlciB0byB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgdXNpbmcgZmV0Y2ggQVBJIHdpdGgga2VlcC1hbGl2ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRlcm1pbmF0ZUNvbnRleHRVc2luZ0ZldGNoQVBJKCk6IHZvaWQge1xyXG5cclxuICAgIC8vIElmIFNlc3Npb24gaXMgcmUtaW5pdGlhbGl6aW5nIG1lYW5zIHRoZSBjb250ZXh0IGlzIG5vdCBmb3VuZCBhdCBzZXJ2ZXIuXHJcbiAgICAvLyB0aGVuIHRoZXJlIGlzIG5vIHBvaW50IGluIHRlcm1pbmF0aW5nIGNvbnRleHQuXHJcbiAgICBpZiAoUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuSXNTZXNzaW9uUmVJbml0aWFsaXppbmcpXHJcbiAgICAgIHJldHVybjtcclxuICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSXNBYm9ydGluZ01hZ2ljRW5naW5lID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEdWUgdG8gcGF5bG9hZCBsaW1pdCBvZiBmZXRjaCBBUEksIHNlbmQgb25seSB0aGUgY29udGV4dCB0ZXJtaW5hdGlvbiBjb21tYW5kIHRvIHNlcnZlclxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkNsZWFyKCk7XHJcblxyXG4gICAgbGV0IGNvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZDogQ29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuXHJcbiAgICBDcmVhdGVDb250ZXh0VGVybWluYXRpb25FdmVudENvbW1hbmQoTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLmdldFRhc2tUYWcoKSk7XHJcblxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkFkZCg8SUNsaWVudENvbW1hbmQ+Y29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kKTtcclxuXHJcbiAgICAvLyByZXNwb25zZSBuZWVkIG5vdCB0byBiZSBoYW5kbGVkIGFzIHRoZSBicm93c2VyIHVubG9hZCBjYW5ub3QgYmUgc3RvcHBlZCwgc28gbm8gbmVlZCB0byB3YWl0XHJcbiAgICBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5PTkxZX0NPTU1BTkRTKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0QXNzZXRzVVJMKCk6IHN0cmluZ3tcclxuICAgIHJldHVybiBDbGllbnRNYW5hZ2VyLmFzc2V0c1VSTDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpZW50TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvQ2xpZW50TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RixPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsY0FBYyxFQUVkLE9BQU8sRUFFUCxHQUFHLEVBQUUsYUFBYSxFQUNsQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLE1BQU0sRUFDUCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUc5QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLGFBQWEs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VCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBR3ZELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0QsSUFBSSw4QkFBOEIsR0FBbUMsY0FBYztZQUNuRixvQ0FBb0MsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFMUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQWlCLDhCQUE4QixDQUFDLENBQUM7UUFHM0csdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFTSxNQUFNLENBQUMsWUFBWTtRQUN4QixPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIERhdGVUaW1lLCBOU3RyaW5nLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5cclxuaW1wb3J0IHtcclxuICBEYXRlVGltZVV0aWxzLFxyXG4gIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBNaXNjLFxyXG4gIE9TRW52aXJvbm1lbnQsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBYTUxDb25zdGFudHNcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBDb21tYW5kVHlwZSxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV2ZW50cyxcclxuICBHdWlEYXRhQ29sbGVjdGlvbixcclxuICBHdWlFbnZpcm9ubWVudCxcclxuICBMYXN0Rm9jdXNlZFZhbCxcclxuICBNYW5hZ2VyLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgUElDLCBQcm9wSW50ZXJmYWNlLFxyXG4gIFJ1bnRpbWVDb250ZXh0QmFzZSxcclxuICBTdHlsZXMsXHJcbiAgRXhwVmFsXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge0V2ZW50c01hbmFnZXJ9IGZyb20gJy4vZXZlbnQvRXZlbnRzTWFuYWdlcic7XHJcbmltcG9ydCB7R3VpRXZlbnRzUHJvY2Vzc29yfSBmcm9tICcuL0d1aUV2ZW50c1Byb2Nlc3Nvcic7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4vZW52L0Vudmlyb25tZW50JztcclxuaW1wb3J0IHtMYW5ndWFnZURhdGF9IGZyb20gJy4vZW52L0xhbmd1YWdlRGF0YSc7XHJcbmltcG9ydCB7VGFza3NUYWJsZX0gZnJvbSAnLi90YXNrcy9UYXNrc1RhYmxlJztcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gJy4vZ3VpL01nQ29udHJvbCc7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gJy4vY29tbWFuZHMvSUNsaWVudENvbW1hbmQnO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gJy4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7TUdEYXRhQ29sbGVjdGlvbn0gZnJvbSAnLi90YXNrcy9NR0RhdGFDb2xsZWN0aW9uJztcclxuaW1wb3J0IHtVbmlxdWVJRFV0aWxzfSBmcm9tICcuL3V0aWwvVW5pcXVlSURVdGlscyc7XHJcbmltcG9ydCB7SHR0cE1hbmFnZXJ9IGZyb20gJy4vaHR0cC9IdHRwTWFuYWdlcic7XHJcbmltcG9ydCB7Q29tbWFuZHNUYWJsZX0gZnJvbSAnLi9Db21tYW5kc1RhYmxlJztcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSAnLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3InO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb259IGZyb20gJy4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlJztcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJ9IGZyb20gJy4vQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyJztcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gJy4vdGFza3MvTUdEYXRhJztcclxuaW1wb3J0IHtTZXJ2ZXJFcnJvcn0gZnJvbSAnLi9yZW1vdGUvU2VydmVyRXJyb3InO1xyXG5pbXBvcnQge0h0dHBDbGllbnRFdmVudHN9IGZyb20gJy4vaHR0cC9jbGllbnQvSHR0cENsaWVudEV2ZW50cyc7XHJcbmltcG9ydCB7SUd1aUV2ZW50fSBmcm9tICcuL2JyaWRnZS9JR3VpRXZlbnQnO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tICcuL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5JztcclxuaW1wb3J0IHtDdXJyZW50Q2xpZW50VmVyc2lvbn0gZnJvbSAnLi9DdXJyZW50Q2xpZW50VmVyc2lvbic7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gJy4vZGF0YS9EYXRhVmlldyc7XHJcbmltcG9ydCB7TGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tICcuL3J0L0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7RW52UGFyYW1zVGFibGV9IGZyb20gJy4vZW52L0VudlZhcmlhYmxlc1RhYmxlJztcclxuaW1wb3J0IHtHbG9iYWxQYXJhbXMsIE1pcnJvckV4cFZhbH0gZnJvbSAnLi9leHAvR2xvYmFsUGFyYW1zVGFibGUnO1xyXG5pbXBvcnQge09wZW5VUkxDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL1NlcnZlclRvQ2xpZW50L09wZW5VUkxDb21tYW5kJztcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gJy4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4vQWNjZXNzSGVscGVyJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7Q29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7R1VJTWFuYWdlcn0gZnJvbSBcIi4vR1VJTWFuYWdlclwiO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIENsaWVudE1hbmFnZXIge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IENsaWVudE1hbmFnZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX2dsb2JhbFVuaXF1ZVNlc3Npb25JZDogc3RyaW5nID0gbnVsbDtcclxuLy8gIHByaXZhdGUgX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7IC8vIGNvbnRyb2wgd2hlcmUgbGFzdCBwYXJraW5nIHdhcyBhdHRlbXB0ZWQgYnV0IHdlIGRpZCBub3QgcGFyayBvbiBpdFxyXG4gIHByaXZhdGUgX2J1dHRvbklzQ2xpY2tlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxpbmdGaXJzdFBhcmthYmxlQ29udHJvbCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy8gQSBzdGF0aWMgdmFyaWFibGUgdG8gaG9sZCBleGVjdXRpb24gcHJvcGVydGllcyBmaWxlIGVpdGhlciBmcm9tIHRoZSBhc3NldHMgZm9sZGVyIG9yIHRoZSBVUkwgcHJvdmlkZWQgYnkgdGhlIGN1c3RvbWVyLlxyXG4gIHByaXZhdGUgc3RhdGljIF9leGVjdXRpb25Qcm9wZXJ0aWVzRmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vIEEgc3RhdGljIHZhcmlhYmxlIHRvIGhvbGQgYXNzZXRzIFVSTCwgaGF2aW5nIGRlZmF1bHQgdmFsdWUgb2YgYXNzZXRzIGZvbGRlci5cclxuICBwcml2YXRlIHN0YXRpYyBhc3NldHNVUkw6IHN0cmluZyA9IFwiLi9hc3NldHNcIjtcclxuXHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBDbGllbnRNYW5hZ2VyIHtcclxuICAgIGlmIChDbGllbnRNYW5hZ2VyLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgQ2xpZW50TWFuYWdlci5faW5zdGFuY2UgPSBuZXcgQ2xpZW50TWFuYWdlcigpO1xyXG5cclxuICAgIHJldHVybiBDbGllbnRNYW5hZ2VyLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBBZGRFdmVudChndWlFdmVudDogSUd1aUV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQoZ3VpRXZlbnQuVGFza0lEKTtcclxuICAgIGxldCBsaW5lSWR4OiBudW1iZXIgPSArZ3VpRXZlbnQuTGluZTtcclxuICAgIGxldCBkdlJvd0lkeDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGFzayAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICAgIGlmIChndWlFdmVudC5Db250cm9sTmFtZSAhPT0gbnVsbClcclxuICAgICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChndWlFdmVudC5Db250cm9sTmFtZSk7XHJcblxyXG4gICAgICBpZiAoY29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGR2OiBEYXRhVmlldyA9IDxEYXRhVmlldz50YXNrLkRhdGFWaWV3O1xyXG4gICAgICAgIGlmIChjb250cm9sLklzVGFibGVDaGlsZCkge1xyXG4gICAgICAgICAgbGluZUlkeCAtPSBkdi5SZWNvcmRzQmVmb3JlQ3VycmVudFZpZXc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAoZ3VpRXZlbnQuRXZlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgY2FzZSBcImNvbHVtblNvcnRcIjpcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNDb2x1bW5Tb3J0YWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uQ29sdW1uQ2xpY2soY29udHJvbCwgZ3VpRXZlbnQuTGluZSwgZ3VpRXZlbnQuQ29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxyXG4gICAgICAgICAgICAvLyBEZWZlY3QgMTUyMjg4ICYgRGVmZWN0IDE1MjI2ODogUHJvYmxlbTogV2hlbiBidXR0b24gaXMgY2xpY2tlZCwgd2UgZ2V0IGZvY3VzIGV2ZW50IGZpcnN0IGFuZCBpZiBtZXNzYWdlQm94IGlzIG9wZW5lZCBoZXJlIGxpa2UgdmVyaWZ5LCBldGMuXHJcbiAgICAgICAgICAgIC8vIHdlIGRvIG5vdCByZWNlaXZlIGNsaWNrIGV2ZW50LiBIZW5jZSBldmVudHMgYXJlIG5vdCBwcm9jZXNzZWQuIFNvbHV0aW9uOiBXZSBkbyBuZWVkIGNsaWNrIGhhbmRsaW5nIGZvciBidXR0b24gYXMgaXQgaXMgY2FsbGVkIHdoZW4gd2UgcGFya1xyXG4gICAgICAgICAgICAvLyBvbiBidXR0b24gYW5kIHByZXNzIHNwYWNlIGtleS4gV2UgbmVlZCBmb2N1cyBldmVudCBoYW5kbGluZyBmb3IgZXhlY3V0aW5nIENQICYgQ1Mgd2hlbiBwYXJrZWQgb24gYnV0dG9uIGJ5IHRhYiBrZXkuIFNvIHdlIG5lZWQgdG8gbWFuYWdlXHJcbiAgICAgICAgICAgIC8vIGhvdyBjbGljayBpcyBoYW5kbGVkLiBXZSBkbyBub3QgbmVlZCBmb2N1cyBldmVudCBoYW5kbGluZyB3aGVuIHdlIGNsaWNrIG9uIGJ1dHRvbiwgc28gb24gbW91c2Vkb3duLCBzZXQgYSBmbGFnIHdoaWNoIHdpbGwgYmUgdXNlZCBpbiBmb2N1c1xyXG4gICAgICAgICAgICAvLyBldmVudCBoYW5kbGluZyB0byBza2lwIGl0cyBoYW5kbGluZy4gVGhlbiB3ZSB3aWxsIHJlY2VpdmUgY2xpY2sgZXZlbnQgd2hlcmUgdGhpcyB3aWxsIGJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGhlbmNlIHdvcmsuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLmlzQnV0dG9uKCkgfHwgY29udHJvbC5pc0NoZWNrQm94KCkgfHwgKGNvbnRyb2wuQ29ubmVjdGVkQ29udHJvbCAmJiBndWlFdmVudC5mcm9tQnV0dG9uKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2J1dHRvbklzQ2xpY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIWNvbnRyb2wuaXNTdWJmb3JtKCkpXHJcbiAgICAgICAgICAgICAgRXZlbnRzLkdldFJ1bnRpbWVDb250ZXh0KE1hbmFnZXIuR2V0Q3VycmVudENvbnRleHRJRCgpKS5MYXN0Q2xpY2tlZEN0cmxOYW1lID0gY29udHJvbC5nZXROYW1lKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5pc0J1dHRvbigpIHx8IChjb250cm9sLkNvbm5lY3RlZENvbnRyb2wgJiYgZ3VpRXZlbnQuZnJvbUJ1dHRvbikpe1xyXG4gICAgICAgICAgICAgIEV2ZW50cy5PblNlbGVjdGlvbihcIlwiLCBjb250cm9sLCBsaW5lSWR4LCB0cnVlKTtcclxuICAgICAgICAgICAgICBFdmVudHMuR2V0UnVudGltZUNvbnRleHQoTWFuYWdlci5HZXRDdXJyZW50Q29udGV4dElEKCkpLkxhc3RDbGlja2VkQ3RybE5hbWUgPSBjb250cm9sLmdldE5hbWUoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9idXR0b25Jc0NsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIHNvcnRpbmcgc2hvdWxkIGJlIGhhbmRsZWQgb25seSBvbiBjb2x1bW4gY2xpY2sgYW5kIG5vdCBvbiByb3dEYXRhXHJcbiAgICAgICAgICAgICAgLy8gZWxzZSBpZiAoY29udHJvbC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pIHtcclxuICAgICAgICAgICAgICAvLyAgIEV2ZW50cy5PbkNvbHVtbkNsaWNrKGNvbnRyb2wsIGd1aUV2ZW50LkxpbmUsIGd1aUV2ZW50LkNvbnRyb2xOYW1lKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFdmVudHMuT25Gb2N1cyhjb250cm9sLCBsaW5lSWR4LCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgbGV0IHByb2R1Y2VDbGljazogYm9vbGVhbiA9IGNvbnRyb2wuaXNCdXR0b24oKSB8fCBjb250cm9sLmlzVGV4dENvbnRyb2woKSB8fCBjb250cm9sLmlzTGFiZWwoKSB8fCBjb250cm9sLmlzVGFiQ29udHJvbCgpIHx8IGNvbnRyb2wuaXNUYWJsZUNvbnRyb2woKSB8fCBjb250cm9sLmlzQ29tYm9Cb3goKSB8fCBjb250cm9sLmlzSW1hZ2VDb250cm9sKCk7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uTW91c2VEb3duKGNvbnRyb2wuZ2V0Rm9ybSgpLCBjb250cm9sLCBudWxsLCB0cnVlLCBsaW5lSWR4LCBmYWxzZSwgcHJvZHVjZUNsaWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJmb2N1c1wiOlxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2J1dHRvbklzQ2xpY2tlZCB8fCAoY29udHJvbC5Db25uZWN0ZWRDb250cm9sICYmIGd1aUV2ZW50LmZyb21CdXR0b24pKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIElmIHdlIGF0dGVtcHQgdG8gcGFyayBvbiBjb250cm9sIHdoZXJlIHdlIGRvIG5vdCB3YW50IHRvIGFsbG93IHRvIHBhcmsgbGlrZSBpZiBjb250cm9sIGhhcyBleHByZXNzaW9uIG9yIHBhcmVudCB0YXNrIGZpZWxkLCBkbyBub3QgYWxsb3cgdG8gZm9jdXMgb24gaXQuXHJcbiAgICAgICAgICAgIC8vIC8vIFNldCBGb2N1cyBiYWNrIHRvIGxhc3RGb2N1c2VkQ29udHJvbC4gV2UgbmVlZCBfbGFzdEZhaWxlZEZvY3VzZWRDb250cm9sIGFzIHdlIGdldCBmb2N1cyBldmVudCBvbiBhIGNvbnRyb2wgdHdpY2UuIFNvIHRvIGF2b2lkIHRvIHNob3cgZXJyb3IgbXVsdGlwbGUgdGltZXMsXHJcbiAgICAgICAgICAgIC8vIC8vIG1haW50YWluIF9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wuXHJcbiAgICAgICAgICAgIC8vIGlmIChjb250cm9sICE9PSB0aGlzLl9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wgJiYgY29udHJvbC5IYXNFeHBPclBhcmVudFRhc2tGaWVsZCgpKSB7XHJcbiAgICAgICAgICAgIC8vICAgLy8gU2hvdyBlcnJvciBvbmx5IGZvciBjb250cm9scyBoYXZpbmcgRGF0YSBwcm9wZXJ0eSBhbmQgcGFya2FibGVcclxuICAgICAgICAgICAgLy8gICBpZihjb250cm9sLmlzTGlzdEJveCgpIHx8IGNvbnRyb2wuaXNDaGVja0JveCgpIHx8IGNvbnRyb2wuaXNDb21ib0JveCgpIHx8IGNvbnRyb2wuaXNUZXh0Q29udHJvbCgpIHx8IGNvbnRyb2wuaXNSYWRpbygpIHx8IGNvbnRyb2wuaXNUYWJDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgLy8gICAgIENvbW1hbmRzLm1lc3NhZ2VCb3gobnVsbCwgXCJFcnJvclwiLCBcIkNvbnRyb2wgZWl0aGVyIGhhcyBleHByZXNzaW9uIG9yIGhhcyBwYXJlbnQgdGFzayB2YXJpYWJsZSBhdHRhY2hlZCB0byBpdC4gRmFpbGVkIHRvIHBhcmsgb24gY29udHJvbCB3aXRoIG5hbWU6IFwiICsgY29udHJvbC5OYW1lLCBTdHlsZXMuTVNHQk9YX0lDT05fRVJST1IgfCBTdHlsZXMuTVNHQk9YX0JVVFRPTl9PSyk7XHJcbiAgICAgICAgICAgIC8vICAgICAvLyBEZWZlY3QgMTUyNzI4OiBVc2UgbGFzdCBmb2N1c2VkIHRhc2sgaW5zdGVhZCBjb250cm9sIHRhc2sgYXMgY29udHJvbCBjYW4gYmUgZnJvbSBzdWJmb3JtLlxyXG4gICAgICAgICAgICAvLyAgICAgRm9jdXNNYW5hZ2VyLlNldEZvY3VzKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRMYXN0Rm9jdXNlZFRhc2soKSwgTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpLCAwLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgIExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKSA9PT0gbnVsbCA/IHRydWUgOiBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wgPSBjb250cm9sO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFDbGllbnRNYW5hZ2VyLmhhbmRsaW5nRmlyc3RQYXJrYWJsZUNvbnRyb2wpXHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uRm9jdXMoY29udHJvbCwgbGluZUlkeCwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiZGJsY2xpY2tcIjpcclxuICAgICAgICAgICAgRXZlbnRzLk9uRGJsQ2xpY2soY29udHJvbCwgbGluZUlkeCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb25jaGFuZ2VkXCI6XHJcbiAgICAgICAgICAgIEV2ZW50cy5PblNlbGVjdGlvbihndWlFdmVudC5WYWx1ZSwgY29udHJvbCwgbGluZUlkeCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcclxuICAgICAgICAgICAgRXZlbnRzLk9uS2V5RG93biggdGFzay5nZXRGb3JtKCksIGNvbnRyb2wsIGd1aUV2ZW50Lm1vZGlmaWVycywgZ3VpRXZlbnQua2V5Q29kZSwgMCwwLCAnJyxmYWxzZSwnJyx0cnVlICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInNldGV4dGVybmFsdmFsdWVcIjpcclxuICAgICAgICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5BZGRFeHRlcm5hbFZhbHVlRXZlbnQoKDxNZ0NvbnRyb2w+Y29udHJvbCksIGd1aUV2ZW50LmV4dGVybmFsVmFsdWUsIGd1aUV2ZW50LnBhcmFtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInVuaGFuZGxlZCBldmVudDogXFxcIlwiICsgZ3VpRXZlbnQuRXZlbnRUeXBlICsgXCJcXFwiXCIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3dpdGNoIChndWlFdmVudC5FdmVudFR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgXCJmb2N1c09uTm9uTWFnaWNDb250cm9sXCI6XHJcbiAgICAgICAgICAgIGNvbnRyb2wgPSBMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uRm9jdXNPbk5vbk1hZ2ljQ29udHJvbChjb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxyXG4gICAgICAgICAgICBpZihndWlFdmVudC5Db250cm9sTmFtZSA9PT0gXCJtYWdpY1Jvd1wiKSB7XHJcbiAgICAgICAgICAgICAgZHZSb3dJZHggPSBndWlFdmVudC5MaW5lIC0gKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5SZWNvcmRzQmVmb3JlQ3VycmVudFZpZXc7XHJcbiAgICAgICAgICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5hZGRHdWlUcmlnZ2VyZWRFdmVudFdpdGhUYXNrQW5kQ29kZUFuZExpbmUodGFzaywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVgsIGR2Um93SWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJuYXZpZ2F0ZUluVGFibGVcIjpcclxuICAgICAgICAgICAgaWYgKGd1aUV2ZW50LkNvbnRyb2xOYW1lID09PSBcIm1hZ2ljUm93XCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0ZUluUm93RXZlbnQodGFzaywgZ3VpRXZlbnQuVmFsdWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJjbG9zZVwiOlxyXG4gICAgICAgICAgICBpZiAodGFzay5Jc1JvdXRlKCkpXHJcbiAgICAgICAgICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5BZGRSb3V0ZXJDbG9zZWRFdmVudCh0YXNrKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIEV2ZW50cy5DbG9zZUZvcm1FdmVudCh0YXNrLmdldEZvcm0oKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImRpc3Bvc2VcIjpcclxuICAgICAgICAgICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5kZWxldGVNR0RhdGFUcmVlKHRhc2suZ2V0TWdkSUQoKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInJlc2l6ZVwiOlxyXG4gICAgICAgICAgICBFdmVudHMuVGFibGVSZXNpemVFdmVudCh0YXNrLmdldEZvcm0oKS5nZXRUYWJsZUN0cmwoKSwgZ3VpRXZlbnQuUGFnZVNpemUpO1xyXG4gICAgICAgICAgLy9jYXNlICdicmVhaycgaXMgbWlzc2luZyBmb3IgJ3Jlc2l6ZScgd2l0aCBpbnRlbnRpb24gdG8gZXhlY3V0ZSBnZXRSb3dzIHdpdGggdGhlIGRlc2lyZWQgZGF0YXZpZXcgcm93IGluZGV4LlxyXG4gICAgICAgICAgY2FzZSBcImdldFJvd3NcIjpcclxuICAgICAgICAgICAgZHZSb3dJZHggPSBsaW5lSWR4IC0gKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5SZWNvcmRzQmVmb3JlQ3VycmVudFZpZXc7XHJcbiAgICAgICAgICAgIGxldCBsYXN0Rm9jdXNlZFZhbDogTGFzdEZvY3VzZWRWYWwgPSB7Z3VpTWdDb250cm9sOiB0YXNrLmdldEZvcm0oKS5nZXRUYWJsZUN0cmwoKSwgTGluZTogZHZSb3dJZHgsIFZhbDogXCJcIn07XHJcbiAgICAgICAgICAgIEV2ZW50cy5PbkdldFJvd3NEYXRhKHRhc2suZ2V0Rm9ybSgpLmdldFRhYmxlQ3RybCgpLCBkdlJvd0lkeCwgdHJ1ZSwgbGFzdEZvY3VzZWRWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJSb3V0ZXJOYXZpZ2F0ZVwiOlxyXG4gICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkFkZFJvdXRlRXZlbnQodGFzaywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dFQkNMSUVOVF9ST1VURSwgZ3VpRXZlbnQuUm91dGVyUGF0aCwgZ3VpRXZlbnQuUm91dGVyT3V0bGV0TmFtZSxcclxuICAgICAgICAgICAgICBndWlFdmVudC5Sb3V0ZXJQYXJhbXMpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJzZXRleHRlcm5hbHZhbHVlXCI6XHJcbiAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJVbmFibGUgdG8gZmluZCB7MH06IFRyeWluZyB0byBzZXQgdmFsdWUgZm9yIGEgbm9uLWV4aXN0aW5nIGNvbnRyb2wuXCIsIGd1aUV2ZW50LkNvbnRyb2xOYW1lKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIFwidW5oYW5kbGVkIGV2ZW50OiBcXFwiXCIgKyBndWlFdmVudC5FdmVudFR5cGUgKyBcIlxcXCJcIik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSAvL3Rhc2sgPT0gbnVsbFxyXG4gICAgICBzd2l0Y2ggKGd1aUV2ZW50LkV2ZW50VHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJjb25maXJtYXRpb25DbG9zZWRcIjpcclxuICAgICAgICAgIHRoaXMuQ29uZmlybWF0aW9uQ2xvc2VkKGd1aUV2ZW50LmtleUNvZGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmF2aWdhdGVJblJvd0V2ZW50KHRhc2s6IFRhc2ssIGV2dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTk9ORTtcclxuICAgIGV2dCA9IGV2dC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAoZXZ0KSB7XHJcbiAgICAgIGNhc2UgXCJiZWdpbi1wYWdlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR1BBR0U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwicHJldmlvdXMtcGFnZVwiOlxyXG4gICAgICAgIGludGVybmFsRXZ0ID0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZQQUdFO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcImVuZC1wYWdlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0VORFBBR0U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwibmV4dC1wYWdlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX05YVFBBR0U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwicHJldmlvdXMtbGluZVwiOlxyXG4gICAgICAgIGludGVybmFsRXZ0ID0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZMSU5FO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIm5leHQtbGluZVwiOlxyXG4gICAgICAgIGludGVybmFsRXZ0ID0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9OWFRMSU5FO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcImJlZ2luLXRhYmxlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR1RCTDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJlbmQtdGFibGVcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EVEJMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnRlcm5hbEV2dCAhPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTk9ORSlcclxuICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5hZGRHdWlUcmlnZ2VyZWRFdmVudFdpdGhUYXNrQW5kQ29kZSh0YXNrLCBpbnRlcm5hbEV2dCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJhaXNlIGNhbGxiYWNrIG9uIGNsb3NpbmcgY29uZmlybWF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBDb25maXJtYXRpb25DbG9zZWQocmVzOiBudW1iZXIpOiB2b2lkXHJcbiAge1xyXG4gICAgQ29tbWFuZHMuUmVzb2x2ZVByb21pc2UocmVzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdGhlIHdvcmsgdGhyZWFkJ3MgZW50cnkgbWV0aG9kXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBXb3JrVGhyZWFkRXhlY3V0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKExvZ2dlci5JbnN0YW5jZS5TaG91bGRMb2coKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIlwiLCB0cnVlKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlVG9Mb2coXCJTdGFydGVkIG9uIFwiICsgRGF0ZVRpbWVVdGlscy5Ub1N0cmluZyhEYXRlVGltZS5Ob3csIFhNTENvbnN0YW50cy5FUlJPUl9MT0dfREFURV9GT1JNQVQsIExvZ2dlci5JbnN0YW5jZSksIHRydWUpO1xyXG4gICAgICB0aGlzLldyaXRlRXhlY3V0aW9uUHJvcGVydGllc1RvTG9nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5TdGFydFNlc3Npb24oKSkge1xyXG4gICAgICAgIGxldCBtZ0RhdGFUYWI6IE1HRGF0YUNvbGxlY3Rpb24gPSBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlO1xyXG4gICAgICAgIGxldCBzdGFydHVwTWdEYXRhOiBNR0RhdGEgPSBtZ0RhdGFUYWIuU3RhcnR1cE1nRGF0YTtcclxuICAgICAgICBtZ0RhdGFUYWIuY3Vyck1nZElEID0gc3RhcnR1cE1nRGF0YS5HZXRJZCgpO1xyXG5cclxuICAgICAgICBsZXQgbm9uSW50ZXJhY3RpdmVUYXNrOiBUYXNrID0gbnVsbDtcclxuICAgICAgICBpZiAoIXN0YXJ0dXBNZ0RhdGEuSXNBYm9ydGluZylcclxuICAgICAgICAgIG5vbkludGVyYWN0aXZlVGFzayA9IGF3YWl0IFRhc2suU3RhcnRQcm9ncmFtKGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChub25JbnRlcmFjdGl2ZVRhc2sgPT09IG51bGwpXHJcbiAgICAgICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkV2ZW50c0xvb3Aoc3RhcnR1cE1nRGF0YSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYXdhaXQgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5Ob25JbnRlcmFjdGl2ZUV2ZW50c0xvb3Aoc3RhcnR1cE1nRGF0YSwgbm9uSW50ZXJhY3RpdmVUYXNrKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRoZSBcImVuZCBvZiB3b3JrXCIgZmxhZyBvbmx5IGZvciB0aGUgbWFpbiB3aW5kb3dcclxuICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLnNldEVuZE9mV29yayh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgbGV0IGlzTm9SZXN1bHRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFNlcnZlckVycm9yICYmICg8U2VydmVyRXJyb3I+ZXgpLkdldENvZGUoKSA9PT0gU2VydmVyRXJyb3IuSU5GX05PX1JFU1VMVClcclxuICAgICAgICAgIGlzTm9SZXN1bHRFcnJvciA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICghaXNOb1Jlc3VsdEVycm9yKVxyXG4gICAgICAgICAgYXdhaXQgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5Qcm9jZXNzQWJvcnRpbmdFcnJvcihleCk7XHJcblxyXG4gICAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2Uuc2V0RW5kT2ZXb3JrKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkNoZWNrQW5kU2hvd1NwaW5uZXIoZmFsc2UpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYWRkR2xvYmFsQ29tbWFuZChDb21tYW5kVHlwZS5FWElUX01BR0lDKTtcclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gV3JpdGUgRXhlY3V0aW9uIHByb3BlcnRpZXMgdG8gbG9nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgV3JpdGVFeGVjdXRpb25Qcm9wZXJ0aWVzVG9Mb2coKTogdm9pZCB7XHJcbiAgICBpZiAoTG9nZ2VyLkluc3RhbmNlLlNob3VsZExvZ1NlcnZlclJlbGF0ZWRNZXNzYWdlcygpKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIiwgdHJ1ZSk7XHJcbiAgICAgIC8vIFdyaXRlIGhlYWRpbmdcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlVG9Mb2coXCJFeGVjdXRpb24gUHJvcGVydGllczpcIiwgdHJ1ZSk7XHJcblxyXG4gICAgICBsZXQgcHJvcHNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhwcm9wc1N0cmluZywgdHJ1ZSk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgQ2xpZW50TWFuYWdlci5fZXhlY3V0aW9uUHJvcGVydGllc0ZpbGVOYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJTZXJ2ZXJDb25maWdVUkxcIikgPz8gXCIuL2Fzc2V0cy9zZXJ2ZXItY29uZmlnLmpzb25cIjtcclxuICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5Jbml0KFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLlJDX05PX0NPTlRFWFRfSUQpO1xyXG4gICAgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLkluaXQoTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZSk7XHJcbiAgICBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuTGFzdEFjdGlvblRpbWUgPSBNaXNjLmdldFN5c3RlbU1pbGxpc2Vjb25kcygpO1xyXG5cclxuXHJcbiAgICBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5TaG91bGRTY3JhbWJsZUFuZFVuc2NyYW1ibGVNZXNzYWdlcyA9IHRydWU7XHJcblxyXG5cclxuICAgIC8vIFRPRE86IEhvdyB0byBnZXQgUHJvY2Vzcy5HZXRDdXJyZW50UHJvY2VzcygpLklkP1xyXG4gICAgdGhpcy5fZ2xvYmFsVW5pcXVlU2Vzc2lvbklkID0gVW5pcXVlSURVdGlscy5HZXRVbmlxdWVNYWNoaW5lSUQoKSArIFwiX1wiOyAvLyArIFByb2Nlc3MuR2V0Q3VycmVudFByb2Nlc3MoKS5JZDtcclxuXHJcbiAgICB0aGlzLlJlZ2lzdGVyRGVsZWdhdGVzKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEluaXRpYWxpemUgdGhlIGRhdGEgbmVlZGVkIGJ5IHRoZSBndWkgbGlicmFyeVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBDbGllbnRNYW5hZ2VyIGluc3RhbmNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgSW5pdEd1aU1hbmFnZXIoKTogdm9pZCB7XHJcbiAgICBNYW5hZ2VyLkV2ZW50c01hbmFnZXIgPSBFdmVudHNNYW5hZ2VyLkluc3RhbmNlO1xyXG4gICAgTWFuYWdlci5EZWZhdWx0U2VydmVyTmFtZSA9IFNlcnZlckNvbmZpZy5JbnN0YW5jZS5nZXRTZXJ2ZXIoKTtcclxuICAgIE1hbmFnZXIuRGVmYXVsdFByb3RvY29sID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLmdldFByb3RvY29sKCk7XHJcbiAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudCA9IEVudmlyb25tZW50Lkluc3RhbmNlO1xyXG4gICAgR3VpRGF0YUNvbGxlY3Rpb24uTUdEYXRhVGFibGUgPSBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlO1xyXG4gICAgUnVudGltZUNvbnRleHRCYXNlLm5vQ29udGV4dElkID0gUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuUkNfTk9fQ09OVEVYVF9JRDtcclxuICB9XHJcblxyXG4gIC8vLyBJbml0aWFsaXplIGdsb2JhbCBkYXRhIGluIG9iamVjdHMgdXNlZCB0byBvdmVyY29tZSB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBpc3N1ZVxyXG4gIHByaXZhdGUgSW5pdENpcmN1bGFyUmVmZXJlbmNlc0J5cGFzc2VzKCkge1xyXG4gICAgVGFza3NUYWJsZS5jcmVhdGVOZXd0YXNrID0gVGFzay5DcmVhdGVUYXNrO1xyXG4gICAgT3BlblVSTENvbW1hbmQuY3JlYXRlTmV3Q29tbWFuZHNUYWJsZSA9IENvbW1hbmRzVGFibGUuY3JlYXRlQ29tbWFuZHNUYWJsZTtcclxuXHJcbiAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlciA9IEV2ZW50c01hbmFnZXIuSW5zdGFuY2U7XHJcbiAgICBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUgPSBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlO1xyXG4gICAgQWNjZXNzSGVscGVyLmVudlBhcmFtc1RhYmxlID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2U7XHJcbiAgICBBY2Nlc3NIZWxwZXIuZ2xvYmFsUGFyYW1zID0gR2xvYmFsUGFyYW1zLkluc3RhbmNlO1xyXG4gICAgQWNjZXNzSGVscGVyLmxhbmd1YWdlRGF0YSA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZTtcclxuICAgIEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50Lkluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBFbnRyeSBwb2ludCB0byB0aGUgV2ViIENsaWVudCA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYXJnc1wiPmFycmF5IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHM8L3BhcmFtPlxyXG4gIHN0YXRpYyBNYWluKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGFyZ3M6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGxldCB2YWw6IEV4cFZhbDtcclxuICBcclxuICAgIGFyZ3MuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICB2YWwgPSBuZXcgRXhwVmFsKFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEsIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgIEdsb2JhbFBhcmFtcy5JbnN0YW5jZS5zZXRWYWx1ZShrZXksIG5ldyBNaXJyb3JFeHBWYWwodmFsKSwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gVGVybWluYXRlIHRoZSBjbGllbnQgYW5kIHRlcm1pbmF0ZSB0aGUgY29udGV4dCA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGFzeW5jIFN0b3BFeGVjdXRpb24oKTogUHJvbWlzZSA8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5Jc0Fib3J0aW5nTWFnaWNFbmdpbmUgPSB0cnVlO1xyXG4gICAgICBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLlN0YXJ0dXBNZ0RhdGEuZ2V0Rmlyc3RUYXNrKCkuQ2xvc2luZ0Zvcm1VSSA9IHRydWU7XHJcblxyXG4gICAgICBhd2FpdCBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLlN0YXJ0dXBNZ0RhdGEuZ2V0Rmlyc3RUYXNrKCkuZW5kVGFzayh0cnVlLCBmYWxzZSxcclxuICAgICAgICBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgzKSB7XHJcbiAgICAgIGlmIChleDMgaW5zdGFuY2VvZiBBcHBsaWNhdGlvbkV4Y2VwdGlvbikge1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4Myk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IGV4MztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBTdGFydEV4ZWN1dGlvbihodHRwQ2xpZW50Okh0dHBDbGllbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIEh0dHBNYW5hZ2VyLnNldE5hdGl2ZUh0dHBDbGllbnQoaHR0cENsaWVudCk7XHJcbiAgICBsZXQgbG9hZGVkOiBib29sZWFuID0gYXdhaXQgQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Mb2FkRXhlY3V0aW9uUHJvcHMoKTtcclxuXHJcbiAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgIG5ldyBHdWlFdmVudHNQcm9jZXNzb3IoKTtcclxuICAgICAgQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Jbml0R3VpTWFuYWdlcigpO1xyXG4gICAgICBDbGllbnRNYW5hZ2VyLkluc3RhbmNlLkluaXRDaXJjdWxhclJlZmVyZW5jZXNCeXBhc3NlcygpO1xyXG4gICAgICBsZXQgdmVyc2lvblN0cmluZyA9IEN1cnJlbnRDbGllbnRWZXJzaW9uID09PSAgJzAuMC4wLjAnID8gXCJEZXZlbG9wbWVudCBtb2RlXCIgOiBcIlZlcnNpb24gOiBcIiArIEN1cnJlbnRDbGllbnRWZXJzaW9uIDtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTWFnaWMgV2ViIENsaWVudC4gXCIgKyB2ZXJzaW9uU3RyaW5nKTtcclxuXHJcbiAgICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSHR0cENvbW11bmljYXRpb25UaW1lb3V0TVMgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuR2V0Rmlyc3RIdHRwUmVxdWVzdFRpbWVvdXQoKTtcclxuXHJcbiAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuSW5pdCgpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLkluaXRpYWxpemUoUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5wYXJzZUxvZ0xldmVsKFNlcnZlckNvbmZpZy5JbnN0YW5jZS5nZXRJbnRlcm5hbExvZ0xldmVsKCkpLGZhbHNlKTtcclxuXHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IG5ldyBNR0RhdGEoXHJcbiAgICAgICAgbmV3IENvbW1hbmRzVGFibGUoKSxcclxuICAgICAgICBuZXcgQ29tbWFuZHNUYWJsZSgpLFxyXG4gICAgICAgIDAsIG51bGwsIGZhbHNlKTtcclxuICAgICAgYXdhaXQgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5hZGRNR0RhdGEobWdkLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgIGF3YWl0IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuV29ya1RocmVhZEV4ZWN1dGlvbigpO1xyXG5cclxuICAgICAgaWYgKExvZ2dlci5JbnN0YW5jZS5TaG91bGRMb2coKSkge1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKE9TRW52aXJvbm1lbnQuRW9sU2VxICsgXCJFbmRlZCBvbiBcIiArIERhdGVUaW1lVXRpbHMuVG9TdHJpbmcoRGF0ZVRpbWUuTm93LCBYTUxDb25zdGFudHMuRVJST1JfTE9HX0RBVEVfRk9STUFULCBMb2dnZXIuSW5zdGFuY2UpICsgT1NFbnZpcm9ubWVudC5Fb2xTZXEgKyBPU0Vudmlyb25tZW50LkVvbFNlcSwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGF3YWl0IEdVSU1hbmFnZXIuSW5zdGFuY2UuTWVzc2FnZUJveChcIkVycm9yXCIsIFwiRmFpbGVkIHRvIGxvYWQgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoXCIgKyB0aGlzLl9leGVjdXRpb25Qcm9wZXJ0aWVzRmlsZU5hbWUgKyBcIilcIiwgU3R5bGVzLk1TR0JPWF9JQ09OX0VSUk9SIHwgU3R5bGVzLk1TR0JPWF9CVVRUT05fT0spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBMb2FkcyB0aGUgZXhlY3V0aW9uIHByb3BlcnRpZXMgZmlsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIsXHJcbiAgLy8vIGFwcGxpY2F0aW9uIGFuZCBwcm9ncmFtIHRvIGV4ZWN1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIExvYWRFeGVjdXRpb25Qcm9wcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIHJldHVybiB0cnVlLCBpZiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxyXG4gICAgbGV0IHJlc3BvbnNlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IHN1Y2NlZWRlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaXNFcnJvciBjYW5ub3QgYmUgdHJ1ZSBoZXJlLCBiZWNhdXNlIGl0IGlzIHJldHVybmVkIGJ5IHJ1bnRpbWUgZW5naW5lIGFuZCB0byByZWFkIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzLCB3ZSBkbyBub3QgcmVhY2ggdGhlIGVuZ2luZS5cclxuICAgICAgbGV0IGlzRXJyb3I6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGZhbHNlKTtcclxuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBIdHRwTWFuYWdlci5HZXRJbnN0YW5jZSgpLkdldENvbnRlbnQoQ2xpZW50TWFuYWdlci5fZXhlY3V0aW9uUHJvcGVydGllc0ZpbGVOYW1lLCBudWxsLCBmYWxzZSwgaXNFcnJvcik7XHJcbiAgICAgIFNlcnZlckNvbmZpZy5JbnN0YW5jZS5Jbml0KEpTT04ucGFyc2UocmVzcG9uc2UpKTtcclxuXHJcbiAgICAgIGxldCBhc3NldHNVUkwgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0QXNzZXRzVVJMKCk7XHJcblxyXG4gICAgICBpZihhc3NldHNVUkwgIT09IG51bGwpe1xyXG4gICAgICAgIENsaWVudE1hbmFnZXIuYXNzZXRzVVJMID0gYXNzZXRzVVJMO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIHdpbmRvdy5hc3NldHNVUkwgPSBDbGllbnRNYW5hZ2VyLmFzc2V0c1VSTDtcclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBzdWNjZWVkZWQgPSBmYWxzZTtcclxuICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIHdyaXRlIHRoZSBlcnJvciBtZXNzYWdlIHRvIGxvZz9cclxuICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnJvd3Nlcj9cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VjY2VlZGVkO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2xvYmFsIHVuaXF1ZSBJRCBvZiB0aGUgc2Vzc2lvbiA9ICdtYWNoaW5lIHVuaXF1ZSBJRCcgKyAncHJvY2VzcyBJRCc8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRHbG9iYWxVbmlxdWVTZXNzaW9uSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9nbG9iYWxVbmlxdWVTZXNzaW9uSWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBjb250cm9sJ3MgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgIEdldENvbnRyb2xQaWN0dXJlTWFzayh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZyk6IFBJQ1xyXG4gIHtcclxuICAgIGxldCBwaWM6IFBJQyA9IG51bGw7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGNvbnRyb2xOYW1lICE9PSBudWxsICYmIHRhc2sgIT0gbnVsbCkge1xyXG4gICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgIHBpYyA9IGNvbnRyb2wuZ2V0UElDKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBpYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZm9ybWF0dGVkIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyAgR2V0Rm9ybWF0dGVkVmFsdWUodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIHJvd0lkPzogc3RyaW5nKTogc3RyaW5nXHJcbiAge1xyXG4gICAgbGV0IHBpYzogUElDID0gbnVsbDtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+TUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG5cclxuICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuICAgIGxldCBuZXdWYWx1ZTogYW55ID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKGNvbnRyb2xOYW1lICE9PSBudWxsICAmJiB0YXNrICE9PSBudWxsKVxyXG4gICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICBpZiAoY29udHJvbCAhPSBudWxsICYmIGNvbnRyb2wuRGF0YVR5cGUgPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKSB7XHJcbiAgICAgIGlmIChjb250cm9sLmlzUmVwZWF0YWJsZSgpICYmICBjb250cm9sLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUKS5pc0V4cHJlc3Npb24oKSlcclxuICAgICAge1xyXG4gICAgICAgIGxldCBwaWN2YWwgPSBjb250cm9sLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUKS5nZXRQcmV2VmFsdWUoK3Jvd0lkKTtcclxuICAgICAgICBwaWMgPSBuZXcgUElDIChwaWN2YWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgIGNvbnRyb2wuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHBpYyA9IGNvbnRyb2wuZ2V0UElDKCk7XHJcblxyXG4gICAgICBsZXQgZGlzcFZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgbGV0ICBuZXdQaWMgPSBwaWMuZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk7XHJcblxyXG4gICAgICBsZXQgbnVtID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50b051bShkaXNwVmFsdWUsIG5ld1BpYywgMCk7XHJcbiAgICAgIG5ld1ZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5mcm9tTnVtKG51bSwgcGljKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgcmFuZ2VkIHZhbHVlIGZvciBpbnB1dCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljICBHZXRSYW5nZWRWYWx1ZSh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZ1xyXG4gIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+TUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG5cclxuICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgIHJldHVybiBjb250cm9sLmdldFJhbmdlZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHVzZXIgaW5wdXQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyAgVmFsaWRhdGVDb250cm9sVmFsdWUodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZmxkIHJhbmdlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIEdldEZsZFJhbmdlcyh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC5nZXRSYW5nZXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgd2hldGhlciBjbGllbnQvc2VydmVyIGNhY2hlIGV4aXN0c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRyYW5zQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY2xpZW50VHJhbnNDYWNoZUV4aXN0czogYm9vbGVhbiA9IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRDdXJyTUdEYXRhKCkuY2xpZW50VHJhbnNhY3Rpb25DYWNoZUV4aXN0cygpO1xyXG4gICAgbGV0IHNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHM6IGJvb2xlYW4gPSBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZ2V0Q3Vyck1HRGF0YSgpLnNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50VHJhbnNDYWNoZUV4aXN0cyB8fCBzZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRXhpc3RzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTdWJzY3JpYmUgZm9yIGV2ZW50cyBkZWZpbmVkIGF0IEh0dHBDbGllbnRFdmVudHMgYW5kXHJcbiAgLy8vIGF0dGFjaCBhcHByb3ByaWF0ZSBldmVudCBoYW5kbGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSZWdpc3RlckRlbGVnYXRlcygpOiB2b2lkIHtcclxuICAgIEh0dHBDbGllbnRFdmVudHMuR2V0RXhlY3V0aW9uUHJvcGVydHlfRXZlbnQgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuR2V0RXhlY3V0aW9uUHJvcGVydHkuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRSdW50aW1lQ3R4SURfRXZlbnQgPSB0aGlzLkdldFJ1bnRpbWVDdHhJRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRHbG9iYWxVbmlxdWVTZXNzaW9uSURfRXZlbnQgPSB0aGlzLkdldEdsb2JhbFVuaXF1ZVNlc3Npb25JRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5TaG91bGREaXNwbGF5R2VuZXJpY0Vycm9yX0V2ZW50ID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLlNob3VsZERpc3BsYXlHZW5lcmljRXJyb3IuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXRyaWV2ZXMgcnVudGltZSBjb250ZXh0IElEXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ1bnRpbWVDdHhJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5Db250ZXh0SUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNlbmQgYSByZXF1ZXN0IHRvIHNlcnZlciB0byB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgdXNpbmcgZmV0Y2ggQVBJIHdpdGgga2VlcC1hbGl2ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRlcm1pbmF0ZUNvbnRleHRVc2luZ0ZldGNoQVBJKCk6IHZvaWQge1xyXG5cclxuICAgIC8vIElmIFNlc3Npb24gaXMgcmUtaW5pdGlhbGl6aW5nIG1lYW5zIHRoZSBjb250ZXh0IGlzIG5vdCBmb3VuZCBhdCBzZXJ2ZXIuXHJcbiAgICAvLyB0aGVuIHRoZXJlIGlzIG5vIHBvaW50IGluIHRlcm1pbmF0aW5nIGNvbnRleHQuXHJcbiAgICBpZiAoUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuSXNTZXNzaW9uUmVJbml0aWFsaXppbmcpXHJcbiAgICAgIHJldHVybjtcclxuICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSXNBYm9ydGluZ01hZ2ljRW5naW5lID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEdWUgdG8gcGF5bG9hZCBsaW1pdCBvZiBmZXRjaCBBUEksIHNlbmQgb25seSB0aGUgY29udGV4dCB0ZXJtaW5hdGlvbiBjb21tYW5kIHRvIHNlcnZlclxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkNsZWFyKCk7XHJcblxyXG4gICAgbGV0IGNvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZDogQ29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuXHJcbiAgICBDcmVhdGVDb250ZXh0VGVybWluYXRpb25FdmVudENvbW1hbmQoTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLmdldFRhc2tUYWcoKSk7XHJcblxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkFkZCg8SUNsaWVudENvbW1hbmQ+Y29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kKTtcclxuXHJcbiAgICAvLyByZXNwb25zZSBuZWVkIG5vdCB0byBiZSBoYW5kbGVkIGFzIHRoZSBicm93c2VyIHVubG9hZCBjYW5ub3QgYmUgc3RvcHBlZCwgc28gbm8gbmVlZCB0byB3YWl0XHJcbiAgICBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5PTkxZX0NPTU1BTkRTKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0QXNzZXRzVVJMKCk6IHN0cmluZ3tcclxuICAgIHJldHVybiBDbGllbnRNYW5hZ2VyLmFzc2V0c1VSTDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export let CurrentClientVersion = '4.1100.0-dev4110.
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
1
|
+
export let CurrentClientVersion = '4.1100.0-dev4110.213';
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VycmVudENsaWVudFZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL0N1cnJlbnRDbGllbnRWZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGxldCBDdXJyZW50Q2xpZW50VmVyc2lvbiA9ICc0LjExMDAuMC1kZXY0MTEwLjIxMyc7Il19
|