@magic-xpa/engine 4.1000.0-dev4100.99 → 4.1100.0-dev4110.1

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.
Files changed (53) hide show
  1. package/esm2020/src/ClientManager.mjs +12 -12
  2. package/esm2020/src/ConstInterface.mjs +2 -1
  3. package/esm2020/src/CurrentClientVersion.mjs +2 -2
  4. package/esm2020/src/commands/ClientToServer/DataviewCommand.mjs +6 -6
  5. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +4 -4
  6. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +8 -8
  7. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +4 -4
  8. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +5 -5
  9. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +7 -7
  10. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +6 -6
  11. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +8 -8
  12. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +7 -7
  13. package/esm2020/src/data/DataView.mjs +34 -34
  14. package/esm2020/src/data/DataviewManager.mjs +7 -7
  15. package/esm2020/src/data/Record.mjs +10 -10
  16. package/esm2020/src/data/TaskTransactionManager.mjs +4 -4
  17. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +5 -5
  18. package/esm2020/src/env/Environment.mjs +14 -7
  19. package/esm2020/src/event/Event.mjs +4 -1
  20. package/esm2020/src/event/EventHandler.mjs +8 -3
  21. package/esm2020/src/event/EventHandlerPosition.mjs +5 -1
  22. package/esm2020/src/event/EventsManager.mjs +10 -1
  23. package/esm2020/src/event/IEventsManager.mjs +1 -1
  24. package/esm2020/src/event/RunTimeEvent.mjs +16 -16
  25. package/esm2020/src/exp/ExpressionEvaluator.mjs +8 -4
  26. package/esm2020/src/gui/FormsTable.mjs +8 -8
  27. package/esm2020/src/gui/MgControl.mjs +10 -13
  28. package/esm2020/src/gui/MgForm.mjs +9 -23
  29. package/esm2020/src/http/HttpManager.mjs +8 -8
  30. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +34 -23
  31. package/esm2020/src/rt/DataviewHeaderBase.mjs +16 -16
  32. package/esm2020/src/security/UserDetails.mjs +12 -12
  33. package/esm2020/src/tasks/MGData.mjs +4 -4
  34. package/esm2020/src/tasks/RCTimer.mjs +10 -10
  35. package/esm2020/src/tasks/Task.mjs +43 -42
  36. package/esm2020/src/util/FlowMonitorQueue.mjs +107 -2
  37. package/esm2020/src/util/PrmMap.mjs +5 -5
  38. package/esm2020/src/util/ReturnResult.mjs +7 -7
  39. package/fesm2015/magic-xpa-engine.mjs +461 -338
  40. package/fesm2015/magic-xpa-engine.mjs.map +1 -1
  41. package/fesm2020/magic-xpa-engine.mjs +456 -326
  42. package/fesm2020/magic-xpa-engine.mjs.map +1 -1
  43. package/package.json +6 -6
  44. package/src/ConstInterface.d.ts +1 -0
  45. package/src/env/Environment.d.ts +2 -0
  46. package/src/event/EventsManager.d.ts +3 -0
  47. package/src/event/IEventsManager.d.ts +2 -0
  48. package/src/exp/ExpressionEvaluator.d.ts +1 -1
  49. package/src/gui/MgControl.d.ts +0 -1
  50. package/src/gui/MgForm.d.ts +1 -3
  51. package/src/remote/RemoteCommandsProcessor.d.ts +1 -0
  52. package/src/util/FlowMonitorQueue.d.ts +8 -0
  53. package/magic-xpa-engine.d.ts +0 -2
@@ -3,13 +3,6 @@ import { XMLConstants } from "@magic-xpa/utils";
3
3
  import { Manager, RuntimeContextBase } from "@magic-xpa/gui";
4
4
  import { RemoteTaskService } from "../tasks/RemoteTaskService";
5
5
  export class FormsTable {
6
- constructor(task, parentForm) {
7
- this._task = null;
8
- this._parentForm = null;
9
- this._formsStringXml = null;
10
- this._task = task;
11
- this._parentForm = parentForm;
12
- }
13
6
  get Count() {
14
7
  return this._formsStringXml.length;
15
8
  }
@@ -18,6 +11,13 @@ export class FormsTable {
18
11
  return this._formsStringXml.get_Item(formDisplayIndex - 1);
19
12
  return null;
20
13
  }
14
+ constructor(task, parentForm) {
15
+ this._task = null;
16
+ this._parentForm = null;
17
+ this._formsStringXml = null;
18
+ this._task = task;
19
+ this._parentForm = parentForm;
20
+ }
21
21
  async fillData() {
22
22
  this._formsStringXml = new List();
23
23
  let parser = Manager.GetCurrentRuntimeContext().Parser;
@@ -63,4 +63,4 @@ export class FormsTable {
63
63
  await this._task.PrepareTaskForm();
64
64
  }
65
65
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZ3VpL0Zvcm1zVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFjLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0QsTUFBTSxPQUFPLFVBQVU7SUF3QnJCLFlBQVksSUFBVSxFQUFFLFVBQXNCO1FBdkJ0QyxVQUFLLEdBQVMsSUFBSSxDQUFDO1FBQ25CLGdCQUFXLEdBQWUsSUFBSSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQWlCLElBQUksQ0FBQztRQXNCbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQW5CRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFPRCxRQUFRLENBQUMsZ0JBQXdCO1FBQy9CLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN6RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVdELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxDLElBQUksTUFBTSxHQUFjLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUVsRSxPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFO1NBQ3hEO0lBQ0gsQ0FBQztJQU1ELHFCQUFxQixDQUFDLGdCQUF3QjtRQUU1QyxJQUFJLFVBQVUsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN6RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9DLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBT08sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQW9CO1FBQ2pELElBQUksWUFBWSxLQUFLLElBQUk7WUFDdkIsT0FBTyxLQUFLLENBQUM7UUFFZixJQUFJLE1BQU0sR0FBYyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDbEUsSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLFlBQVksRUFBRTtZQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRzthQUNJLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDbEQsSUFBSSxhQUFhLEdBQVcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQzNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7U0FDYjthQUNJLElBQUksWUFBWSxLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUMzRCxNQUFNLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1lBRWhELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLTyxLQUFLLENBQUMsa0NBQWtDO1FBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLFlBQVksaUJBQWlCO1lBQ3JELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1htbFBhcnNlciwgWE1MQ29uc3RhbnRzfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge01hbmFnZXIsIE1nRm9ybUJhc2UsIFJ1bnRpbWVDb250ZXh0QmFzZX0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtSZW1vdGVUYXNrU2VydmljZX0gZnJvbSBcIi4uL3Rhc2tzL1JlbW90ZVRhc2tTZXJ2aWNlXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyBzYXZlIGFsbCBmb3JtcyBvbiB0YXNrXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBGb3Jtc1RhYmxlIHtcclxuICBwcml2YXRlIF90YXNrOiBUYXNrID0gbnVsbDtcclxuICBwcml2YXRlIF9wYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuICBfZm9ybXNTdHJpbmdYbWw6IExpc3Q8c3RyaW5nPiA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY291bnQgb2YgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldCBDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRoZSBmb3JtIGJ5IHNlbmQgdGhlIGRpc3BsYXkgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcm1EaXNwbGF5SW5kZXhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0X0l0ZW0oZm9ybURpc3BsYXlJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChmb3JtRGlzcGxheUluZGV4ID4gMCAmJiBmb3JtRGlzcGxheUluZGV4IDw9IHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXggLSAxKTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHRhc2s6IFRhc2ssIHBhcmVudEZvcm06IE1nRm9ybUJhc2UpIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB0YXNrO1xyXG4gICAgdGhpcy5fcGFyZW50Rm9ybSA9IHBhcmVudEZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGZvcm0gc3RydWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj5yZWZlcmVuY2UgdG8gdGhlIG93bmVyVGFzayBvZiB0aGlzIGZvcm08L3BhcmFtPlxyXG4gIGFzeW5jIGZpbGxEYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZm9ybXNTdHJpbmdYbWwgPSBuZXcgTGlzdCgpO1xyXG5cclxuICAgIGxldCBwYXJzZXI6IFhtbFBhcnNlciA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuUGFyc2VyO1xyXG5cclxuICAgIHdoaWxlIChhd2FpdCB0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSkpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCB0aGUgZm9ybSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9ybURpc3BsYXlJbmRleFwiPjwvcGFyYW0+XHJcbiAgSW5pdEZvcm1Gcm9tWG1sU3RyaW5nKGZvcm1EaXNwbGF5SW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gd2hpbGUgdGhlIGZvcm0gaXNuJ3QgZXhpc3QgdGhlIGZpcnN0IGZvcm0gd2lsbCBiZSBvcGVuLiAoaXQgaXMgdGhlIHNhbWUgaW4gbm9uIG9mZmxpbmUgdGFzaylcclxuICAgIGxldCBmb3JtU3RyWG1sOiBzdHJpbmcgPSB0aGlzLmdldF9JdGVtKDEpO1xyXG5cclxuICAgIGlmIChmb3JtRGlzcGxheUluZGV4ID4gMCAmJiBmb3JtRGlzcGxheUluZGV4IDw9IHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aClcclxuICAgICAgZm9ybVN0clhtbCA9IHRoaXMuZ2V0X0l0ZW0oZm9ybURpc3BsYXlJbmRleCk7XHJcblxyXG4gICAgaWYgKGZvcm1TdHJYbWwgIT09IG51bGwpIHtcclxuICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5wdXNoKCk7IC8vIGFsbG93IHJlY3Vyc2l2ZSBwYXJzaW5nXHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIuUHJlcGFyZUZvcm1SZWFkU3RyaW5nKGZvcm1TdHJYbWwpO1xyXG5cclxuICAgICAgdGhpcy5fdGFzay5Gb3JtSW5pdERhdGEodGhpcy5fcGFyZW50Rm9ybSk7XHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVG8gYWxsb2NhdGUgYW5kIGZpbGwgaW5uZXIgb2JqZWN0cyBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvdW5kVGFnTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGluaXRJbm5lck9iamVjdHMoZm91bmRUYWdOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgcGFyc2VyOiBYbWxQYXJzZXIgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLlBhcnNlcjtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfRk9STVMpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpOyAvLyBtb3ZlIEluZGV4IHRvIGVuZCBvZiA8ZHZoZWFkZXI+ICsxIGZvciAnPidcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNKSB7XHJcbiAgICAgIGxldCBmb3JtU3RyaW5nWG1sOiBzdHJpbmcgPSBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgdGhpcy5fZm9ybXNTdHJpbmdYbWwucHVzaChmb3JtU3RyaW5nWG1sKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09ICgnLycgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0pKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09ICgnLycgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk1TKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLlByZXBhcmVNYWluRGlzcGxheUZvckNvbm5lY3RlZFRhc2soKTtcclxuXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGZvciByZW1vdGUgdGFzayB3ZSBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgZm9ybSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIFByZXBhcmVNYWluRGlzcGxheUZvckNvbm5lY3RlZFRhc2soKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fdGFzay5UYXNrU2VydmljZSBpbnN0YW5jZW9mIFJlbW90ZVRhc2tTZXJ2aWNlKVxyXG4gICAgICBhd2FpdCB0aGlzLl90YXNrLlByZXBhcmVUYXNrRm9ybSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZ3VpL0Zvcm1zVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFjLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0QsTUFBTSxPQUFPLFVBQVU7SUFRckIsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBT0QsUUFBUSxDQUFDLGdCQUF3QjtRQUMvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDekUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLElBQVUsRUFBRSxVQUFzQjtRQXZCdEMsVUFBSyxHQUFTLElBQUksQ0FBQztRQUNuQixnQkFBVyxHQUFlLElBQUksQ0FBQztRQUN2QyxvQkFBZSxHQUFpQixJQUFJLENBQUM7UUFzQm5DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFNRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVsQyxJQUFJLE1BQU0sR0FBYyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFbEUsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRTtTQUN4RDtJQUNILENBQUM7SUFNRCxxQkFBcUIsQ0FBQyxnQkFBd0I7UUFFNUMsSUFBSSxVQUFVLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDekUsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvQyxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQU9PLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxNQUFNLEdBQWMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDOUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckc7YUFDSSxJQUFJLFlBQVksS0FBSyxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQ2xELElBQUksYUFBYSxHQUFXLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMzRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQ0ksSUFBSSxZQUFZLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzFELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDM0QsTUFBTSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztZQUVoRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS08sS0FBSyxDQUFDLGtDQUFrQztRQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxZQUFZLGlCQUFpQjtZQUNyRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtYbWxQYXJzZXIsIFhNTENvbnN0YW50c30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtNYW5hZ2VyLCBNZ0Zvcm1CYXNlLCBSdW50aW1lQ29udGV4dEJhc2V9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7UmVtb3RlVGFza1NlcnZpY2V9IGZyb20gXCIuLi90YXNrcy9SZW1vdGVUYXNrU2VydmljZVwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gc2F2ZSBhbGwgZm9ybXMgb24gdGFza1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRm9ybXNUYWJsZSB7XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGFyZW50Rm9ybTogTWdGb3JtQmFzZSA9IG51bGw7XHJcbiAgX2Zvcm1zU3RyaW5nWG1sOiBMaXN0PHN0cmluZz4gPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNvdW50IG9mIGZvcm1zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0aGUgZm9ybSBieSBzZW5kIHRoZSBkaXNwbGF5IGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtRGlzcGxheUluZGV4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoZm9ybURpc3BsYXlJbmRleCA+IDAgJiYgZm9ybURpc3BsYXlJbmRleCA8PSB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiB0aGlzLl9mb3Jtc1N0cmluZ1htbC5nZXRfSXRlbShmb3JtRGlzcGxheUluZGV4IC0gMSk7XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcih0YXNrOiBUYXNrLCBwYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlKSB7XHJcbiAgICB0aGlzLl90YXNrID0gdGFzaztcclxuICAgIHRoaXMuX3BhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBmb3JtIHN0cnVjdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+cmVmZXJlbmNlIHRvIHRoZSBvd25lclRhc2sgb2YgdGhpcyBmb3JtPC9wYXJhbT5cclxuICBhc3luYyBmaWxsRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zvcm1zU3RyaW5nWG1sID0gbmV3IExpc3QoKTtcclxuXHJcbiAgICBsZXQgcGFyc2VyOiBYbWxQYXJzZXIgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLlBhcnNlcjtcclxuXHJcbiAgICB3aGlsZSAoYXdhaXQgdGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlci5nZXROZXh0VGFnKCkpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluaXQgdGhlIGZvcm0gb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcm1EaXNwbGF5SW5kZXhcIj48L3BhcmFtPlxyXG4gIEluaXRGb3JtRnJvbVhtbFN0cmluZyhmb3JtRGlzcGxheUluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIC8vIHdoaWxlIHRoZSBmb3JtIGlzbid0IGV4aXN0IHRoZSBmaXJzdCBmb3JtIHdpbGwgYmUgb3Blbi4gKGl0IGlzIHRoZSBzYW1lIGluIG5vbiBvZmZsaW5lIHRhc2spXHJcbiAgICBsZXQgZm9ybVN0clhtbDogc3RyaW5nID0gdGhpcy5nZXRfSXRlbSgxKTtcclxuXHJcbiAgICBpZiAoZm9ybURpc3BsYXlJbmRleCA+IDAgJiYgZm9ybURpc3BsYXlJbmRleCA8PSB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGgpXHJcbiAgICAgIGZvcm1TdHJYbWwgPSB0aGlzLmdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXgpO1xyXG5cclxuICAgIGlmIChmb3JtU3RyWG1sICE9PSBudWxsKSB7XHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIucHVzaCgpOyAvLyBhbGxvdyByZWN1cnNpdmUgcGFyc2luZ1xyXG4gICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLlByZXBhcmVGb3JtUmVhZFN0cmluZyhmb3JtU3RyWG1sKTtcclxuXHJcbiAgICAgIHRoaXMuX3Rhc2suRm9ybUluaXREYXRhKHRoaXMuX3BhcmVudEZvcm0pO1xyXG4gICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLnBvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3VuZFRhZ05hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0SW5uZXJPYmplY3RzKGZvdW5kVGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk1TKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTsgLy8gbW92ZSBJbmRleCB0byBlbmQgb2YgPGR2aGVhZGVyPiArMSBmb3IgJz4nXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfRk9STSkge1xyXG4gICAgICBsZXQgZm9ybVN0cmluZ1htbDogc3RyaW5nID0gUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5SZWFkVG9FbmRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLnB1c2goZm9ybVN0cmluZ1htbCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNKSkge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNUykpIHtcclxuICAgICAgYXdhaXQgdGhpcy5QcmVwYXJlTWFpbkRpc3BsYXlGb3JDb25uZWN0ZWRUYXNrKCk7XHJcblxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBmb3IgcmVtb3RlIHRhc2sgd2UgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGZvcm0gZGlzcGxheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBQcmVwYXJlTWFpbkRpc3BsYXlGb3JDb25uZWN0ZWRUYXNrKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Rhc2suVGFza1NlcnZpY2UgaW5zdGFuY2VvZiBSZW1vdGVUYXNrU2VydmljZSlcclxuICAgICAgYXdhaXQgdGhpcy5fdGFzay5QcmVwYXJlVGFza0Zvcm0oKTtcclxuICB9XHJcbn1cclxuIl19
@@ -6,15 +6,6 @@ import { TaskBase } from '../tasks/TaskBase';
6
6
  import { ConstInterface } from '../ConstInterface';
7
7
  import { AccessHelper } from '../AccessHelper';
8
8
  export class MgControl extends MgControlBase {
9
- constructor(type, taskOrParentMgForm, parentControlOrParentControlIdx) {
10
- if (arguments.length === 0)
11
- super();
12
- else if (arguments.length === 3 && (type === null || type.constructor === Number) && (taskOrParentMgForm === null || taskOrParentMgForm instanceof TaskBase) && (parentControlOrParentControlIdx === null || parentControlOrParentControlIdx.constructor === Number))
13
- super(type, taskOrParentMgForm.getForm(), parentControlOrParentControlIdx);
14
- else
15
- super(type, taskOrParentMgForm, parentControlOrParentControlIdx);
16
- this.initialize();
17
- }
18
9
  initialize() {
19
10
  this._focusedStopExecution = false;
20
11
  this._inControlSuffix = false;
@@ -27,6 +18,15 @@ export class MgControl extends MgControlBase {
27
18
  this.HasZoomHandler = false;
28
19
  this.ArgList = null;
29
20
  }
21
+ constructor(type, taskOrParentMgForm, parentControlOrParentControlIdx) {
22
+ if (arguments.length === 0)
23
+ super();
24
+ else if (arguments.length === 3 && (type === null || type.constructor === Number) && (taskOrParentMgForm === null || taskOrParentMgForm instanceof TaskBase) && (parentControlOrParentControlIdx === null || parentControlOrParentControlIdx.constructor === Number))
25
+ super(type, taskOrParentMgForm.getForm(), parentControlOrParentControlIdx);
26
+ else
27
+ super(type, taskOrParentMgForm, parentControlOrParentControlIdx);
28
+ this.initialize();
29
+ }
30
30
  GetVarIndex() {
31
31
  return super.getForm().getTask().DataView.Dvcount + this.veeIndx;
32
32
  }
@@ -293,9 +293,6 @@ export class MgControl extends MgControlBase {
293
293
  this.KeyStrokeOn = false;
294
294
  }
295
295
  }
296
- async refreshAndSetItemsListForRadioButton(line, execComputeChoice) {
297
- await super.refreshAndSetItemsListForRadioButton(line, execComputeChoice);
298
- }
299
296
  getSubformTask() {
300
297
  return this._subformTask;
301
298
  }
@@ -353,4 +350,4 @@ export class MgControl extends MgControlBase {
353
350
  }
354
351
  }
355
352
  MgControl.ReturnToCtrl = null;
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVE3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFvQzFDLFlBQVksSUFBb0IsRUFBRSxrQkFBd0IsRUFBRSwrQkFBd0M7UUFDbEcsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsS0FBSyxFQUFFLENBQUM7YUFDTCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEtBQUssSUFBSSxJQUFJLCtCQUErQixDQUFDLFdB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SSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0gsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTTtZQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakcsSUFBSSxjQUFjLEVBQUU7WUFDbEIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUdELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBL2tCTSxzQkFBWSxHQUFjLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tbWFuZHMsXHJcbiAgQ29tbWFuZFR5cGUsXHJcbiAgR3VpRGF0YUNvbGxlY3Rpb24sXHJcbiAgSHRtbFByb3BlcnRpZXMsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBNZ0Zvcm1CYXNlLFxyXG4gIFByb3BlcnR5LFxyXG4gIFByb3BJbnRlcmZhY2UsXHJcbiAgUHJvcFBhcmVudEludGVyZmFjZSxcclxuICBWYWxpZGF0aW9uRGV0YWlsc1xyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtEZWJ1ZywgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gJy4uL3J0L0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQge1Rhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tICcuL01nRm9ybSc7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0ci50cmltKCkgIT0gXCJcIilcclxuICAgICAgICAgICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFRlJFU0hPTjpcclxuICAgICAgICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gdmFsdWVTdHIudHJpbSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlzVGFnUHJvY2Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbnJlY29nbml6ZWQgYXR0cmlidXRlOiAnezB9J1wiLCBhdHRyaWJ1dGUpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNUYWdQcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGJ1aWxkIEFyZ3VtZW50IGxpc3QgZnJvbSB0aGUgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgR2V0QXJndW1lbnRMaXN0KCk6IFByb21pc2U8QXJndW1lbnRzTGlzdD4ge1xyXG4gICAgbGV0IGFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG4gICAgbGV0IEFyZ0xpc3RQcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSQU1FVEVSUyk7XHJcbiAgICBpZiAoQXJnTGlzdFByb3AgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG5cclxuICAgIGxldCBwYXJtczogc3RyaW5nID0gYXdhaXQgQXJnTGlzdFByb3AuZ2V0VmFsdWUoKTtcclxuICAgIGlmIChwYXJtcyAhPT0gbnVsbCkge1xyXG4gICAgICBhcmdMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgICAgYXJnTGlzdC5maWxsTGlzdChwYXJtcywgPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpO1xyXG4gICAgICBpZiAodGhpcy5yZWZyZXNoT25TdHJpbmcgIT09IG51bGwpXHJcbiAgICAgICAgYXJnTGlzdC5SZWZyZXNoT25TdHJpbmcgPSB0aGlzLnJlZnJlc2hPblN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBhcmdMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoaXMgY29udHJvbCBpcyBkZXNjZW5kYW50IG9mIHRoZSBwYXJlbnRGb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudEZvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNEZXNjZW5kZW50KHBhcmVudEZvcm06IE1nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzRGVzY2VuZGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNoZWNrQ3VycmVudEZvcm06IE1nRm9ybSA9IDxNZ0Zvcm0+c3VwZXIuZ2V0Rm9ybSgpO1xyXG5cclxuICAgIERlYnVnLkFzc2VydChwYXJlbnRGb3JtICE9PSBudWxsKTtcclxuXHJcbiAgICB3aGlsZSAoIWlzRGVzY2VuZGVudCAmJiBjaGVja0N1cnJlbnRGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChwYXJlbnRGb3JtID09PSBjaGVja0N1cnJlbnRGb3JtKVxyXG4gICAgICAgIGlzRGVzY2VuZGVudCA9IHRydWU7XHJcblxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgY3VyclRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmNoZWNrQ3VycmVudEZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIGlmIChjdXJyVGFzay5nZXRQYXJlbnQoKSAhPT0gbnVsbClcclxuICAgICAgICAgIGNoZWNrQ3VycmVudEZvcm0gPSA8TWdGb3JtPmN1cnJUYXNrLmdldFBhcmVudCgpLmdldEZvcm0oKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRGVzY2VuZGVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZWZyZXNoIGNvbnRyb2wgZGlzcGxheSBpZiBpdCBoYXMgYSBwcm9wZXJ0eSB3aGljaCBpcyBhbiBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaE9uRXhwcmVzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKHRoaXMuX3Byb3BUYWIgPT09IG51bGwgPyAwIDogdGhpcy5fcHJvcFRhYi5nZXRTaXplKCkpO1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5O1xyXG4gICAgbGV0IHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiAhcmVmcmVzaDsgaSsrKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLl9wcm9wVGFiLmdldFByb3AoaSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHByb3AuZ2V0SUQoKSkge1xyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQTpcclxuICAgICAgICAgIGlmICghcHJvcC5pc0V4cHJlc3Npb24oKSAmJiB0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUYXNrKCkgIT09IHRoaXMuZ2V0Rm9ybSgpLmdldFRhc2soKSkge1xyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgLyogIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1BVDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEU6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FTkFCTEVEOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFOR0U6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUkFOU0xBVE9SOlxyXG4gICAgICAgICAgaWYgKHByb3AuaXNFeHByZXNzaW9uKCkpXHJcbiAgICAgICAgICAgIHJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWZyZXNoKVxyXG4gICAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGludm9rZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpbnZva2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgdGhlIGNvbnRyb2wgaXMgbm90IHZpc2libGUsIG5vdCBlbmFibGVkIG9yIG5vdCBwYXJrYWJsZSBza2lwIHRoaXMgY29udHJvbFxyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQYXJrYWJsZSh0cnVlKSkge1xyXG4gICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aE1nQ29udHJvbEJhc2UodGhpcywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYKTtcclxuICAgICAgaW52b2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52b2tlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9ICFzdXBlci5pc0ltYWdlQ29udHJvbCgpO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRCwgdHJ1ZSk7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRSwgdHJ1ZSk7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHN1cGVyLmlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgdGhlIHN1YmZvcm0gdGFzayBhY2NvcmRpbmcgdG8gaXRzIGlkIGFuZCBzYXZlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpbml0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICBpZiAoc3VwZXIuaXNTdWJmb3JtKCkpXHJcbiAgICAgIHRoaXMuX3N1YmZvcm1UYXNrID0gPFRhc2tCYXNlPkd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRoaXMuX3N1YmZvcm1UYXNrSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgY29udHJvbCdzIHBhcmVudFRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRUYWJsZSgpOiBNZ0NvbnRyb2wge1xyXG4gICAgcmV0dXJuIDxNZ0NvbnRyb2w+dGhpcy5fcGFyZW50VGFibGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVzdG9yZSBhbmQgZGlzcGxheSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBjb250cm9sIHVzZWQgd2hlbiB0aGUgY29udHJvbCBpcyBub3QgbW9kaWZpYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcmVzdG9yZU9sZFZhbHVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKVxyXG4gICAgICBhd2FpdCAoPEZpZWxkPnRoaXMuX2ZpZWxkKS51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3VwZXIucmVzZXRQcmV2VmFsKCk7XHJcbiAgICAgIGF3YWl0IHN1cGVyLlNldEFuZFJlZnJlc2hEaXNwbGF5VmFsdWUoYXdhaXQgdGhpcy5nZXRNZ1ZhbHVlKHRoaXMuVmFsdWUpLCB0aGlzLklzTnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgZXZlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0UnRFdnRUYXNrKGN1clRhc2s6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBjdXJUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFJ0RXZ0VGFzaygpOiBUYXNrQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcnRFdnRUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHN1YmZvcm0gdGFzayBpZCBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0U3ViZm9ybVRhc2tJZCh0YXNrSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0ZvY3VzZWRTdG9wRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbWVtYmVyIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb2N1c2VkU3RvcEV4ZWN1dGlvblwiPjwvcGFyYW0+XHJcbiAgc2V0Rm9jdXNlZFN0b3BFeGVjdXRpb24oZm9jdXNlZFN0b3BFeGVjdXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uID0gZm9jdXNlZFN0b3BFeGVjdXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmwtXCI+VGhlIGN0cmwgdG8gY2hlY2suIGNhbiBiZSBmcmFtZSBmb3JtIGFuZCBhbHNvIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgb25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChzdXBlci5nZXRGb3JtKCkuaXNTdWJGb3JtKCkgJiYgY3RybC5nZXRGb3JtKCkuaXNTdWJGb3JtKCkpIHtcclxuICAgICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKSA9PT0gY3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpKVxyXG4gICAgICAgICAgcmV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ1ZSBpZiB0aGUgY3RybHMgYXJlIG9uIGRpZmZlcmVudCBmb3Jtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uRGlmZkZvcm0oY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTdWJmb3JtOiBib29sZWFuID0gc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpIHx8IGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpO1xyXG4gICAgbGV0IGlzT25EaWZmRm9ybTogYm9vbGVhbiA9IChpc1N1YmZvcm0gKSAmJiAhdGhpcy5vblRoZVNhbWVTdWJGb3JtQ29udHJvbChjdHJsKTtcclxuXHJcbiAgICByZXR1cm4gaXNPbkRpZmZGb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0luQ29udHJvbFN1ZmZpeCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbkNvbnRyb2xTdWZmaXhcIj48L3BhcmFtPlxyXG4gIHNldEluQ29udHJvbFN1ZmZpeChpbkNvbnRyb2xTdWZmaXg6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2luQ29udHJvbFN1ZmZpeCA9IGluQ29udHJvbFN1ZmZpeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGUgY29udHJvbCBoYXMgc2VsZWN0IHByb2dyYW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEhhc1NlbGVjdFByb2dyYW0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgSGFzU2VsZWN0UHJvZ3JhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHNlbGVjdFByb2dQcm9wOiBQcm9wZXJ0eSA9IHN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgaWYgKHNlbGVjdFByb2dQcm9wICE9PSBudWxsICYmIHNlbGVjdFByb2dQcm9wLkdldENvbXB1dGVkVmFsdWUoKSAhPT0gbnVsbClcclxuICAgICAgSGFzU2VsZWN0UHJvZ3JhbSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIEhhc1NlbGVjdFByb2dyYW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgdXNlIHRoZSBoYW5kbGVyIFpPT00gKGZvciBzZWxlY3QgcHJvZ3JhbSBvciBab29tIGhhbmRsZXIpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHVzZVpvb21IYW5kbGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSGFzWm9vbUhhbmRsZXIgfHwgKHN1cGVyLmdldEZpZWxkKCkgIT09IG51bGwgJiYgKCg8RmllbGQ+c3VwZXIuZ2V0RmllbGQoKSkuZ2V0SGFzWm9vbUhhbmRsZXIoKSB8fCAodGhpcy5IYXNTZWxlY3RQcm9ncmFtKCkpKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVXBkYXRlIGJvb2xlYW4gcHJvcGVydHkoZXg6dmlzaWJsZVxcZW5hYmxlKSBvZiBjb250cm9sIGFuZCBpdCdzIGNoaWxkcmVuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnByb3BlcnR5IGlkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPmNvbW1hbmQgdHlwZSB0aGF0IGJlbG9uZyB0byB0aGUgcHJvcCBpZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlVGhpc1wiPjwvcGFyYW0+XHJcbiAgYXN5bmMgdXBkYXRlUHJvcGVydHlMb2dpY05lc3RpbmcocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuLCB1cGRhdGVUaGlzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodmFsICYmIHN1cGVyLmhhdmVUb0NoZWNrUGFyZW50VmFsdWUoKSlcclxuICAgICAgdmFsID0gc3VwZXIuaXNQYXJlbnRQcm9wVmFsdWUocHJvcElkKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgc3ViZm9ybSBtdXN0IGJlIGludmlzaWJsZSAoQ1RSTF9TVUJGT1JNX05PTkUpIHdlIGNoYW5nZSBpdHMgdmlzaWJpbGl0eSB0byBmYWxzZVxyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5pc1N1YmZvcm0oKSAmJiBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB0aGlzLlNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKSlcclxuICAgICAgdmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHVwZGF0ZVRoaXMpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLCBzdXBlci5nZXREaXNwbGF5TGluZShmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFID8gSHRtbFByb3BlcnRpZXMuVmlzaWJsZSA6IEh0bWxQcm9wZXJ0aWVzLkVuYWJsZWQsIHZhbCk7XHJcblxyXG4gICAgfVxyXG4gICAgYXdhaXQgc3VwZXIudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgdmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKGZvciBleGFtcGxlIENUUkxfU1VCRk9STV9OT05FKSByZXR1cm5zIHRydWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2V0U3ViZm9ybUludmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIGxldCBzZXRJbnZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdWJmb3JtVHlwZTogU3ViZm9ybVR5cGUgPSA8U3ViZm9ybVR5cGU+c3VwZXIuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVUJGT1JNX1RZUEUpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICBpZiAoc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUgJiYgdGhpcy5nZXRTdWJmb3JtVGFza0lkKCkgPT09IG51bGwpXHJcbiAgICAgIHNldEludmlzaWJsZSA9IHRydWU7XHJcbiAgICByZXR1cm4gc2V0SW52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZXMgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHkgb2Ygc3ViZm9ybSBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5JZCBvZiB2aXNpYmlsaXR5IG9yIGVuYWJsZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPnR5cGUgb2YgdGhlIEdVSSBjb21tYW5kPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnZhbHVlIGZvciB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVN1YmZvcm1DaGlsZHJlblByb3BWYWx1ZShwcm9wSWQ6IG51bWJlciwgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCB2YWw6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIERlYnVnLkFzc2VydChzdXBlci5pc1N1YmZvcm0oKSk7XHJcblxyXG4gICAgaWYgKCEoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLkFmdGVyRmlyc3RSZWNvcmRQcmVmaXgpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrSWQgIT09IG51bGwgfHwgc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUpIHtcclxuICAgICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsICYmIHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKSB7XHJcbiAgICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsICYmIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5SZWZyZXNoT25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICBhd2FpdCAoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLlN1YmZvcm1SZWZyZXNoKHRoaXMuX3N1YmZvcm1UYXNrLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdWJmb3JtRm9ybTogTWdGb3JtQmFzZSA9IHRoaXMuX3N1YmZvcm1UYXNrLmdldEZvcm0oKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3ViZm9ybUZvcm0uZ2V0Q3RybENvdW50KCk7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGNoaWxkOiBNZ0NvbnRyb2xCYXNlID0gc3ViZm9ybUZvcm0uZ2V0Q3RybChpKTtcclxuICAgICAgICAgIC8vIFFDUiAjOTgxNTU1LCBXZSBzaG91bGQgbm90IGFmZmVjdCB2aXNpYmlsaXR5IG9mIHRoZSBUYWJsZUNvbHVtbnMgc2luY2UgaXQgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUuU2V0dGluZyB2aXNpYmlsaXR5XHJcbiAgICAgICAgICAvLyBvZiBhbGwgY29sdW1ucyB0byBmYWxzZSBwcmV2ZW50cyB0YWJsZSBwbGFjZW1lbnRcclxuICAgICAgICAgIGlmICghY2hpbGQuaXNDb2x1bW5Db250cm9sKCkpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgbGV0IGNoaWxkVmFsdWU6IGJvb2xlYW4gPSBhd2FpdCBjaGlsZC5jaGVja1Byb3AocHJvcElkLCB0cnVlKSAmJiB2YWw7XHJcbiAgICAgICAgICBpZiAoY2hpbGRWYWx1ZSlcclxuICAgICAgICAgICAgY2hpbGRWYWx1ZSA9IGNoaWxkLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKVxyXG4gICAgICAgICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhjb21tYW5kVHlwZSwgY2hpbGQsIGNoaWxkLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgICBhd2FpdCBjaGlsZC51cGRhdGVDaGlsZHJlblByb3BWYWx1ZShwcm9wSWQsIGNvbW1hbmRUeXBlLCBjaGlsZFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB2YWwpICYmICF0aGlzLlN1YmZvcm1Mb2FkZWQpIHtcclxuICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TVUJGT1JNX09QRU4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgc3ViZm9ybSB0YXNrIGlkIGZvciBhIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFN1YmZvcm1UYXNrKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgYmVoYXZpb3VyIGZvciB0aGUgdGFibGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRUYWJsZUJlaGF2aW91cigpOiBUYWJsZUJlaGF2aW91ciB7XHJcbiAgICByZXR1cm4gVGFibGVCZWhhdmlvdXIuVW5saW1pdGVkSXRlbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdmFsaWRhdGUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGFuZCBzZXQgaXQncyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJOZXdWYWx1ZVwiPnRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVDdHJsXCI+aWYgdHJ1ZSB0aGVuIHRoZSBjb250cm9sIHdpbGwgYmUgdXBkYXRlZCB1cG9uIHN1Y2Nlc3NmdWwgY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZXR1cm5zIGlmIHZhbGlkYXRpb24gaXMgc3VjY2Vzc2Z1bDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlKE5ld1ZhbHVlOiBhbnksIHVwZGF0ZUN0cmw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHN1cGVyLlVwZGF0ZU1vZGlmaWVkQnlVc2VyKE5ld1ZhbHVlKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaXMgbnVsbCBvciB3YXMgY2hhbmdlZFxyXG4gICAgLy8gY2hlY2sgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBjb250cm9sIHZhbHVlXHJcbiAgICBpZiAodGhpcy5Nb2RpZmllZEJ5VXNlcikge1xyXG4gICAgICBsZXQgY3RybEN1cnJWYWx1ZTogYW55ID0gdGhpcy5WYWx1ZTtcclxuICAgICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscztcclxuXHJcbiAgICAgIGlmIChzdXBlci5nZXRQSUMoKSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgdmQgPSBzdXBlci5idWlsZFBpY3R1cmUoY3RybEN1cnJWYWx1ZSwgTmV3VmFsdWUpO1xyXG5cclxuICAgICAgdmQuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgIC8vIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZHMgdmFsdWUgd2FzIHdyb25nXHJcbiAgICAgIGlmICh2ZC5WYWxpZGF0aW9uRmFpbGVkKSB7XHJcbiAgICAgICAgdGhpcy5Nb2RpZmllZEJ5VXNlciA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5Jc0ludGVyYWN0aXZlVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgIHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkuc2V0RGF0YVN5bmNlZChmYWxzZSk7XHJcblxyXG4gICAgICAvLyBzZXQgdGhlIHZhbHVlIChoYW5kbGUgcmVjb21wdXRlLCBldGMuKVxyXG4gICAgICBpZiAodXBkYXRlQ3RybCkge1xyXG4gICAgICAgIC8vIFFDUiM0NDEwMjA6QWZ0ZXIgdmFsaWRhdGluZyBkaXNwbGF5IHZhbHVlLCB0YWtlIHRoZSBzYW1lIGN0cmwncyB2YWx1ZSBmb3IgbWcgdmFsdWUgY29udmVyc2lvbi5cclxuICAgICAgICAvLyBVc2luZyBkaXNwbGF5IHZhbHVlIGdlbmVyYXRlZCBmcm9tIE1nVmFsdWUsIG1pZ2h0IGhhdmUgcHJvYmxlbSB0byBjb252ZXJ0IGJhY2sgdG8gTWdWYWwgdXNpbmcgcGljdHVyZSBkdWUgdG8gYWxpZ25tZW50IChjaGFuZ2VkIGFsaWdubWVudCApLlxyXG4gICAgICAgIC8vIFRoaXMgcHJvYmxlbSBvY2N1cnMgZm9yIG51bWVyaWMuXHJcbiAgICAgICAgLy8gVGhlIGZpeCBzaG91bGQgYmUgYXBwbGljYWJsZSBmb3IgbnVtZXJpYyB0eXBlIG9ubHkuIEJlY2F1c2UgZGF0ZSBhbmQgdGltZSBmaWVsZCB3aXRoIGNvbXBsZXggbWFza2luZyBoYXZlIHByb2JsZW0gb24gdXNpbmcgY3RybCdzIHZhbHVlLlxyXG4gICAgICAgIC8vIFJlZmVyIGRhdGUgcWNyczogIzI5MTY2NiwgIzMwNzM1MywgIzQzNDI0MSBhbmQgZm9yIHRpbWUsIGNoZWNrIGRlZmF1bHQgdmFsdWUgd2hlbiBmb3JtYXQgaXMgJ0hILU1NLVNTIFBNWkAnXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDICYmIHR5cGVvZiBOZXdWYWx1ZSA9PT0gJ3N0cmluZycgJiYgTmV3VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICB2ZC5zZXRWYWx1ZShOZXdWYWx1ZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUodmQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIHJlY2VpdmVkIGZyb20gdGhlIHVzZXIgaW5wdXQgYWZ0ZXIgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBmaWVsZCBjb25uZWN0ZWQgdG8gdGhpc1xyXG4gIC8vLyAgIGNvbnRyb2wgKGlmIGV4aXN0cylcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmRcIj50aGUgdmFsaWRhdGlvbiBkZXRhaWxzIG9iamVjdDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZSh2ZDogVmFsaWRhdGlvbkRldGFpbHMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSB2ZC5nZXRJc051bGwoKTtcclxuICAgIGxldCBuZXdWYWx1ZTogYW55ID0gdmQuZ2V0RGlzcFZhbHVlKCk7XHJcbiAgICBsZXQgbWdWYWw6IHN0cmluZztcclxuXHJcbiAgICBpZiAoIWlzTnVsbCB8fCAhdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICBtZ1ZhbCA9IGF3YWl0IHN1cGVyLmdldE1nVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgLy8gaXQncyBpbm5lciB2YWx1ZSAtPiB0cmFuc2xhdGUgaXQgdG8gdGhlIGRpc3BsYXlcclxuICAgIGVsc2VcclxuICAgICAgbWdWYWwgPSAoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyB0aGlzLl9maWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCkgOiB0aGlzLl9maWVsZC5nZXREZWZhdWx0VmFsdWUoKSk7XHJcbiAgICBpZiAobWdWYWwgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmICghKG5ld1ZhbHVlID09PSB0aGlzLlZhbHVlKSB8fCB0aGlzLktleVN0cm9rZU9uIHx8IHRoaXMuSXNOdWxsICE9PSBpc051bGwpKSB7XHJcbiAgICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShtZ1ZhbCwgaXNOdWxsLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vIGRlZmVjdCAxMjc3MzQgOiB2YWx1ZSBvZiB0aGUgZmllbGQgbWlnaHQgYmUgY2hhbmdlZCBhbHJlYWR5IGluc2lkZSBhIGNvbnRyb2wgY2hhbmdlIGhhbmRsZXJcclxuICAgICAgICAvLyB0byBhdm9pZCB1cGRhdGluZyBvbGQgdmFsdWUgYW5kIG92ZXJydW5uaW5nIHRoZSB2YWx1ZSBmcjBtIHRoZSBjb250cm9sIGNoYW5nZVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZmllbGQuIChuZWVkIHRvIGJlIGRvbmUgZm9yIGNvbWJvIGFuZCBsaXN0IGJveCwgYnV0IGl0J3MgdG9vIHJpc2t5XHJcbiAgICAgICAgLy8gYW5kIHVubGlrZWx5IHRvIGhhcHBlbiwgc28gdGhlIGZpeCB3aWxsIGJlIGZvciBjaGVjayBib3ggb25seSlcclxuXHJcbiAgICAgICAgaWYgKHN1cGVyLmlzQ2hlY2tCb3goKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgbWdWYWwgPSAoPEZpZWxkPnRoaXMuX2ZpZWxkKS5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiBmaWVsZCB2YWx1ZSBpcyBudWxsICYgaGFzIG51bGwgZGlzcGxheSB2YWx1ZSwgdGFrZSBldmFsdWF0ZWQgbnVsbCBkaXNwbGF5IHZhbHVlLlxyXG4gICAgICBpZiAoKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIGlzTnVsbCkgJiYgdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICAgIG1nVmFsID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKG1nVmFsLCBpc051bGwpO1xyXG4gICAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IGZhbHNlO1xyXG4gICAgICAvLyBRQ1IgIzQzODc1My4gUHJldmVudCBSUCZSUyBjeWNsZSwgd2hlbiBpdCdzIG5vdCBuZWVkZWQuXHJcbiAgICAgIHRoaXMuS2V5U3Ryb2tlT24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVmcmVzaCB0aGUgaXRlbSBsaXN0IG9mIHJhZGlvIGJ1dHRvbiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhlY0NvbXB1dGVDaG9pY2VcIj48L3BhcmFtPlxyXG4gIGFzeW5jIHJlZnJlc2hBbmRTZXRJdGVtc0xpc3RGb3JSYWRpb0J1dHRvbihsaW5lOiBudW1iZXIsIGV4ZWNDb21wdXRlQ2hvaWNlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci5yZWZyZXNoQW5kU2V0SXRlbXNMaXN0Rm9yUmFkaW9CdXR0b24obGluZSwgZXhlY0NvbXB1dGVDaG9pY2UpO1xyXG5cclxuICAgIC8vIElmIHRoZSBwYXJraW5nIHdhcyBvbiB0aGUgcmFkaW8gY29udHJvbCwgd2UgbmVlZCB0byByZXNldCB0aGUgZm9jdXMgYmVjYXVzZVxyXG4gICAgLy8gdGhlIG9sZCBjb250cm9scyB3ZXJlIGRpc3Bvc2VkIGFuZCB0aGUgbmV3IG9uZXMgYXJlIGNyZWF0ZWQuXHJcbiAgICAvLyBpZiAobGFzdEZvY3VzZWRUYXNrICE9PSBudWxsICYmIHRoaXMgPT09IGxhc3RGb2N1c2VkVGFzay5nZXRMYXN0UGFya2VkQ3RybCgpKVxyXG4gICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhDb21tYW5kVHlwZS5TRVRfRk9DVVMsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHN1YmZvcm0gdGFzayBvZiB0aGlzIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U3ViZm9ybVRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1YmZvcm1UYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHN1YmZvcm0gdGFzayBvZiB0aGlzIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXRTdWJmb3JtVGFzaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrID0gbnVsbDtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSBcIjBcIjtcclxuICB9XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIE1nRm9ybSBvZiB0aGUgc3ViZm9ybSBjb250cm9sIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldFN1YmZvcm1NZ0Zvcm0oKTogTWdGb3JtQmFzZSB7XHJcbiAgICBsZXQgZm9ybTogTWdGb3JtQmFzZSA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5fc3ViZm9ybVRhc2sgIT09IG51bGwpXHJcbiAgICAgIGZvcm0gPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2hlY2sgd2hldGhlciB0YWJsZSBiZWluZyB1c2VkIHdpdGggYWJzb2x1dGUgc2Nyb2xsYmFyIHRodW1iLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSXNUYWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhcigpOiBib29sZWFuIHtcclxuICAgIGxldCB0YWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgRGVidWcuQXNzZXJ0KHRoaXMuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCTEUsIFwiSW4gTWdDb250cm9sLklzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogTm90IGEgdGFibGUgY29udHJvbC5cIik7XHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYi5wcm9wRXhpc3RzKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVJfVEhVTUIpKVxyXG4gICAgICB0YWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhciA9ICh0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVJfVEhVTUIpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCkgPT09IDxudW1iZXI+U2Nyb2xsQmFyVGh1bWJUeXBlLkFic29sdXRlKTtcclxuXHJcbiAgICByZXR1cm4gdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgcmV0dXJuLXRvLWNvbnRyb2wgcG9pbnRzIHRvIGFuIGV4aXN0aW5nIHRhc2suPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyB2YWxpZFJldHVyblRvQ3RybCgpOiBib29sZWFuIHtcclxuICAgIGlmIChNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsICE9PSBudWxsICYmIE1nQ29udHJvbC5SZXR1cm5Ub0N0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5pc0Fib3J0aW5nKCkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgb25lIG1heSBkaXJlY3RseSAobm90IHZpYSB0aGUgZ3VpKSBzZXQgYSB2YWx1ZSBvbiB0aGlzIGNvbnRyb2wuPC9zdW1tYXJ5PlxyXG4gIG1heVNldFZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0aGlzLlR5cGUpIHtcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DSEVDS0JPWDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTUJPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0xJU1Q6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfUkFESU86XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJldmVudCB2YWx1ZSBzZXR0aW5nIGlmIHRoZSBjb250cm9sIGRvZXNuJ3QgaGF2ZSBhIGZpZWxkLCBvciBpZiBpdCBnZXRzIGl0cyB2YWx1ZSBmcm9tIGFuIGV4cHJlc3Npb25cclxuICAgIGlmICh0aGlzLl9maWVsZCA9PT0gbnVsbCB8fCB0aGlzLl92YWxFeHBJZCA+IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5pc01vZGlmaWFibGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVja3MgaWYgYSB2YWx1ZSBtYXkgYmUgc2V0LCBhbmQgdHJpZXMgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJOZXdWYWx1ZVwiPnRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVDdHJsXCI+aWYgdHJ1ZSB0aGVuIHRoZSBjb250cm9sIHdpbGwgYmUgdXBkYXRlZCB1cG9uIHN1Y2Nlc3NmdWwgY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZXR1cm5zIGlmIHZhbHVlIHNldHRpbmcgd2FzIHN1Y2Nlc3NmdWwgPC9yZXR1cm5zPlxyXG4gIGFzeW5jIHZhbGlkYXRlQW5kU2V0VmFsdWVJZkFsbG93ZWQoTmV3VmFsdWU6IGFueSwgcmVmcmVzaERpc3BsYXk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5tYXlTZXRWYWx1ZSgpKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJVbmFibGUgdG8gY2hhbmdlIHZhbHVlIG9mIGNvbnRyb2wgezB9OiBUaGUgY29udHJvbCBpcyByZWFkLW9ubHkuXCIsIHRoaXMuTmFtZSkpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldFZhbCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRTZXRWYWx1ZShOZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAoIXJldFZhbClcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIlZhbHVlIHZhbGlkYXRpb24gZmFpbGVkIGZvciB7MH0uXCIsIHRoaXMuTmFtZSkpO1xyXG5cclxuICAgIGlmIChyZWZyZXNoRGlzcGxheSkge1xyXG4gICAgICBDb21tYW5kcy5hZGROb1BhcmFtZXRlcnMoQ29tbWFuZFR5cGUuUkVGUkVTSF9UQVNLLCB0aGlzLmdldEZvcm0oKSk7XHJcbiAgICAgIENvbW1hbmRzLmludm9rZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vcmVmcmVzaCB0YXNrXHJcbiAgICByZXR1cm4gcmV0VmFsO1xyXG4gIH1cclxufVxyXG4iXX0=
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVE3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFnQmxDLFVBQVU7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FB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QUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTTtZQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakcsSUFBSSxjQUFjLEVBQUU7WUFDbEIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUdELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBcGtCTSxzQkFBWSxHQUFjLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tbWFuZHMsXHJcbiAgQ29tbWFuZFR5cGUsXHJcbiAgR3VpRGF0YUNvbGxlY3Rpb24sXHJcbiAgSHRtbFByb3BlcnRpZXMsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBNZ0Zvcm1CYXNlLFxyXG4gIFByb3BlcnR5LFxyXG4gIFByb3BJbnRlcmZhY2UsXHJcbiAgUHJvcFBhcmVudEludGVyZmFjZSxcclxuICBWYWxpZGF0aW9uRGV0YWlsc1xyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtEZWJ1ZywgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gJy4uL3J0L0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQge1Rhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tICcuL01nRm9ybSc7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0ci50cmltKCkgIT0gXCJcIilcclxuICAgICAgICAgICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFRlJFU0hPTjpcclxuICAgICAgICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gdmFsdWVTdHIudHJpbSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlzVGFnUHJvY2Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbnJlY29nbml6ZWQgYXR0cmlidXRlOiAnezB9J1wiLCBhdHRyaWJ1dGUpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNUYWdQcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGJ1aWxkIEFyZ3VtZW50IGxpc3QgZnJvbSB0aGUgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgR2V0QXJndW1lbnRMaXN0KCk6IFByb21pc2U8QXJndW1lbnRzTGlzdD4ge1xyXG4gICAgbGV0IGFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG4gICAgbGV0IEFyZ0xpc3RQcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSQU1FVEVSUyk7XHJcbiAgICBpZiAoQXJnTGlzdFByb3AgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG5cclxuICAgIGxldCBwYXJtczogc3RyaW5nID0gYXdhaXQgQXJnTGlzdFByb3AuZ2V0VmFsdWUoKTtcclxuICAgIGlmIChwYXJtcyAhPT0gbnVsbCkge1xyXG4gICAgICBhcmdMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgICAgYXJnTGlzdC5maWxsTGlzdChwYXJtcywgPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpO1xyXG4gICAgICBpZiAodGhpcy5yZWZyZXNoT25TdHJpbmcgIT09IG51bGwpXHJcbiAgICAgICAgYXJnTGlzdC5SZWZyZXNoT25TdHJpbmcgPSB0aGlzLnJlZnJlc2hPblN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBhcmdMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoaXMgY29udHJvbCBpcyBkZXNjZW5kYW50IG9mIHRoZSBwYXJlbnRGb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudEZvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNEZXNjZW5kZW50KHBhcmVudEZvcm06IE1nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzRGVzY2VuZGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNoZWNrQ3VycmVudEZvcm06IE1nRm9ybSA9IDxNZ0Zvcm0+c3VwZXIuZ2V0Rm9ybSgpO1xyXG5cclxuICAgIERlYnVnLkFzc2VydChwYXJlbnRGb3JtICE9PSBudWxsKTtcclxuXHJcbiAgICB3aGlsZSAoIWlzRGVzY2VuZGVudCAmJiBjaGVja0N1cnJlbnRGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChwYXJlbnRGb3JtID09PSBjaGVja0N1cnJlbnRGb3JtKVxyXG4gICAgICAgIGlzRGVzY2VuZGVudCA9IHRydWU7XHJcblxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgY3VyclRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmNoZWNrQ3VycmVudEZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIGlmIChjdXJyVGFzay5nZXRQYXJlbnQoKSAhPT0gbnVsbClcclxuICAgICAgICAgIGNoZWNrQ3VycmVudEZvcm0gPSA8TWdGb3JtPmN1cnJUYXNrLmdldFBhcmVudCgpLmdldEZvcm0oKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRGVzY2VuZGVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZWZyZXNoIGNvbnRyb2wgZGlzcGxheSBpZiBpdCBoYXMgYSBwcm9wZXJ0eSB3aGljaCBpcyBhbiBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaE9uRXhwcmVzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKHRoaXMuX3Byb3BUYWIgPT09IG51bGwgPyAwIDogdGhpcy5fcHJvcFRhYi5nZXRTaXplKCkpO1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5O1xyXG4gICAgbGV0IHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiAhcmVmcmVzaDsgaSsrKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLl9wcm9wVGFiLmdldFByb3AoaSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHByb3AuZ2V0SUQoKSkge1xyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQTpcclxuICAgICAgICAgIGlmICghcHJvcC5pc0V4cHJlc3Npb24oKSAmJiB0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUYXNrKCkgIT09IHRoaXMuZ2V0Rm9ybSgpLmdldFRhc2soKSkge1xyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgLyogIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1BVDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEU6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FTkFCTEVEOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFOR0U6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUkFOU0xBVE9SOlxyXG4gICAgICAgICAgaWYgKHByb3AuaXNFeHByZXNzaW9uKCkpXHJcbiAgICAgICAgICAgIHJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWZyZXNoKVxyXG4gICAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGludm9rZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpbnZva2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgdGhlIGNvbnRyb2wgaXMgbm90IHZpc2libGUsIG5vdCBlbmFibGVkIG9yIG5vdCBwYXJrYWJsZSBza2lwIHRoaXMgY29udHJvbFxyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQYXJrYWJsZSh0cnVlKSkge1xyXG4gICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aE1nQ29udHJvbEJhc2UodGhpcywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYKTtcclxuICAgICAgaW52b2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52b2tlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9ICFzdXBlci5pc0ltYWdlQ29udHJvbCgpO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRCwgdHJ1ZSk7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRSwgdHJ1ZSk7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHN1cGVyLmlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgdGhlIHN1YmZvcm0gdGFzayBhY2NvcmRpbmcgdG8gaXRzIGlkIGFuZCBzYXZlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpbml0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICBpZiAoc3VwZXIuaXNTdWJmb3JtKCkpXHJcbiAgICAgIHRoaXMuX3N1YmZvcm1UYXNrID0gPFRhc2tCYXNlPkd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRoaXMuX3N1YmZvcm1UYXNrSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgY29udHJvbCdzIHBhcmVudFRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRUYWJsZSgpOiBNZ0NvbnRyb2wge1xyXG4gICAgcmV0dXJuIDxNZ0NvbnRyb2w+dGhpcy5fcGFyZW50VGFibGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVzdG9yZSBhbmQgZGlzcGxheSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBjb250cm9sIHVzZWQgd2hlbiB0aGUgY29udHJvbCBpcyBub3QgbW9kaWZpYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcmVzdG9yZU9sZFZhbHVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKVxyXG4gICAgICBhd2FpdCAoPEZpZWxkPnRoaXMuX2ZpZWxkKS51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3VwZXIucmVzZXRQcmV2VmFsKCk7XHJcbiAgICAgIGF3YWl0IHN1cGVyLlNldEFuZFJlZnJlc2hEaXNwbGF5VmFsdWUoYXdhaXQgdGhpcy5nZXRNZ1ZhbHVlKHRoaXMuVmFsdWUpLCB0aGlzLklzTnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgZXZlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0UnRFdnRUYXNrKGN1clRhc2s6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBjdXJUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFJ0RXZ0VGFzaygpOiBUYXNrQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcnRFdnRUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHN1YmZvcm0gdGFzayBpZCBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0U3ViZm9ybVRhc2tJZCh0YXNrSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0ZvY3VzZWRTdG9wRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbWVtYmVyIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb2N1c2VkU3RvcEV4ZWN1dGlvblwiPjwvcGFyYW0+XHJcbiAgc2V0Rm9jdXNlZFN0b3BFeGVjdXRpb24oZm9jdXNlZFN0b3BFeGVjdXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uID0gZm9jdXNlZFN0b3BFeGVjdXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmwtXCI+VGhlIGN0cmwgdG8gY2hlY2suIGNhbiBiZSBmcmFtZSBmb3JtIGFuZCBhbHNvIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgb25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChzdXBlci5nZXRGb3JtKCkuaXNTdWJGb3JtKCkgJiYgY3RybC5nZXRGb3JtKCkuaXNTdWJGb3JtKCkpIHtcclxuICAgICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKSA9PT0gY3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpKVxyXG4gICAgICAgICAgcmV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ1ZSBpZiB0aGUgY3RybHMgYXJlIG9uIGRpZmZlcmVudCBmb3Jtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uRGlmZkZvcm0oY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTdWJmb3JtOiBib29sZWFuID0gc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpIHx8IGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpO1xyXG4gICAgbGV0IGlzT25EaWZmRm9ybTogYm9vbGVhbiA9IChpc1N1YmZvcm0gKSAmJiAhdGhpcy5vblRoZVNhbWVTdWJGb3JtQ29udHJvbChjdHJsKTtcclxuXHJcbiAgICByZXR1cm4gaXNPbkRpZmZGb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0luQ29udHJvbFN1ZmZpeCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbkNvbnRyb2xTdWZmaXhcIj48L3BhcmFtPlxyXG4gIHNldEluQ29udHJvbFN1ZmZpeChpbkNvbnRyb2xTdWZmaXg6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2luQ29udHJvbFN1ZmZpeCA9IGluQ29udHJvbFN1ZmZpeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGUgY29udHJvbCBoYXMgc2VsZWN0IHByb2dyYW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEhhc1NlbGVjdFByb2dyYW0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgSGFzU2VsZWN0UHJvZ3JhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHNlbGVjdFByb2dQcm9wOiBQcm9wZXJ0eSA9IHN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgaWYgKHNlbGVjdFByb2dQcm9wICE9PSBudWxsICYmIHNlbGVjdFByb2dQcm9wLkdldENvbXB1dGVkVmFsdWUoKSAhPT0gbnVsbClcclxuICAgICAgSGFzU2VsZWN0UHJvZ3JhbSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIEhhc1NlbGVjdFByb2dyYW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgdXNlIHRoZSBoYW5kbGVyIFpPT00gKGZvciBzZWxlY3QgcHJvZ3JhbSBvciBab29tIGhhbmRsZXIpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHVzZVpvb21IYW5kbGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSGFzWm9vbUhhbmRsZXIgfHwgKHN1cGVyLmdldEZpZWxkKCkgIT09IG51bGwgJiYgKCg8RmllbGQ+c3VwZXIuZ2V0RmllbGQoKSkuZ2V0SGFzWm9vbUhhbmRsZXIoKSB8fCAodGhpcy5IYXNTZWxlY3RQcm9ncmFtKCkpKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVXBkYXRlIGJvb2xlYW4gcHJvcGVydHkoZXg6dmlzaWJsZVxcZW5hYmxlKSBvZiBjb250cm9sIGFuZCBpdCdzIGNoaWxkcmVuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnByb3BlcnR5IGlkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPmNvbW1hbmQgdHlwZSB0aGF0IGJlbG9uZyB0byB0aGUgcHJvcCBpZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlVGhpc1wiPjwvcGFyYW0+XHJcbiAgYXN5bmMgdXBkYXRlUHJvcGVydHlMb2dpY05lc3RpbmcocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuLCB1cGRhdGVUaGlzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodmFsICYmIHN1cGVyLmhhdmVUb0NoZWNrUGFyZW50VmFsdWUoKSlcclxuICAgICAgdmFsID0gc3VwZXIuaXNQYXJlbnRQcm9wVmFsdWUocHJvcElkKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgc3ViZm9ybSBtdXN0IGJlIGludmlzaWJsZSAoQ1RSTF9TVUJGT1JNX05PTkUpIHdlIGNoYW5nZSBpdHMgdmlzaWJpbGl0eSB0byBmYWxzZVxyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5pc1N1YmZvcm0oKSAmJiBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB0aGlzLlNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKSlcclxuICAgICAgdmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHVwZGF0ZVRoaXMpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLCBzdXBlci5nZXREaXNwbGF5TGluZShmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFID8gSHRtbFByb3BlcnRpZXMuVmlzaWJsZSA6IEh0bWxQcm9wZXJ0aWVzLkVuYWJsZWQsIHZhbCk7XHJcblxyXG4gICAgfVxyXG4gICAgYXdhaXQgc3VwZXIudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgdmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKGZvciBleGFtcGxlIENUUkxfU1VCRk9STV9OT05FKSByZXR1cm5zIHRydWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2V0U3ViZm9ybUludmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIGxldCBzZXRJbnZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdWJmb3JtVHlwZTogU3ViZm9ybVR5cGUgPSA8U3ViZm9ybVR5cGU+c3VwZXIuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVUJGT1JNX1RZUEUpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICBpZiAoc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUgJiYgdGhpcy5nZXRTdWJmb3JtVGFza0lkKCkgPT09IG51bGwpXHJcbiAgICAgIHNldEludmlzaWJsZSA9IHRydWU7XHJcbiAgICByZXR1cm4gc2V0SW52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZXMgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHkgb2Ygc3ViZm9ybSBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5JZCBvZiB2aXNpYmlsaXR5IG9yIGVuYWJsZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPnR5cGUgb2YgdGhlIEdVSSBjb21tYW5kPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnZhbHVlIGZvciB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVN1YmZvcm1DaGlsZHJlblByb3BWYWx1ZShwcm9wSWQ6IG51bWJlciwgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCB2YWw6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIERlYnVnLkFzc2VydChzdXBlci5pc1N1YmZvcm0oKSk7XHJcblxyXG4gICAgaWYgKCEoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLkFmdGVyRmlyc3RSZWNvcmRQcmVmaXgpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrSWQgIT09IG51bGwgfHwgc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUpIHtcclxuICAgICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsICYmIHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKSB7XHJcbiAgICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsICYmIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5SZWZyZXNoT25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICBhd2FpdCAoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLlN1YmZvcm1SZWZyZXNoKHRoaXMuX3N1YmZvcm1UYXNrLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdWJmb3JtRm9ybTogTWdGb3JtQmFzZSA9IHRoaXMuX3N1YmZvcm1UYXNrLmdldEZvcm0oKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3ViZm9ybUZvcm0uZ2V0Q3RybENvdW50KCk7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGNoaWxkOiBNZ0NvbnRyb2xCYXNlID0gc3ViZm9ybUZvcm0uZ2V0Q3RybChpKTtcclxuICAgICAgICAgIC8vIFFDUiAjOTgxNTU1LCBXZSBzaG91bGQgbm90IGFmZmVjdCB2aXNpYmlsaXR5IG9mIHRoZSBUYWJsZUNvbHVtbnMgc2luY2UgaXQgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUuU2V0dGluZyB2aXNpYmlsaXR5XHJcbiAgICAgICAgICAvLyBvZiBhbGwgY29sdW1ucyB0byBmYWxzZSBwcmV2ZW50cyB0YWJsZSBwbGFjZW1lbnRcclxuICAgICAgICAgIGlmICghY2hpbGQuaXNDb2x1bW5Db250cm9sKCkpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgbGV0IGNoaWxkVmFsdWU6IGJvb2xlYW4gPSBhd2FpdCBjaGlsZC5jaGVja1Byb3AocHJvcElkLCB0cnVlKSAmJiB2YWw7XHJcbiAgICAgICAgICBpZiAoY2hpbGRWYWx1ZSlcclxuICAgICAgICAgICAgY2hpbGRWYWx1ZSA9IGNoaWxkLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKVxyXG4gICAgICAgICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhjb21tYW5kVHlwZSwgY2hpbGQsIGNoaWxkLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgICBhd2FpdCBjaGlsZC51cGRhdGVDaGlsZHJlblByb3BWYWx1ZShwcm9wSWQsIGNvbW1hbmRUeXBlLCBjaGlsZFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB2YWwpICYmICF0aGlzLlN1YmZvcm1Mb2FkZWQpIHtcclxuICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TVUJGT1JNX09QRU4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgc3ViZm9ybSB0YXNrIGlkIGZvciBhIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFN1YmZvcm1UYXNrKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgYmVoYXZpb3VyIGZvciB0aGUgdGFibGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRUYWJsZUJlaGF2aW91cigpOiBUYWJsZUJlaGF2aW91ciB7XHJcbiAgICByZXR1cm4gVGFibGVCZWhhdmlvdXIuVW5saW1pdGVkSXRlbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdmFsaWRhdGUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGFuZCBzZXQgaXQncyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJOZXdWYWx1ZVwiPnRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVDdHJsXCI+aWYgdHJ1ZSB0aGVuIHRoZSBjb250cm9sIHdpbGwgYmUgdXBkYXRlZCB1cG9uIHN1Y2Nlc3NmdWwgY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZXR1cm5zIGlmIHZhbGlkYXRpb24gaXMgc3VjY2Vzc2Z1bDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlKE5ld1ZhbHVlOiBhbnksIHVwZGF0ZUN0cmw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHN1cGVyLlVwZGF0ZU1vZGlmaWVkQnlVc2VyKE5ld1ZhbHVlKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaXMgbnVsbCBvciB3YXMgY2hhbmdlZFxyXG4gICAgLy8gY2hlY2sgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBjb250cm9sIHZhbHVlXHJcbiAgICBpZiAodGhpcy5Nb2RpZmllZEJ5VXNlcikge1xyXG4gICAgICBsZXQgY3RybEN1cnJWYWx1ZTogYW55ID0gdGhpcy5WYWx1ZTtcclxuICAgICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscztcclxuXHJcbiAgICAgIGlmIChzdXBlci5nZXRQSUMoKSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgdmQgPSBzdXBlci5idWlsZFBpY3R1cmUoY3RybEN1cnJWYWx1ZSwgTmV3VmFsdWUpO1xyXG5cclxuICAgICAgdmQuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgIC8vIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZHMgdmFsdWUgd2FzIHdyb25nXHJcbiAgICAgIGlmICh2ZC5WYWxpZGF0aW9uRmFpbGVkKSB7XHJcbiAgICAgICAgdGhpcy5Nb2RpZmllZEJ5VXNlciA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5Jc0ludGVyYWN0aXZlVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgIHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkuc2V0RGF0YVN5bmNlZChmYWxzZSk7XHJcblxyXG4gICAgICAvLyBzZXQgdGhlIHZhbHVlIChoYW5kbGUgcmVjb21wdXRlLCBldGMuKVxyXG4gICAgICBpZiAodXBkYXRlQ3RybCkge1xyXG4gICAgICAgIC8vIFFDUiM0NDEwMjA6QWZ0ZXIgdmFsaWRhdGluZyBkaXNwbGF5IHZhbHVlLCB0YWtlIHRoZSBzYW1lIGN0cmwncyB2YWx1ZSBmb3IgbWcgdmFsdWUgY29udmVyc2lvbi5cclxuICAgICAgICAvLyBVc2luZyBkaXNwbGF5IHZhbHVlIGdlbmVyYXRlZCBmcm9tIE1nVmFsdWUsIG1pZ2h0IGhhdmUgcHJvYmxlbSB0byBjb252ZXJ0IGJhY2sgdG8gTWdWYWwgdXNpbmcgcGljdHVyZSBkdWUgdG8gYWxpZ25tZW50IChjaGFuZ2VkIGFsaWdubWVudCApLlxyXG4gICAgICAgIC8vIFRoaXMgcHJvYmxlbSBvY2N1cnMgZm9yIG51bWVyaWMuXHJcbiAgICAgICAgLy8gVGhlIGZpeCBzaG91bGQgYmUgYXBwbGljYWJsZSBmb3IgbnVtZXJpYyB0eXBlIG9ubHkuIEJlY2F1c2UgZGF0ZSBhbmQgdGltZSBmaWVsZCB3aXRoIGNvbXBsZXggbWFza2luZyBoYXZlIHByb2JsZW0gb24gdXNpbmcgY3RybCdzIHZhbHVlLlxyXG4gICAgICAgIC8vIFJlZmVyIGRhdGUgcWNyczogIzI5MTY2NiwgIzMwNzM1MywgIzQzNDI0MSBhbmQgZm9yIHRpbWUsIGNoZWNrIGRlZmF1bHQgdmFsdWUgd2hlbiBmb3JtYXQgaXMgJ0hILU1NLVNTIFBNWkAnXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDICYmIHR5cGVvZiBOZXdWYWx1ZSA9PT0gJ3N0cmluZycgJiYgTmV3VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICB2ZC5zZXRWYWx1ZShOZXdWYWx1ZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUodmQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIHJlY2VpdmVkIGZyb20gdGhlIHVzZXIgaW5wdXQgYWZ0ZXIgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBmaWVsZCBjb25uZWN0ZWQgdG8gdGhpc1xyXG4gIC8vLyAgIGNvbnRyb2wgKGlmIGV4aXN0cylcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmRcIj50aGUgdmFsaWRhdGlvbiBkZXRhaWxzIG9iamVjdDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZSh2ZDogVmFsaWRhdGlvbkRldGFpbHMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSB2ZC5nZXRJc051bGwoKTtcclxuICAgIGxldCBuZXdWYWx1ZTogYW55ID0gdmQuZ2V0RGlzcFZhbHVlKCk7XHJcbiAgICBsZXQgbWdWYWw6IHN0cmluZztcclxuXHJcbiAgICBpZiAoIWlzTnVsbCB8fCAhdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICBtZ1ZhbCA9IGF3YWl0IHN1cGVyLmdldE1nVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgLy8gaXQncyBpbm5lciB2YWx1ZSAtPiB0cmFuc2xhdGUgaXQgdG8gdGhlIGRpc3BsYXlcclxuICAgIGVsc2VcclxuICAgICAgbWdWYWwgPSAoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyB0aGlzLl9maWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCkgOiB0aGlzLl9maWVsZC5nZXREZWZhdWx0VmFsdWUoKSk7XHJcbiAgICBpZiAobWdWYWwgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmICghKG5ld1ZhbHVlID09PSB0aGlzLlZhbHVlKSB8fCB0aGlzLktleVN0cm9rZU9uIHx8IHRoaXMuSXNOdWxsICE9PSBpc051bGwpKSB7XHJcbiAgICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShtZ1ZhbCwgaXNOdWxsLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vIGRlZmVjdCAxMjc3MzQgOiB2YWx1ZSBvZiB0aGUgZmllbGQgbWlnaHQgYmUgY2hhbmdlZCBhbHJlYWR5IGluc2lkZSBhIGNvbnRyb2wgY2hhbmdlIGhhbmRsZXJcclxuICAgICAgICAvLyB0byBhdm9pZCB1cGRhdGluZyBvbGQgdmFsdWUgYW5kIG92ZXJydW5uaW5nIHRoZSB2YWx1ZSBmcjBtIHRoZSBjb250cm9sIGNoYW5nZVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZmllbGQuIChuZWVkIHRvIGJlIGRvbmUgZm9yIGNvbWJvIGFuZCBsaXN0IGJveCwgYnV0IGl0J3MgdG9vIHJpc2t5XHJcbiAgICAgICAgLy8gYW5kIHVubGlrZWx5IHRvIGhhcHBlbiwgc28gdGhlIGZpeCB3aWxsIGJlIGZvciBjaGVjayBib3ggb25seSlcclxuXHJcbiAgICAgICAgaWYgKHN1cGVyLmlzQ2hlY2tCb3goKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgbWdWYWwgPSAoPEZpZWxkPnRoaXMuX2ZpZWxkKS5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiBmaWVsZCB2YWx1ZSBpcyBudWxsICYgaGFzIG51bGwgZGlzcGxheSB2YWx1ZSwgdGFrZSBldmFsdWF0ZWQgbnVsbCBkaXNwbGF5IHZhbHVlLlxyXG4gICAgICBpZiAoKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIGlzTnVsbCkgJiYgdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICAgIG1nVmFsID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKG1nVmFsLCBpc051bGwpO1xyXG4gICAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IGZhbHNlO1xyXG4gICAgICAvLyBRQ1IgIzQzODc1My4gUHJldmVudCBSUCZSUyBjeWNsZSwgd2hlbiBpdCdzIG5vdCBuZWVkZWQuXHJcbiAgICAgIHRoaXMuS2V5U3Ryb2tlT24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFza0lkID0gXCIwXCI7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBNZ0Zvcm0gb2YgdGhlIHN1YmZvcm0gY29udHJvbCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRTdWJmb3JtTWdGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5fc3ViZm9ybVRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIHdoZXRoZXIgdGFibGUgYmVpbmcgdXNlZCB3aXRoIGFic29sdXRlIHNjcm9sbGJhciB0aHVtYi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFLCBcIkluIE1nQ29udHJvbC5Jc1RhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyKCk6IE5vdCBhIHRhYmxlIGNvbnRyb2wuXCIpO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIucHJvcEV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKSlcclxuICAgICAgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIgPSAodGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSA8bnVtYmVyPlNjcm9sbEJhclRodW1iVHlwZS5BYnNvbHV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIHJldHVybi10by1jb250cm9sIHBvaW50cyB0byBhbiBleGlzdGluZyB0YXNrLjwvc3VtbWFyeT5cclxuICBzdGF0aWMgdmFsaWRSZXR1cm5Ub0N0cmwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoTWdDb250cm9sLlJldHVyblRvQ3RybCAhPT0gbnVsbCAmJiBNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuaXNBYm9ydGluZygpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG9uZSBtYXkgZGlyZWN0bHkgKG5vdCB2aWEgdGhlIGd1aSkgc2V0IGEgdmFsdWUgb24gdGhpcyBjb250cm9sLjwvc3VtbWFyeT5cclxuICBtYXlTZXRWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgdmFsdWUgc2V0dGluZyBpZiB0aGUgY29udHJvbCBkb2Vzbid0IGhhdmUgYSBmaWVsZCwgb3IgaWYgaXQgZ2V0cyBpdHMgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uXHJcbiAgICBpZiAodGhpcy5fZmllbGQgPT09IG51bGwgfHwgdGhpcy5fdmFsRXhwSWQgPiAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2RpZmlhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIGEgdmFsdWUgbWF5IGJlIHNldCwgYW5kIHRyaWVzIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWx1ZSBzZXR0aW5nIHdhcyBzdWNjZXNzZnVsIDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlSWZBbGxvd2VkKE5ld1ZhbHVlOiBhbnksIHJlZnJlc2hEaXNwbGF5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMubWF5U2V0VmFsdWUoKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5hYmxlIHRvIGNoYW5nZSB2YWx1ZSBvZiBjb250cm9sIHswfTogVGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LlwiLCB0aGlzLk5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRWYWwgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWUsIHRydWUpO1xyXG4gICAgaWYgKCFyZXRWYWwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJWYWx1ZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgezB9LlwiLCB0aGlzLk5hbWUpKTtcclxuXHJcbiAgICBpZiAocmVmcmVzaERpc3BsYXkpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkTm9QYXJhbWV0ZXJzKENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSywgdGhpcy5nZXRGb3JtKCkpO1xyXG4gICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlZnJlc2ggdGFza1xyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcbn1cclxuIl19