@magic-xpa/angular 4.1000.0-dev4100.99 → 4.1000.410-0.428

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 (68) hide show
  1. package/esm2020/index.mjs +2 -1
  2. package/esm2020/src/magic.core.module.mjs +16 -13
  3. package/esm2020/src/services/accessor.magic.service.mjs +28 -3
  4. package/esm2020/src/services/magic-color.service.mjs +4 -4
  5. package/esm2020/src/services/subform.magic.service.mjs +1 -1
  6. package/esm2020/src/services/table.magic.service.mjs +5 -2
  7. package/esm2020/src/services/task.magics.service.mjs +25 -4
  8. package/esm2020/src/ui/GuiInteractiveExecutor.mjs +7 -2
  9. package/esm2020/src/ui/components/base-magic-alert.component.mjs +3 -7
  10. package/esm2020/src/ui/components/base-magic-confirm.component.mjs +3 -7
  11. package/esm2020/src/ui/components/magic-alert.component.mjs +3 -35
  12. package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +3 -39
  13. package/esm2020/src/ui/directives/NonMagicControlDirective.mjs +6 -6
  14. package/esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs +76 -7
  15. package/esm2020/src/ui/directives/magic/combobox.magic.directive.mjs +11 -1
  16. package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs +34 -5
  17. package/esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs +3 -3
  18. package/esm2020/src/ui/directives/magic.directive.mjs +11 -11
  19. package/esm2020/src/ui/directives/mgformat.magic.directive.mjs +336 -3
  20. package/esm2020/src/ui/magic-modal/base-magic-overlay-container.mjs +1 -1
  21. package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +4 -18
  22. package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +4 -4
  23. package/esm2020/src/ui/magic-root.component.mjs +4 -38
  24. package/esm2020/src/ui/mgerror.magic.component.mjs +9 -9
  25. package/esm2020/src/ui/pipes/time24.magic.pipe.mjs +34 -0
  26. package/esm2020/src/ui/router-container.magic.component.mjs +4 -4
  27. package/esm2020/src/ui/subform.magic.component.mjs +4 -4
  28. package/esm2020/src/ui/task-base.magic.component.mjs +8 -2
  29. package/fesm2015/magic-xpa-angular.mjs +605 -208
  30. package/fesm2015/magic-xpa-angular.mjs.map +1 -1
  31. package/fesm2020/magic-xpa-angular.mjs +603 -208
  32. package/fesm2020/magic-xpa-angular.mjs.map +1 -1
  33. package/index.d.ts +1 -0
  34. package/package.json +11 -8
  35. package/src/magic.core.module.d.ts +8 -6
  36. package/src/services/accessor.magic.service.d.ts +3 -0
  37. package/src/services/table.magic.service.d.ts +2 -0
  38. package/src/services/task.magics.service.d.ts +1 -0
  39. package/src/ui/components/base-magic-alert.component.d.ts +1 -1
  40. package/src/ui/components/base-magic-confirm.component.d.ts +1 -1
  41. package/src/ui/components/magic-alert.component.d.ts +1 -1
  42. package/src/ui/components/magic-confirmation-box.component.d.ts +1 -1
  43. package/src/ui/directives/NonMagicControlDirective.d.ts +1 -1
  44. package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +1 -1
  45. package/src/ui/directives/magic/checkbox.magic.directive.d.ts +15 -2
  46. package/src/ui/directives/magic/combobox.magic.directive.d.ts +2 -1
  47. package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +1 -1
  48. package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +9 -3
  49. package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +1 -1
  50. package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +1 -1
  51. package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +1 -1
  52. package/src/ui/directives/magic/row.magic.directive.d.ts +1 -1
  53. package/src/ui/directives/magic-focus.directive.d.ts +1 -1
  54. package/src/ui/directives/magic.directive.d.ts +2 -2
  55. package/src/ui/directives/magicViewContainerRef.directive.d.ts +1 -1
  56. package/src/ui/directives/mgformat.magic.directive.d.ts +12 -2
  57. package/src/ui/directives/range-validator.magic.directive.d.ts +1 -1
  58. package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +1 -1
  59. package/src/ui/magic-modal/magic-overlay-container.d.ts +1 -1
  60. package/src/ui/magic-root.component.d.ts +1 -1
  61. package/src/ui/mgerror.magic.component.d.ts +1 -1
  62. package/src/ui/pipes/date.magic.pipe.d.ts +1 -1
  63. package/src/ui/pipes/time.magic.pipe.d.ts +1 -1
  64. package/src/ui/pipes/time24.magic.pipe.d.ts +10 -0
  65. package/src/ui/router-container.magic.component.d.ts +1 -1
  66. package/src/ui/subform.magic.component.d.ts +1 -1
  67. package/src/ui/task-base.magic.component.d.ts +2 -1
  68. package/magic-xpa-angular.d.ts +0 -2
@@ -12,6 +12,16 @@ import * as i0 from "@angular/core";
12
12
  import * as i1 from "../../services/task.magics.service";
13
13
  import * as i2 from "./magic/row.magic.directive";
14
14
  export class MagicDirective {
15
+ set magic(val) {
16
+ this.id = val;
17
+ this.selector = "magic";
18
+ }
19
+ ;
20
+ set eventsOnly(val) {
21
+ console.log("eventsOnly");
22
+ this.eventsOnlyVal = true;
23
+ }
24
+ ;
15
25
  constructor(_task, element, renderer, vcRef, magicRow) {
16
26
  this._task = _task;
17
27
  this.element = element;
@@ -24,16 +34,6 @@ export class MagicDirective {
24
34
  if (!(typeof magicRow === "undefined" || magicRow === null))
25
35
  this.rowId = magicRow.rowId;
26
36
  }
27
- set magic(val) {
28
- this.id = val;
29
- this.selector = "magic";
30
- }
31
- ;
32
- set eventsOnly(val) {
33
- console.log("eventsOnly");
34
- this.eventsOnlyVal = true;
35
- }
36
- ;
37
37
  get task() {
38
38
  return this._task;
39
39
  }
@@ -207,4 +207,4 @@ MagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MagicDirective, selectors:
207
207
  }], rowId: [{
208
208
  type: Input
209
209
  }] }); })();
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFDTCxXQUFXLEVBRVgsWUFBWSxFQUVaLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFVckYsTUFBTSxPQUFPLGNBQWM7SUFtRXpCLFlBQ1ksS0FBdUIsRUFDdkIsT0FBbUIsRUFDbkIsUUFBbUIsRUFDbkIsS0FBdUIsRUFDWCxRQUEyQjtRQUp2QyxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGFBQVEsR0FBUixR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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tbWFuZFR5cGUsXHJcbiAgR3VpQ29tbWFuZCxcclxuICBHdWlDb25zdGFudHMsXHJcbiAgR3VpSW50ZXJhY3RpdmUsXHJcbiAgSHRtbFByb3BlcnRpZXMsXHJcbiAgSW50ZXJhY3RpdmVDb21tYW5kVHlwZSxcclxuICBNb2RpZmllcnNcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHsgZ2V0R3VpRXZlbnRPYmosIElHdWlFdmVudCB9IGZyb20gXCJAbWFnaWMteHBhL2VuZ2luZVwiO1xyXG5cclxuaW1wb3J0IHsgVGFza0Jhc2VNYWdpY0NvbXBvbmVudCB9IGZyb20gXCIuLi90YXNrLWJhc2UubWFnaWMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRhc2tNYWdpY1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGFzay5tYWdpY3Muc2VydmljZVwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFJvd01hZ2ljRGlyZWN0aXZlIH0gZnJvbSBcIi4vbWFnaWMvcm93Lm1hZ2ljLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpbmRpbmdMZXZlbCwgTWdDb250cm9sVHlwZSwgU3RvcmFnZUF0dHJpYnV0ZVR5cGUgfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb25uZWN0cyBIVE1MIGVsZW1lbnRzIHRvIHRoZSBNYWdpYyBXZWIgQ2xpZW50IGVuZ2luZVxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW21hZ2ljXVwiXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTWFnaWNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KFwibWFnaWNcIikgc2V0IG1hZ2ljKHZhbCkge1xyXG4gICAgdGhpcy5pZCA9IHZhbDtcclxuICAgIHRoaXMuc2VsZWN0b3IgPSBcIm1hZ2ljXCI7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmbGFnIGlzIHVzZWQgd2hlbiB3ZSBvbmx5IHdhbnQgdG8gcmVnaXN0ZXIgdG8gZXZlbnRzLCBidXQgZG8gbm90IHdhbnQgdG8gZXhlY3V0ZSBjb21tYW5kcyBzZW50IGZyb20gc2VydmVyXHJcbiAgICovXHJcbiAgQElucHV0KFwiZXZlbnRzT25seVwiKSBzZXQgZXZlbnRzT25seSh2YWwpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZXZlbnRzT25seVwiKTtcclxuICAgIHRoaXMuZXZlbnRzT25seVZhbCA9IHRydWU7XHJcblxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJvdyBpZCBvZiB0aGUgY29udHJvbCwgZm9yIHdoZW4gaXQgaXMgb24gYSB0YWJsZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByb3dJZDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgLy9ASW5wdXQoKSBldmVudHM6IGFueVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgY29ubmVjdGVkIHRvIHRoaXMgZGlyZWN0aXZlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAvKipcclxuICAgKiBNYWdpYydzIGNvbXBvbmVudCBoYW5kbGluZyB0aGlzIGNvbnRyb2xcclxuICAgKi9cclxuICBwdWJsaWMgY29tcG9uZW50OiBUYXNrQmFzZU1hZ2ljQ29tcG9uZW50O1xyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgZWxlbWVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXZlbnRIYW5kbGVyczogeyBba2V5OiBzdHJpbmddOiAoKSA9PiB2b2lkOyB9ID0ge307XHJcbiAgLyoqXHJcbiAgICogSWQgb2YgdGhpcyBlbGVtZW50XHJcbiAgICovXHJcbiAgcHVibGljIGlkOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZWxlY3Rvcjogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzdWJzY3JpYmVSZWZyZXNoRG9tOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByaXZhdGUgZm9jdXNVbmxpc3RlbmVyOiAoKCkgPT4gdm9pZCk7XHJcblxyXG4gIHB1YmxpYyBldmVudHNPbmx5VmFsID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgb3BlbmVkID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgbm9PZkF1dG9Db21wbGV0ZUJveGVzT3BlbmVkID0wO1xyXG5cclxuICBzdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIF90YXNrIFRoZSB0YXNrIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGRpcmVjdGl2ZSBpcyBhcHBsaWVkXHJcbiAgICogQHBhcmFtIHJlbmRlcmVyIFJlbmRlcmVyIGZvciB0aGUgZWxlbWVudFxyXG4gICAqIEBwYXJhbSB2Y1JlZlxyXG4gICAqIEBwYXJhbSBtYWdpY1Jvd1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrTWFnaWNTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByb3RlY3RlZCB2Y1JlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBtYWdpY1JvdzogUm93TWFnaWNEaXJlY3RpdmUpIHtcclxuXHJcbiAgICB0aGlzLmh0bWxFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAvL2xldCBjID0gKDxhbnk+dGhpcy52Y1JlZikuX3ZpZXc7XHJcbiAgICAvL3doaWxlICghKGMgaW5zdGFuY2VvZiBUYXNrQmFzZU1hZ2ljQ29tcG9uZW50KSkge1xyXG4gICAgLy8gIGMgPSBjLmNvbXBvbmVudDtcclxuICAgIC8vfVxyXG4gICAgLy90aGlzLmNvbXBvbmVudCA9IGM7XHJcbiAgICBpZiAoISh0eXBlb2YgbWFnaWNSb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgbWFnaWNSb3cgPT09IG51bGwpKVxyXG4gICAgICB0aGlzLnJvd0lkID0gbWFnaWNSb3cucm93SWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRhc2sgc2VydmljZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0IHRhc2soKTogVGFza01hZ2ljU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIHRvIHRoZSBldmVudHMgdGhpcyBlbGVtZW50IG1heSBuZWVkIHRvIGhhbmRsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZWdFdmVudHMoKSB7XHJcbiAgICAvLyBIYW5kbGUgZXZlbnRzIGZvciB3aGljaCBldmVudCBoYW5kbGVyIG1heSBiZSByZW1vdmVkIGFuZCByZXN0b3JlZFxyXG4gICAgdGhpcy5ldmVudEhhbmRsZXJzW1wiZm9jdXNpblwiXSA9IHRoaXMuT25Gb2N1cy5iaW5kKHRoaXMpO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZXZlbnRIYW5kbGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNVbmxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwga2V5LCB0aGlzLmV2ZW50SGFuZGxlcnNba2V5XSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBIYW5kbGUgZXZlbnRzIHdpdGggYW5vbnltb3VzICBldmVudCBoYW5kbGVyc1xyXG4gICAgbGV0IGV2ZW50czogc3RyaW5nW10gPSBbXCJjbGlja1wiLCBcIm1vdXNlZG93blwiLCBcImRibGNsaWNrXCJdOy8vICwncmVzaXplJywgJ2xvYWQnLCAndW5sb2FkJ1xyXG4gICAgZXZlbnRzLmZvckVhY2goZXZlbnQgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmh0bWxFbGVtZW50LCBldmVudCwgKGUpID0+IHtcclxuICAgICAgICBcclxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBldmVudCBpcyBmaXJlZCBmcm9tIHpvb20gYnV0dG9uICggdG8gaWRlbnRpZnkgdGhlIGNvbm5lY3RlZCB6b29tIGJ1dHRvbiBpbiBlbmdpbmUpXHJcbiAgICAgICAgbGV0IGZyb21CdXR0b24gPSBmYWxzZTsgXHJcbiAgICAgICAgaWYodGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KVxyXG4gICAgICAgICAgZnJvbUJ1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChnZXRHdWlFdmVudE9iaihldmVudCwgdGhpcy5pZCwgK3RoaXMucm93SWQsIGZyb21CdXR0b24pKTtcclxuICAgICAgICBpZiAoTWFnaWNEaXJlY3RpdmUubm9PZkF1dG9Db21wbGV0ZUJveGVzT3BlbmVkPCAxKVxyXG4gICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmh0bWxFbGVtZW50LCBcImNoYW5nZVwiLCAoZSkgPT4ge1xyXG4gICAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKFwic2VsZWN0aW9uY2hhbmdlZFwiLCB0aGlzLmlkLCArdGhpcy5yb3dJZCk7XHJcblxyXG4gICAgICBpZiAoKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXgudG9TdHJpbmcoKTtcclxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgfVxyXG4gXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBoYW5kbGUgdGhlIGlucHV0IGV2ZW50XHJcbiAgICBmcm9tRXZlbnQodGhpcy5odG1sRWxlbWVudCwgXCJpbnB1dFwiKS5waXBlKFxyXG4gICAgICBtYXAoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDIwMCkgLy8gdGltZSBhZnRlciB3aGljaCB2YWx1ZSB3aWxsIGJlIHNlbnQgdG8gbWFnaWNcclxuICAgICkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFzay5nZXRQcm9wZXJ0eSh0aGlzLmlkLCBIdG1sUHJvcGVydGllcy5CaW5kaW5nTGV2ZWwsIHRoaXMucm93SWQpID09PSBCaW5kaW5nTGV2ZWwuQ2hhcmFjdGVyKSB7XHJcbiAgICAgICAgICAvLyBEb24ndCBzdXBwb3J0IGNoYXJhY3RlciBiaW5kaW5nIGZvciBkYXRlL3RpbWUgdmFsdWVzXHJcbiAgICAgICAgIGxldCBhdHRyaWJ1dGUgOiBTdG9yYWdlQXR0cmlidXRlVHlwZSA9ICB0aGlzLnRhc2suUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YSh0aGlzLmlkKS5kYXRhVHlwZTtcclxuICAgICAgICAgaWYoYXR0cmlidXRlICE9PSBTdG9yYWdlQXR0cmlidXRlVHlwZS5EYXRlICYmIGF0dHJpYnV0ZSAhPSBTdG9yYWdlQXR0cmlidXRlVHlwZS5UaW1lKVxyXG4gICAgICAgICAgICB0aGlzLnRhc2subWdBY2Nlc3NvclNlcnZpY2Uuc2V0VmFsdWVUb0NvbnRyb2wodGhpcy5pZCwgeCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwgXCJrZXlkb3duXCIsIChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaihcImtleWRvd25cIiwgdGhpcy5pZCwgK3RoaXMucm93SWQpO1xyXG4gICAgICAgIGd1aUV2ZW50Lm1vZGlmaWVycyA9IE1vZGlmaWVycy5NT0RJRklFUl9OT05FO1xyXG5cclxuICAgICAgICBpZiAoZS5hbHRLZXkgJiYgZS5rZXlDb2RlICE9PSBHdWlDb25zdGFudHMuS0VZX0FMVClcclxuICAgICAgICAgICAgZ3VpRXZlbnQubW9kaWZpZXJzID0gTW9kaWZpZXJzLk1PRElGSUVSX0FMVDtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmIGUua2V5Q29kZSAhPT0gR3VpQ29uc3RhbnRzLktFWV9DVFJMKVxyXG4gICAgICAgICAgICBndWlFdmVudC5tb2RpZmllcnMgPSBNb2RpZmllcnMuTU9ESUZJRVJfQ1RSTDtcclxuXHJcbiAgICAgICAgbGV0IHN1cHBvcnRlZEtleSA9IGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9QR19VUCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUEdfRE9XTiB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfTEVGVCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUklHSFQgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX1VQIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9ET1dOIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9FU0MgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0hPTUUgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0VORCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUkVUVVJOIHx8XHJcbiAgICAgICAgICAgIChlLmtleUNvZGUgPj0gR3VpQ29uc3RhbnRzLktFWV9GMSAmJiBlLmtleUNvZGUgPD0gR3VpQ29uc3RhbnRzLktFWV9GMTIpO1xyXG5cclxuICAgICAgICBpZiAoZ3VpRXZlbnQubW9kaWZpZXJzICE9PSBNb2RpZmllcnMuTU9ESUZJRVJfTk9ORSB8fCBzdXBwb3J0ZWRLZXkpIHtcclxuICAgICAgICAgICAgZ3VpRXZlbnQua2V5Q29kZSA9IGUua2V5Q29kZTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlZmVjdCAxNjAwMjEgZml4ZWQgLSBkb24ndCBzZXQgZS5jYW5jZWxCdWJibGUgd2hlbiBjb21ib2JveCBpcyBvcGVuZWQgYW5kIGVzYyBrZXkgaXMgcHJlc3NlZFxyXG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlICE9PSBHdWlDb25zdGFudHMuS0VZX0VTQyB8fCBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfRVNDICYmICghTWFnaWNEaXJlY3RpdmUub3BlbmVkICYmIE1hZ2ljRGlyZWN0aXZlLm5vT2ZBdXRvQ29tcGxldGVCb3hlc09wZW5lZCA8IDEpKVxyXG4gICAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZm9jdXMgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIE9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooXCJmb2N1c1wiLCB0aGlzLmlkLCArdGhpcy5yb3dJZCkpO1xyXG4gICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBjb21tYW5kJ3MgZWxlbWVudCB0aGUgc2FtZSBhcyB0aGlzIGRpcmVjdGl2ZSdzIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAqIEByZXR1cm5zIHRydWUvZmFsc2VcclxuICAgKi9cclxuICBwcml2YXRlIElzU2FtZUVsZW1lbnQoY29tbWFuZCkge1xyXG4gICAgbGV0IGxpbmU6IG51bWJlciA9IGNvbW1hbmQubGluZTtcclxuXHJcbiAgICBpZiAodGhpcy50YXNrLmlzVGFibGVDb250cm9sKGNvbW1hbmQuQ3RybE5hbWUpKVxyXG4gICAgICBsaW5lID0gdGhpcy50YXNrLmdldEd1aVJvd0lkKGxpbmUsIHRydWUpO1xyXG5cclxuICAgIHJldHVybiAoY29tbWFuZC5DdHJsTmFtZSA9PT0gdGhpcy5pZCAmJlxyXG4gICAgICAobGluZSA9PT0gK3RoaXMucm93SWQgfHxcclxuICAgICAgICAobGluZSA9PT0gMCAmJiBpc051bGxPclVuZGVmaW5lZCh0aGlzLnJvd0lkKSkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBjb21tYW5kJ3MgZWxlbWVudCB0aGUgc2FtZSBhcyB0aGlzIGRpcmVjdGl2ZSdzIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHJldHVybnMgdHJ1ZS9mYWxzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgSXNTYW1lQ29tcG9uZW50KGNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKSB7XHJcbiAgICByZXR1cm4gKGNvbW1hbmQuY29udHJvbE5hbWUgPT09IHRoaXMuaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVnVXBkYXRlc1VJKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tID0gdGhpcy50YXNrXHJcbiAgICAgIC5yZWZyZXNoRG9tLnBpcGUoZmlsdGVyKGMgPT4gdGhpcy5Jc1NhbWVFbGVtZW50KGMpKSlcclxuICAgICAgLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgICAgIGxldCBjb21tYW5kOiBHdWlDb21tYW5kID0gYTtcclxuICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnJvd0lkKSlcclxuICAgICAgICAgICAgdGhpcy5yb3dJZCA9IFwiMFwiO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50c09ubHlWYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21tYW5kKGNvbW1hbmQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMgPSB0aGlzLnRhc2suaW50ZXJhY3RpdmVDb21tYW5kc1xyXG4gICAgICAucGlwZShmaWx0ZXIoYyA9PiB0aGlzLklzU2FtZUNvbXBvbmVudChjKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVJbnRlcmFjdGl2ZUNvbW1hbmRzKGNvbW1hbmQpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoaXMgb2JqZWN0XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ0V2ZW50cygpO1xyXG4gICAgdGhpcy5yZWdVcGRhdGVzVUkoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIE1hZ2ljIFdlYkNsaWVudCBlbmdpbmVcclxuICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAqL1xyXG4gIGhhbmRsZUNvbW1hbmQoY29tbWFuZDogR3VpQ29tbWFuZCkge1xyXG4gICAgc3dpdGNoIChjb21tYW5kLkNvbW1hbmRUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWTpcclxuICAgICAgICB0aGlzLmhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfRk9DVVM6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNVbmxpc3RlbmVyKCk7XHJcbiAgICAgICAvLyBEbyBub3Qgc2V0IGZvY3VzIG9uIGNvbm5lY3RlZCB6b29tICBidXR0b25cclxuICAgICAgICBpZiAoIShjb21tYW5kLm9iai5Db25uZWN0ZWRDb250cm9sICYmIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpXHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5mb2N1c1VubGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmh0bWxFbGVtZW50LCBcImZvY3VzaW5cIiwgdGhpcy5ldmVudEhhbmRsZXJzW1wiZm9jdXNpblwiXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhhbmRsZSB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMgbGlrZSBDYWxsSlNcclxuICAgKi9cclxuICBoYW5kbGVJbnRlcmFjdGl2ZUNvbW1hbmRzKGNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuX2NvbW1hbmRUeXBlKSB7XHJcbiAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DQUxMX0pTOlxyXG4gICAgICAgIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBjb21tYW5kLl9zdHI7XHJcbiAgICAgICAgbGV0IGFyZ3M6IEFycmF5PGFueT4gPSBjb21tYW5kLmFyZ3VtZW50cztcclxuICAgICAgICBsZXQgbWFnaWNDb21wb25lbnQ6IFRhc2tCYXNlTWFnaWNDb21wb25lbnQgPSAoKDxhbnk+dGhpcy52Y1JlZikuX2hvc3RMVmlldykuZmluZCh2ID0+IHYgaW5zdGFuY2VvZiBUYXNrQmFzZU1hZ2ljQ29tcG9uZW50KTtcclxuICAgICAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobWFnaWNDb21wb25lbnRbbWV0aG9kTmFtZV0pKSB7XHJcbiAgICAgICAgICAgIC8vIGludm9rZSB0aGUgbWV0aG9kIG9uIGluc3RhbmNlIG9mIG1hZ2ljIGNvbXBvbmVuZXRcclxuICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gbWFnaWNDb21wb25lbnRbbWV0aG9kTmFtZV0uYXBwbHkobWFnaWNDb21wb25lbnQsIGFyZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW5zdGFuY2UgbWV0aG9kIFwiICsgbWV0aG9kTmFtZSArIFwiIGRvZXMgbm90IGV4aXN0c1wiKTsgLy8gd2hlbiBtZXRob2QgaXMgbm90IGZvdW5kXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gYW55IG90aGVyIGV4Y2VwdGlvblxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21tYW5kLnJlc3VsdFN0cmluZyA9IHJlc3VsdFN0cmluZzsgLy8gdXBkYXRlIHRoZSByZXR1cm4gdmFsdWVcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIE1hZ2ljIHNldC1wcm9wZXJ0eSBjb21tYW5kXHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKi9cclxuICBoYW5kbGVTZXRQcm9wZXJ0eShjb21tYW5kOiBHdWlDb21tYW5kKSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuT3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuUmVhZE9ubHk6IHtcclxuICAgICAgICBpZihjb21tYW5kLm9iai5UeXBlID09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RFWFQpXHJcbiAgICAgICAgaWYgKGNvbW1hbmQub2JqMSAhPSB0cnVlKVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5odG1sRWxlbWVudCwgY29tbWFuZC5PcGVyYXRpb24pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaHRtbEVsZW1lbnQsIGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLnN0cik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbnVwXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFDTCxXQUFXLEVBRVgsWUFBWSxFQUVaLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFVckYsTUFBTSxPQUFPLGNBQWM7SUFDekIsSUFBb0IsS0FBSyxDQUFDLEdBQUc7UUFDM0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBQUEsQ0FBQztJQUtGLElBQXlCLFVBQVUs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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbW1hbmRUeXBlLFxyXG4gIEd1aUNvbW1hbmQsXHJcbiAgR3VpQ29uc3RhbnRzLFxyXG4gIEd1aUludGVyYWN0aXZlLFxyXG4gIEh0bWxQcm9wZXJ0aWVzLFxyXG4gIEludGVyYWN0aXZlQ29tbWFuZFR5cGUsXHJcbiAgTW9kaWZpZXJzXHJcbn0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7IGdldEd1aUV2ZW50T2JqLCBJR3VpRXZlbnQgfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuXHJcbmltcG9ydCB7IFRhc2tCYXNlTWFnaWNDb21wb25lbnQgfSBmcm9tIFwiLi4vdGFzay1iYXNlLm1hZ2ljLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUYXNrTWFnaWNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBSb3dNYWdpY0RpcmVjdGl2ZSB9IGZyb20gXCIuL21hZ2ljL3Jvdy5tYWdpYy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCaW5kaW5nTGV2ZWwsIE1nQ29udHJvbFR5cGUsIFN0b3JhZ2VBdHRyaWJ1dGVUeXBlIH0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuXHJcblxyXG4vKipcclxuICogQ29ubmVjdHMgSFRNTCBlbGVtZW50cyB0byB0aGUgTWFnaWMgV2ViIENsaWVudCBlbmdpbmVcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIlttYWdpY11cIlxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hZ2ljRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dChcIm1hZ2ljXCIpIHNldCBtYWdpYyh2YWwpIHtcclxuICAgIHRoaXMuaWQgPSB2YWw7XHJcbiAgICB0aGlzLnNlbGVjdG9yID0gXCJtYWdpY1wiO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZmxhZyBpcyB1c2VkIHdoZW4gd2Ugb25seSB3YW50IHRvIHJlZ2lzdGVyIHRvIGV2ZW50cywgYnV0IGRvIG5vdCB3YW50IHRvIGV4ZWN1dGUgY29tbWFuZHMgc2VudCBmcm9tIHNlcnZlclxyXG4gICAqL1xyXG4gIEBJbnB1dChcImV2ZW50c09ubHlcIikgc2V0IGV2ZW50c09ubHkodmFsKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV2ZW50c09ubHlcIik7XHJcbiAgICB0aGlzLmV2ZW50c09ubHlWYWwgPSB0cnVlO1xyXG5cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSb3cgaWQgb2YgdGhlIGNvbnRyb2wsIGZvciB3aGVuIGl0IGlzIG9uIGEgdGFibGVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcm93SWQ6IHN0cmluZztcclxuICAvKipcclxuICAgKlxyXG4gICAqL1xyXG4gIC8vQElucHV0KCkgZXZlbnRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgSFRNTCBlbGVtZW50IGNvbm5lY3RlZCB0byB0aGlzIGRpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgLyoqXHJcbiAgICogTWFnaWMncyBjb21wb25lbnQgaGFuZGxpbmcgdGhpcyBjb250cm9sXHJcbiAgICovXHJcbiAgcHVibGljIGNvbXBvbmVudDogVGFza0Jhc2VNYWdpY0NvbXBvbmVudDtcclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIGVsZW1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGV2ZW50SGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogKCkgPT4gdm9pZDsgfSA9IHt9O1xyXG4gIC8qKlxyXG4gICAqIElkIG9mIHRoaXMgZWxlbWVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpZDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2VsZWN0b3I6IHN0cmluZztcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc3Vic2NyaWJlUmVmcmVzaERvbTogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBwcml2YXRlIGZvY3VzVW5saXN0ZW5lcjogKCgpID0+IHZvaWQpO1xyXG5cclxuICBwdWJsaWMgZXZlbnRzT25seVZhbCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIG9wZW5lZCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIG5vT2ZBdXRvQ29tcGxldGVCb3hlc09wZW5lZCA9MDtcclxuXHJcbiAgc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kczogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBfdGFzayBUaGUgdGFzayBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBkaXJlY3RpdmUgaXMgYXBwbGllZFxyXG4gICAqIEBwYXJhbSByZW5kZXJlciBSZW5kZXJlciBmb3IgdGhlIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gdmNSZWZcclxuICAgKiBAcGFyYW0gbWFnaWNSb3dcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBfdGFzazogVGFza01hZ2ljU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBlbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcm90ZWN0ZWQgdmNSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgbWFnaWNSb3c6IFJvd01hZ2ljRGlyZWN0aXZlKSB7XHJcblxyXG4gICAgdGhpcy5odG1sRWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgLy9sZXQgYyA9ICg8YW55PnRoaXMudmNSZWYpLl92aWV3O1xyXG4gICAgLy93aGlsZSAoIShjIGluc3RhbmNlb2YgVGFza0Jhc2VNYWdpY0NvbXBvbmVudCkpIHtcclxuICAgIC8vICBjID0gYy5jb21wb25lbnQ7XHJcbiAgICAvL31cclxuICAgIC8vdGhpcy5jb21wb25lbnQgPSBjO1xyXG4gICAgaWYgKCEodHlwZW9mIG1hZ2ljUm93ID09PSBcInVuZGVmaW5lZFwiIHx8IG1hZ2ljUm93ID09PSBudWxsKSlcclxuICAgICAgdGhpcy5yb3dJZCA9IG1hZ2ljUm93LnJvd0lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB0YXNrIHNlcnZpY2VcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldCB0YXNrKCk6IFRhc2tNYWdpY1NlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciB0byB0aGUgZXZlbnRzIHRoaXMgZWxlbWVudCBtYXkgbmVlZCB0byBoYW5kbGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVnRXZlbnRzKCkge1xyXG4gICAgLy8gSGFuZGxlIGV2ZW50cyBmb3Igd2hpY2ggZXZlbnQgaGFuZGxlciBtYXkgYmUgcmVtb3ZlZCBhbmQgcmVzdG9yZWRcclxuICAgIHRoaXMuZXZlbnRIYW5kbGVyc1tcImZvY3VzaW5cIl0gPSB0aGlzLk9uRm9jdXMuYmluZCh0aGlzKTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmV2ZW50SGFuZGxlcnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzVW5saXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaHRtbEVsZW1lbnQsIGtleSwgdGhpcy5ldmVudEhhbmRsZXJzW2tleV0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGV2ZW50cyB3aXRoIGFub255bW91cyAgZXZlbnQgaGFuZGxlcnNcclxuICAgIGxldCBldmVudHM6IHN0cmluZ1tdID0gW1wiY2xpY2tcIiwgXCJtb3VzZWRvd25cIiwgXCJkYmxjbGlja1wiXTsvLyAsJ3Jlc2l6ZScsICdsb2FkJywgJ3VubG9hZCdcclxuICAgIGV2ZW50cy5mb3JFYWNoKGV2ZW50ID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwgZXZlbnQsIChlKSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXZlbnQgaXMgZmlyZWQgZnJvbSB6b29tIGJ1dHRvbiAoIHRvIGlkZW50aWZ5IHRoZSBjb25uZWN0ZWQgem9vbSBidXR0b24gaW4gZW5naW5lKVxyXG4gICAgICAgIGxldCBmcm9tQnV0dG9uID0gZmFsc2U7IFxyXG4gICAgICAgIGlmKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudClcclxuICAgICAgICAgIGZyb21CdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooZXZlbnQsIHRoaXMuaWQsICt0aGlzLnJvd0lkLCBmcm9tQnV0dG9uKSk7XHJcbiAgICAgICAgaWYgKE1hZ2ljRGlyZWN0aXZlLm5vT2ZBdXRvQ29tcGxldGVCb3hlc09wZW5lZDwgMSlcclxuICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwgXCJjaGFuZ2VcIiwgKGUpID0+IHtcclxuICAgICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaihcInNlbGVjdGlvbmNoYW5nZWRcIiwgdGhpcy5pZCwgK3RoaXMucm93SWQpO1xyXG5cclxuICAgICAgaWYgKCg8YW55PihldmVudC50YXJnZXQpKS5zZWxlY3RlZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBndWlFdmVudC5WYWx1ZSA9ICg8YW55PihldmVudC50YXJnZXQpKS5zZWxlY3RlZEluZGV4LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICAgIH1cclxuIFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gaGFuZGxlIHRoZSBpbnB1dCBldmVudFxyXG4gICAgZnJvbUV2ZW50KHRoaXMuaHRtbEVsZW1lbnQsIFwiaW5wdXRcIikucGlwZShcclxuICAgICAgbWFwKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApIC8vIHRpbWUgYWZ0ZXIgd2hpY2ggdmFsdWUgd2lsbCBiZSBzZW50IHRvIG1hZ2ljXHJcbiAgICApLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhc2suZ2V0UHJvcGVydHkodGhpcy5pZCwgSHRtbFByb3BlcnRpZXMuQmluZGluZ0xldmVsLCB0aGlzLnJvd0lkKSA9PT0gQmluZGluZ0xldmVsLkNoYXJhY3Rlcikge1xyXG4gICAgICAgICAgLy8gRG9uJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgYmluZGluZyBmb3IgZGF0ZS90aW1lIHZhbHVlc1xyXG4gICAgICAgICBsZXQgYXR0cmlidXRlIDogU3RvcmFnZUF0dHJpYnV0ZVR5cGUgPSAgdGhpcy50YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5pZCkuZGF0YVR5cGU7XHJcbiAgICAgICAgIGlmKGF0dHJpYnV0ZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZVR5cGUuRGF0ZSAmJiBhdHRyaWJ1dGUgIT0gU3RvcmFnZUF0dHJpYnV0ZVR5cGUuVGltZSlcclxuICAgICAgICAgICAgdGhpcy50YXNrLm1nQWNjZXNzb3JTZXJ2aWNlLnNldFZhbHVlVG9Db250cm9sKHRoaXMuaWQsIHgsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaHRtbEVsZW1lbnQsIFwia2V5ZG93blwiLCAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJrZXlkb3duXCIsIHRoaXMuaWQsICt0aGlzLnJvd0lkKTtcclxuICAgICAgICBndWlFdmVudC5tb2RpZmllcnMgPSBNb2RpZmllcnMuTU9ESUZJRVJfTk9ORTtcclxuXHJcbiAgICAgICAgaWYgKGUuYWx0S2V5ICYmIGUua2V5Q29kZSAhPT0gR3VpQ29uc3RhbnRzLktFWV9BTFQpXHJcbiAgICAgICAgICAgIGd1aUV2ZW50Lm1vZGlmaWVycyA9IE1vZGlmaWVycy5NT0RJRklFUl9BTFQ7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiBlLmtleUNvZGUgIT09IEd1aUNvbnN0YW50cy5LRVlfQ1RSTClcclxuICAgICAgICAgICAgZ3VpRXZlbnQubW9kaWZpZXJzID0gTW9kaWZpZXJzLk1PRElGSUVSX0NUUkw7XHJcblxyXG4gICAgICAgIGxldCBzdXBwb3J0ZWRLZXkgPSBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUEdfVVAgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX1BHX0RPV04gfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0xFRlQgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX1JJR0hUIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9VUCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfRE9XTiB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfRVNDIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9IT01FIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9FTkQgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX1JFVFVSTiB8fFxyXG4gICAgICAgICAgICAoZS5rZXlDb2RlID49IEd1aUNvbnN0YW50cy5LRVlfRjEgJiYgZS5rZXlDb2RlIDw9IEd1aUNvbnN0YW50cy5LRVlfRjEyKTtcclxuXHJcbiAgICAgICAgaWYgKGd1aUV2ZW50Lm1vZGlmaWVycyAhPT0gTW9kaWZpZXJzLk1PRElGSUVSX05PTkUgfHwgc3VwcG9ydGVkS2V5KSB7XHJcbiAgICAgICAgICAgIGd1aUV2ZW50LmtleUNvZGUgPSBlLmtleUNvZGU7XHJcblxyXG4gICAgICAgICAgICAvLyBEZWZlY3QgMTYwMDIxIGZpeGVkIC0gZG9uJ3Qgc2V0IGUuY2FuY2VsQnViYmxlIHdoZW4gY29tYm9ib3ggaXMgb3BlbmVkIGFuZCBlc2Mga2V5IGlzIHByZXNzZWRcclxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAhPT0gR3VpQ29uc3RhbnRzLktFWV9FU0MgfHwgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0VTQyAmJiAoIU1hZ2ljRGlyZWN0aXZlLm9wZW5lZCAmJiBNYWdpY0RpcmVjdGl2ZS5ub09mQXV0b0NvbXBsZXRlQm94ZXNPcGVuZWQgPCAxKSlcclxuICAgICAgICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGZvY3VzIGV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBPbkZvY3VzKCkge1xyXG4gICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGdldEd1aUV2ZW50T2JqKFwiZm9jdXNcIiwgdGhpcy5pZCwgK3RoaXMucm93SWQpKTtcclxuICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJcyB0aGUgY29tbWFuZCdzIGVsZW1lbnQgdGhlIHNhbWUgYXMgdGhpcyBkaXJlY3RpdmUncyBlbGVtZW50XHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKiBAcmV0dXJucyB0cnVlL2ZhbHNlXHJcbiAgICovXHJcbiAgcHVibGljIElzU2FtZUVsZW1lbnQoY29tbWFuZCkge1xyXG4gICAgbGV0IGxpbmU6IG51bWJlciA9IGNvbW1hbmQubGluZTtcclxuXHJcbiAgICBpZiAodGhpcy50YXNrLmlzVGFibGVDb250cm9sKGNvbW1hbmQuQ3RybE5hbWUpKVxyXG4gICAgICBsaW5lID0gdGhpcy50YXNrLmdldEd1aVJvd0lkKGxpbmUsIHRydWUpO1xyXG5cclxuICAgIHJldHVybiAoY29tbWFuZC5DdHJsTmFtZSA9PT0gdGhpcy5pZCAmJlxyXG4gICAgICAobGluZSA9PT0gK3RoaXMucm93SWQgfHxcclxuICAgICAgICAobGluZSA9PT0gMCAmJiBpc051bGxPclVuZGVmaW5lZCh0aGlzLnJvd0lkKSkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBjb21tYW5kJ3MgZWxlbWVudCB0aGUgc2FtZSBhcyB0aGlzIGRpcmVjdGl2ZSdzIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHJldHVybnMgdHJ1ZS9mYWxzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgSXNTYW1lQ29tcG9uZW50KGNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKSB7XHJcbiAgICByZXR1cm4gKGNvbW1hbmQuY29udHJvbE5hbWUgPT09IHRoaXMuaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVnVXBkYXRlc1VJKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tID0gdGhpcy50YXNrXHJcbiAgICAgIC5yZWZyZXNoRG9tLnBpcGUoZmlsdGVyKGMgPT4gdGhpcy5Jc1NhbWVFbGVtZW50KGMpKSlcclxuICAgICAgLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgICAgIGxldCBjb21tYW5kOiBHdWlDb21tYW5kID0gYTtcclxuICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnJvd0lkKSlcclxuICAgICAgICAgICAgdGhpcy5yb3dJZCA9IFwiMFwiO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50c09ubHlWYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21tYW5kKGNvbW1hbmQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMgPSB0aGlzLnRhc2suaW50ZXJhY3RpdmVDb21tYW5kc1xyXG4gICAgICAucGlwZShmaWx0ZXIoYyA9PiB0aGlzLklzU2FtZUNvbXBvbmVudChjKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVJbnRlcmFjdGl2ZUNvbW1hbmRzKGNvbW1hbmQpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoaXMgb2JqZWN0XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ0V2ZW50cygpO1xyXG4gICAgdGhpcy5yZWdVcGRhdGVzVUkoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIE1hZ2ljIFdlYkNsaWVudCBlbmdpbmVcclxuICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAqL1xyXG4gIGhhbmRsZUNvbW1hbmQoY29tbWFuZDogR3VpQ29tbWFuZCkge1xyXG4gICAgc3dpdGNoIChjb21tYW5kLkNvbW1hbmRUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWTpcclxuICAgICAgICB0aGlzLmhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfRk9DVVM6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNVbmxpc3RlbmVyKCk7XHJcbiAgICAgICAvLyBEbyBub3Qgc2V0IGZvY3VzIG9uIGNvbm5lY3RlZCB6b29tICBidXR0b25cclxuICAgICAgICBpZiAoIShjb21tYW5kLm9iai5Db25uZWN0ZWRDb250cm9sICYmIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpXHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5mb2N1c1VubGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmh0bWxFbGVtZW50LCBcImZvY3VzaW5cIiwgdGhpcy5ldmVudEhhbmRsZXJzW1wiZm9jdXNpblwiXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhhbmRsZSB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMgbGlrZSBDYWxsSlNcclxuICAgKi9cclxuICBoYW5kbGVJbnRlcmFjdGl2ZUNvbW1hbmRzKGNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuX2NvbW1hbmRUeXBlKSB7XHJcbiAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DQUxMX0pTOlxyXG4gICAgICAgIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBjb21tYW5kLl9zdHI7XHJcbiAgICAgICAgbGV0IGFyZ3M6IEFycmF5PGFueT4gPSBjb21tYW5kLmFyZ3VtZW50cztcclxuICAgICAgICBsZXQgbWFnaWNDb21wb25lbnQ6IFRhc2tCYXNlTWFnaWNDb21wb25lbnQgPSAoKDxhbnk+dGhpcy52Y1JlZikuX2hvc3RMVmlldykuZmluZCh2ID0+IHYgaW5zdGFuY2VvZiBUYXNrQmFzZU1hZ2ljQ29tcG9uZW50KTtcclxuICAgICAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobWFnaWNDb21wb25lbnRbbWV0aG9kTmFtZV0pKSB7XHJcbiAgICAgICAgICAgIC8vIGludm9rZSB0aGUgbWV0aG9kIG9uIGluc3RhbmNlIG9mIG1hZ2ljIGNvbXBvbmVuZXRcclxuICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gbWFnaWNDb21wb25lbnRbbWV0aG9kTmFtZV0uYXBwbHkobWFnaWNDb21wb25lbnQsIGFyZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW5zdGFuY2UgbWV0aG9kIFwiICsgbWV0aG9kTmFtZSArIFwiIGRvZXMgbm90IGV4aXN0c1wiKTsgLy8gd2hlbiBtZXRob2QgaXMgbm90IGZvdW5kXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gYW55IG90aGVyIGV4Y2VwdGlvblxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21tYW5kLnJlc3VsdFN0cmluZyA9IHJlc3VsdFN0cmluZzsgLy8gdXBkYXRlIHRoZSByZXR1cm4gdmFsdWVcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIE1hZ2ljIHNldC1wcm9wZXJ0eSBjb21tYW5kXHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKi9cclxuICBoYW5kbGVTZXRQcm9wZXJ0eShjb21tYW5kOiBHdWlDb21tYW5kKSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuT3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuUmVhZE9ubHk6IHtcclxuICAgICAgICBpZihjb21tYW5kLm9iai5UeXBlID09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RFWFQpXHJcbiAgICAgICAgaWYgKGNvbW1hbmQub2JqMSAhPSB0cnVlKVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5odG1sRWxlbWVudCwgY29tbWFuZC5PcGVyYXRpb24pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaHRtbEVsZW1lbnQsIGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLnN0cik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbnVwXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==