@wavemaker/app-ng-runtime 11.4.3-next.140441 → 11.4.3-next.140443

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 (77) hide show
  1. app-ng-runtime/components/basic/search/bundles/index.umd.js +7 -0
  2. app-ng-runtime/components/basic/search/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/components/basic/search/esm2015/search.component.js +7 -1
  4. app-ng-runtime/components/basic/search/fesm2015/index.js +6 -0
  5. app-ng-runtime/components/basic/search/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/basic/tree/bundles/index.umd.js +236 -132
  7. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +208 -135
  9. app-ng-runtime/components/basic/tree/fesm2015/index.js +207 -134
  10. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  11. app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
  12. app-ng-runtime/components/basic/tree/tree.component.d.ts +21 -25
  13. app-ng-runtime/components/chart/bundles/index.umd.js +1 -7
  14. app-ng-runtime/components/chart/bundles/index.umd.js.map +1 -1
  15. app-ng-runtime/components/chart/esm2015/chart.component.js +2 -8
  16. app-ng-runtime/components/chart/fesm2015/index.js +1 -7
  17. app-ng-runtime/components/chart/fesm2015/index.js.map +1 -1
  18. app-ng-runtime/components/chart/index.metadata.json +1 -1
  19. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +0 -6
  20. app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
  21. app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +1 -7
  22. app-ng-runtime/components/containers/tabs/fesm2015/index.js +0 -6
  23. app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
  24. app-ng-runtime/components/containers/tabs/index.metadata.json +1 -1
  25. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +0 -2
  26. app-ng-runtime/components/data/form/bundles/index.umd.js +3 -9
  27. app-ng-runtime/components/data/form/bundles/index.umd.js.map +1 -1
  28. app-ng-runtime/components/data/form/esm2015/form.component.js +5 -11
  29. app-ng-runtime/components/data/form/fesm2015/index.js +4 -10
  30. app-ng-runtime/components/data/form/fesm2015/index.js.map +1 -1
  31. app-ng-runtime/components/data/form/index.metadata.json +1 -1
  32. app-ng-runtime/components/input/calendar/bundles/index.umd.js +1 -11
  33. app-ng-runtime/components/input/calendar/bundles/index.umd.js.map +1 -1
  34. app-ng-runtime/components/input/calendar/calendar.component.d.ts +2 -4
  35. app-ng-runtime/components/input/calendar/esm2015/calendar.component.js +2 -12
  36. app-ng-runtime/components/input/calendar/fesm2015/index.js +1 -11
  37. app-ng-runtime/components/input/calendar/fesm2015/index.js.map +1 -1
  38. app-ng-runtime/components/input/calendar/index.metadata.json +1 -1
  39. app-ng-runtime/components/input/default/bundles/index.umd.js +3 -9
  40. app-ng-runtime/components/input/default/bundles/index.umd.js.map +1 -1
  41. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -4
  42. app-ng-runtime/components/input/default/esm2015/base-form-custom.component.js +4 -2
  43. app-ng-runtime/components/input/default/esm2015/dataset-aware-form.component.js +1 -9
  44. app-ng-runtime/components/input/default/fesm2015/index.js +3 -9
  45. app-ng-runtime/components/input/default/fesm2015/index.js.map +1 -1
  46. app-ng-runtime/components/input/default/index.metadata.json +1 -1
  47. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +0 -1
  48. app-ng-runtime/components/input/epoch/bundles/index.umd.js +24 -25
  49. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  50. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +19 -17
  51. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -5
  52. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +10 -10
  53. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
  54. app-ng-runtime/components/input/epoch/esm2015/time/time.component.js +2 -2
  55. app-ng-runtime/components/input/epoch/fesm2015/index.js +31 -31
  56. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  57. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  58. app-ng-runtime/core/bundles/index.umd.js +7 -9
  59. app-ng-runtime/core/bundles/index.umd.js.map +1 -1
  60. app-ng-runtime/core/esm2015/services/viewport.service.js +7 -9
  61. app-ng-runtime/core/esm2015/utils/utils.js +2 -2
  62. app-ng-runtime/core/fesm2015/index.js +7 -9
  63. app-ng-runtime/core/fesm2015/index.js.map +1 -1
  64. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +1 -1
  65. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js.map +1 -1
  66. app-ng-runtime/mobile/components/basic/default/esm2015/image-cache/image-cache.directive.js +2 -2
  67. app-ng-runtime/mobile/components/basic/default/fesm2015/index.js +1 -1
  68. app-ng-runtime/mobile/components/basic/default/fesm2015/index.js.map +1 -1
  69. app-ng-runtime/mobile/components/basic/default/index.metadata.json +1 -1
  70. app-ng-runtime/package.json +1 -1
  71. app-ng-runtime/runtime/base/bundles/index.umd.js +2 -35
  72. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  73. app-ng-runtime/runtime/base/esm2015/services/i18n.service.js +3 -35
  74. app-ng-runtime/runtime/base/fesm2015/index.js +2 -34
  75. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  76. app-ng-runtime/runtime/base/index.metadata.json +1 -1
  77. app-ng-runtime/runtime/base/services/i18n.service.d.ts +0 -2
@@ -101,16 +101,11 @@ export class CalendarComponent extends StylableComponent {
101
101
  i18nService.initCalendarLocale();
102
102
  FullCalendar.__wm_locale_initialized = true;
103
103
  }
104
- this.cancelLocaleChangeSubscription = this.getAppInstance().subscribe("locale-changed", (libLocale) => {
105
- this.setLocale();
106
- this.applyCalendarOptions('option', 'locale', libLocale.fullCalendar || 'en');
107
- this.redraw();
108
- });
109
104
  }
110
105
  // this function selects the default date given for the calendar
111
106
  selectDate() {
112
107
  let start, end;
113
- // checks if datavalue is an object and not a Date object
108
+ // checks if datavalue is an object and not a Date object
114
109
  if (_.isObject(this.datavalue) && !_.isDate(this.datavalue)) {
115
110
  start = moment(this.datavalue.start);
116
111
  end = moment(this.datavalue.end);
@@ -582,11 +577,6 @@ export class CalendarComponent extends StylableComponent {
582
577
  });
583
578
  });
584
579
  }
585
- ngOnDestroy() {
586
- if (this.cancelLocaleChangeSubscription) {
587
- this.cancelLocaleChangeSubscription();
588
- }
589
- }
590
580
  }
591
581
  CalendarComponent.initializeProps = registerProps();
592
582
  CalendarComponent.decorators = [
@@ -609,4 +599,4 @@ CalendarComponent.propDecorators = {
609
599
  _datepicker: [{ type: ViewChild, args: ['datepicker',] }]
610
600
  };
611
601
  export { ɵ0, ɵ1 };
612
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NhbGVuZGFyL3NyYy9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUE4QyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdKLE9BQU8sRUFBQyxlQUFlLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQWUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQXVDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9LLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlqRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9NLE1BQU0sb0JBQW9CLEdBQUc7SUFDekIsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixNQUFNLEVBQUUsT0FBTztJQUNmLEdBQUcsRUFBRSxxQ0FBcUM7Q0FDN0MsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHO0lBQ2YsS0FBSyxFQUFFLE9BQU87SUFDZCxNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtDQUNmLENBQUM7QUFDRixNQUFNLFdBQVcsR0FBRztJQUNoQixJQUFJLEVBQUUs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QkFBa0I7UUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFFLE1BQU0sRUFBRSxVQUFVLEtBQUs7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLEtBQUs7Z0JBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUcsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ3BDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQzs7QUFwbUJNLGlDQUFlLEdBQUcsYUFBYSxFQUFFLENBQUM7O1lBVjVDLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsY0FBYztnQkFDeEIseUVBQXdDO2dCQUV4QyxTQUFTLEVBQUU7b0JBQ1Asa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7aUJBQ3hDO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN4Qzs7O1lBOUUyRSxRQUFRO1lBRXBDLG1CQUFtQjs7O3dCQWdGOUQsU0FBUyxTQUFDLFVBQVU7MEJBQ3BCLFNBQVMsU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpY2tlcklubmVyQ29tcG9uZW50IH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyL2RhdGVwaWNrZXItaW5uZXIuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQXR0cmlidXRlLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge2dldENsb25lZE9iamVjdCwgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtLCBBYnN0cmFjdEkxOG5TZXJ2aWNlLCBpc01vYmlsZUFwcCwgaXNNb2JpbGV9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIGNyZWF0ZUFycmF5RnJvbSwgZ2V0RXZhbHVhdGVkRGF0YSwgSVdpZGdldENvbmZpZywgSVJlZHJhd2FibGVDb21wb25lbnQsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jYWxlbmRhci5wcm9wcyc7XG5cbmRlY2xhcmUgY29uc3QgXywgJCwgbW9tZW50O1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtY2FsZW5kYXInO1xuY29uc3QgZGF0ZUZvcm1hdHMgPSBbJ3l5eXktTU0tZGQnLCAneXl5eS1NLWRkJywgJ00tZGQteXl5eScsICdNTS1kZC15eScsICd5eXl5LCBkZCBNTU1NJywgJ3l5eXksIE1NTSBkZCcsICdNTS9kZC95eXl5JywgJ00vZC95eXl5JywgJ0VFRSwgZGQgTU1NIHl5eXknLCAnRUVFIE1NTSBkZCB5eXl5JywgJ0VFRUUsIE1NTU0gZGQsIHl5eXknLCAndGltZXN0YW1wJ107XG5jb25zdCBkZWZhdWx0SGVhZGVyT3B0aW9ucyA9IHtcbiAgICBzdGFydDogJ3ByZXYgbmV4dCB0b2RheScsXG4gICAgY2VudGVyOiAndGl0bGUnLFxuICAgIGVuZDogJ2RheUdyaWRNb250aCBkYXlHcmlkV2VlayBkYXlHcmlkRGF5J1xufTtcbmNvbnN0IFZJRVdfVFlQRVMgPSB7XG4gICAgQkFTSUM6ICdiYXNpYycsXG4gICAgQUdFTkRBOiAnYWdlbmRhJyxcbiAgICBMSVNUOiAnbGlzdCdcbn07XG5jb25zdCBCVVRUT05fVEVYVCA9IHtcbiAgICBZRUFSOiAnWWVhcicsXG4gICAgTU9OVEg6ICdNb250aCcsXG4gICAgV0VFSzogJ1dlZWsnLFxuICAgIERBWTogJ0RheScsXG4gICAgVE9EQVk6ICdUb2RheSdcbn07XG5jb25zdCBTRUxFQ1RJT05fTU9ERVMgPSB7XG4gICAgTk9ORTogJ25vbmUnLFxuICAgIFNJTkdMRTogJ3NpbmdsZScsXG4gICAgTVVMVElQTEU6ICdtdWx0aXBsZSdcbn07XG5jb25zdCBORVhUX0RBWV9USFJFU0hPTEQgPSB7XG4gICAgU1RBUlQ6ICcwMDowMCcsXG4gICAgRU5EOiAnMjQ6MDAnXG59O1xuY29uc3QgZ2V0RXZlbnRNb21lbnRWYWx1ZSA9ICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgbGV0IGlzRGF0ZSA9IGZhbHNlO1xuXG4gICAgZGF0ZUZvcm1hdHMuZm9yRWFjaCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIC8vIG1vbWVudCBzdXBwb3J0cyB1cHBlcmNhc2UgZm9ybWF0c1xuICAgICAgICBpZiAobW9tZW50KHZhbHVlLCBmb3JtYXQudG9VcHBlckNhc2UoKSwgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBpc0RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgZGF0ZSB0aGVuIGZvciBlbmQgZGF0ZSB0aGUgdmFsdWUgc2hvdWxkIGJlIGVuZCBvZiB0aGUgZGF5IGFzIHRoZSBjYWxlbmRhciBpcyBhcHByb3hpbWF0aW5nIGl0IHRvIHRoZSBzdGFydC5cbiAgICBpZiAoaXNEYXRlICYmIGtleSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZW5kT2YoJ2RheScpO1xuICAgIH1cblxuICAgIHJldHVybiBtb21lbnQodmFsdWUpO1xufTtcbmNvbnN0IGdldFVUQ0RhdGVUaW1lID0gKGRhdGVPYmopID0+IHtcbiAgICBkYXRlT2JqID0gbW9tZW50KGRhdGVPYmopO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlT2JqLmZvcm1hdCgnWVlZWScpLFxuICAgICAgICAvLyBqYXZhc2NyaXB0IHN0YXJ0cyB0aGUgbW9udGggY291bnQgZnJvbSAnMCcgd2hlcmUgYXMgbW9tZW50IHJldHVybnMgdGhlIGh1bWFuIGNvdW50XG4gICAgICAgIG1vbnRoID0gZGF0ZU9iai5mb3JtYXQoJ01NJykgLSAxLFxuICAgICAgICBkYXkgPSBkYXRlT2JqLmZvcm1hdCgnREQnKSxcbiAgICAgICAgaG91cnMgPSBkYXRlT2JqLmZvcm1hdCgnSEgnKSxcbiAgICAgICAgbWludXRlcyA9IGRhdGVPYmouZm9ybWF0KCdtbScpLFxuICAgICAgICBzZWNvbmRzID0gZGF0ZU9iai5mb3JtYXQoJ3NzJyk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbn07XG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1jYWxlbmRhcicsIGhvc3RDbGFzczogREVGQVVMVF9DTFN9O1xuY29uc3QgZGF0ZUZvcm1hdCA9ICdZWVlZL01NL0REJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21DYWxlbmRhcl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mdWxsY2FsZW5kYXIvbWFpbi5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENhbGVuZGFyQ29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3ksIElSZWRyYXdhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIC8vIFRoZSBjYWxlbmRhciBlbGVtZW50IHJlZmVyZW5jZVxuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgX2NhbGVuZGFyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXInKSBfZGF0ZXBpY2tlcjogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBfZGF0ZXBpY2tlcklubmVyQ29tcG9uZW50OiBEYXRlUGlja2VySW5uZXJDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRkYXRlczogYW55O1xuICAgIHB1YmxpYyBzZWxlY3RlZGRhdGE6IGFueTtcbiAgICBwdWJsaWMgY3VycmVudHZpZXc6IG9iamVjdDtcbiAgICBwdWJsaWMgZGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBjYWxlbmRhcnR5cGU7XG4gICAgcHVibGljIGNvbnRyb2xzID0gJ25hdmlnYXRpb24sIHRvZGF5LCB5ZWFyLCBtb250aCwgd2VlaywgZGF5JztcbiAgICBwdWJsaWMgZGF0YXZhbHVlO1xuICAgIHB1YmxpYyBldmVudHRpdGxlO1xuICAgIHB1YmxpYyBldmVudHN0YXJ0O1xuICAgIHB1YmxpYyBldmVudGVuZDtcbiAgICBwdWJsaWMgZXZlbnRhbGxkYXk7XG4gICAgcHVibGljIGV2ZW50Y2xhc3M7XG5cbiAgICBwcml2YXRlIGV2ZW50U291cmNlczogQXJyYXk8YW55PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBkYXRhU2V0RXZlbnRzID0ge1xuICAgICAgICBldmVudHM6IFtdXG4gICAgfTtcbiAgICBwcml2YXRlIG9sZERhdGE7XG4gICAgLy8gbWFwIHRoZSBmdWxsY2FsZW5kYXIgRWxlbWVudCByZW5kZXJlZFxuICAgIHByaXZhdGUgJGZ1bGxDYWxlbmRhcjtcbiAgICAvLyBtb2RlbCB0byB0aGUgbW9iaWxlIGNhbGVuZGFyXG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsO1xuICAgIHByaXZhdGUgZXZlbnREYXRhO1xuICAgIHByaXZhdGUgZXZlbnRzO1xuICAgIHByaXZhdGUgY2hhbmdlc1N0YWNrID0gW107XG5cbiAgICAvLyBjYWxlbmRhck9wdGlvbnMgdG8gdGhlIGNhbGVuZGFyXG4gICAgcHJpdmF0ZSBjYWxlbmRhck9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgZXZlbnRTb3VyY2VzOiB0aGlzLmV2ZW50U291cmNlcyxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgbG9jYWxlOiBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0oJ3NlbGVjdGVkTG9jYWxlJykgfHwgJ2VuJyxcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgbG9uZ1ByZXNzRGVsYXk6IGlzTW9iaWxlKCkgPyAxIDogMTAwMCxcbiAgICAgICAgICAgIGhlYWRlclRvb2xiYXI6IGRlZmF1bHRIZWFkZXJPcHRpb25zLFxuICAgICAgICAgICAgbmV4dERheVRocmVzaG9sZDogTkVYVF9EQVlfVEhSRVNIT0xELFxuICAgICAgICAgICAgdmlld3M6IHtcbiAgICAgICAgICAgICAgICBtb250aDoge1xuICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHNSb3c6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zZWxlY3RBdXRvOiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50RHJvcDogdGhpcy5ldmVudERyb3AuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50UmVzaXplU3RhcnQ6IHRoaXMub25FdmVudENoYW5nZVN0YXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgICBldmVudERyYWdTdGFydDogdGhpcy5vbkV2ZW50Q2hhbmdlU3RhcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50UmVzaXplOiB0aGlzLmV2ZW50UmVzaXplLmJpbmQodGhpcyksXG4gICAgICAgICAgICBldmVudENsaWNrOiB0aGlzLmV2ZW50Q2xpY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGVjdDogdGhpcy5zZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50RGlkTW91bnQ6IHRoaXMuZXZlbnREaWRNb3VudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmlld0RpZE1vdW50OiB0aGlzLnZpZXdEaWRNb3VudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGF0ZXNTZXQ6IHRoaXMuZGF0ZXNTZXQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGRhdGVDbGljazogdGhpcy5kYXRlQ2xpY2suYmluZCh0aGlzKVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwdWJsaWMgdmlldzogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF5Q2xhc3M6IEFycmF5PGFueT4gPSBbXTtcbiAgICBwcml2YXRlIGNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCBkYXRlIGdpdmVuIGZvciB0aGUgY2FsZW5kYXJcbiAgICBzZWxlY3REYXRlKCkge1xuICAgICAgICBsZXQgc3RhcnQsIGVuZDtcbiAgICAgICAgLy8gY2hlY2tzIGlmIGRhdGF2YWx1ZSBpcyBhbiBvYmplY3QgYW5kIG5vdCBhIERhdGUgb2JqZWN0XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuZGF0YXZhbHVlKSAmJiAhXy5pc0RhdGUodGhpcy5kYXRhdmFsdWUpKSB7XG4gICAgICAgICAgICBzdGFydCA9IG1vbWVudCh0aGlzLmRhdGF2YWx1ZS5zdGFydCk7XG4gICAgICAgICAgICBlbmQgICA9IG1vbWVudCh0aGlzLmRhdGF2YWx1ZS5lbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgZW5kICAgPSBtb21lbnQodGhpcy5kYXRhdmFsdWUpLmFkZCgxLCAnZGF5Jykuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuZ290b0RhdGUoIG1vbWVudChzdGFydCkuX2QpOyAvLyBhZnRlciBzZWxlY3RpbmcgdGhlIGRhdGUgZ28gdG8gdGhlIGRhdGUuXG5cbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnNlbGVjdChzdGFydC52YWx1ZU9mKCksIGVuZC52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZXMgdGhlIGNhbGVuZGFyIHZpZXcgdG8gdGhlIGRlZmF1bHQgZGF0ZSBnaXZlbiBmb3IgdGhlIGNhbGVuZGFyLlxuICAgIHB1YmxpYyBnb3RvRGF0ZSgpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmdvdG9EYXRlKCBtb21lbnQodGhpcy5kYXRhdmFsdWUpLl9kKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIHllYXIgYWhlYWRcbiAgICBwdWJsaWMgZ290b05leHRZZWFyKCkge1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIubmV4dFllYXIoKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIHllYXIgYmVmb3JlXG4gICAgcHVibGljIGdvdG9QcmV2WWVhcigpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnByZXZZZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FsZW5kYXIgdmlldyB0byB0aGUgc3BlY2lmaWVkIG1vbnRoXG4gICAgICogQHBhcmFtIG1vbnRoVmFsLCAxLTEyIHZhbHVlIG9mIG1vbnRoXG4gICAgICovXG4gICAgcHVibGljIGdvdG9Nb250aChtb250aFZhbCkge1xuICAgICAgICBsZXQgcHJlc2VudERheSA9IHRoaXMuJGZ1bGxDYWxlbmRhci5nZXREYXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXNlbnRNb250aFZhbCA9IHByZXNlbnREYXkuZ2V0TW9udGgoKTtcbiAgICAgICAgcHJlc2VudERheSA9IG1vbWVudChwcmVzZW50RGF5KTtcbiAgICAgICAgaWYgKHByZXNlbnRNb250aFZhbCA8IG1vbnRoVmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuZ290b0RhdGUocHJlc2VudERheS5hZGQobW9udGhWYWwgLSBwcmVzZW50TW9udGhWYWwgLSAxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuZ290b0RhdGUocHJlc2VudERheS5zdWJ0cmFjdCggcHJlc2VudE1vbnRoVmFsIC0gbW9udGhWYWwgKyAxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIG1vbnRoIGFoZWFkXG4gICAgcHVibGljIGdvdG9OZXh0TW9udGgoKSB7XG4gICAgICAgIGNvbnN0IHByZXNlbnREYXkgPSBtb21lbnQodGhpcy4kZnVsbENhbGVuZGFyLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5nb3RvRGF0ZShwcmVzZW50RGF5LmFkZCgxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FsZW5kYXIgdmlldyB0byB0aGUgYSBtb250aCBiZWZvcmVcbiAgICBwdWJsaWMgZ290b1ByZXZNb250aCgpIHtcbiAgICAgICAgY29uc3QgcHJlc2VudERheSA9IG1vbWVudCh0aGlzLiRmdWxsQ2FsZW5kYXIuZ2V0RGF0ZSgpKTtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmdvdG9EYXRlKHByZXNlbnREYXkuc3VidHJhY3QoMSwgJ00nKS52YWx1ZU9mKCkpO1xuICAgIH1cblxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiByZS1yZW5kZXJzIHRoZSBldmVudHMgYXNzaWduZWQgdG8gdGhlIGNhbGVuZGFyLlxuICAgIHB1YmxpYyByZXJlbmRlckV2ZW50cygpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWREYXRhKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgbGV0IGRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRlcyA9IFtdO1xuICAgICAgICBjb25zdCBldmVudFN0YXJ0S2V5ID0gdGhpcy5ldmVudHN0YXJ0IHx8ICdzdGFydCc7XG4gICAgICAgIGNvbnN0IGV2ZW50RW5kS2V5ID0gdGhpcy5ldmVudGVuZCB8fCAnZW5kJztcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KG5ldyBEYXRlKHN0YXJ0KSkuZm9ybWF0KCdNTS9ERC9ZWVlZJyk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBtb21lbnQobmV3IERhdGUoZW5kKSkuc3VidHJhY3QoMSwgJ2RheXMnKS5mb3JtYXQoJ01NL0REL1lZWVknKTtcblxuICAgICAgICBkYXRhc2V0ID0gZGF0YXNldC5kYXRhIHx8IGRhdGFzZXQ7XG4gICAgICAgIGRhdGFzZXQuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWVbZXZlbnRTdGFydEtleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudFN0YXJ0RGF0ZSAgID0gbW9tZW50KG5ldyBEYXRlKHZhbHVlW2V2ZW50U3RhcnRLZXldKSkuZm9ybWF0KCdNTS9ERC9ZWVlZJyk7XG4gICAgICAgICAgICBjb25zdCBldmVudEVuZERhdGUgICA9IG1vbWVudChuZXcgRGF0ZSh2YWx1ZVtldmVudEVuZEtleV0gfHwgdmFsdWVbZXZlbnRTdGFydEtleV0pKS5mb3JtYXQoJ01NL0REL1lZWVknKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RXhpc3RzID0gbW9tZW50KGV2ZW50U3RhcnREYXRlKS5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiYgbW9tZW50KGV2ZW50RW5kRGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSk7XG4gICAgICAgICAgICBpZiAoZXZlbnRFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERyb3AoZXZlbnREcm9wSW5mbykge1xuICAgICAgICBsZXQgbmV3RGF0YU9iaiA9IHRoaXMuY29udmVydEV2ZW50T2JqRm9yT2xkQW5kTmV3RGF0YShldmVudERyb3BJbmZvLmV2ZW50KTtcbiAgICAgICAgbGV0IG9sZERhdGFPYmogPSB0aGlzLmNvbnZlcnRFdmVudE9iakZvck9sZEFuZE5ld0RhdGEoZXZlbnREcm9wSW5mby5vbGRFdmVudCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZXZlbnRkcm9wJywgeyRldmVudDogZXZlbnREcm9wSW5mby5qc0V2ZW50LCAkbmV3RGF0YTogbmV3RGF0YU9iaiwgJG9sZERhdGE6IG9sZERhdGFPYmosICRkZWx0YTogZXZlbnREcm9wSW5mby5kZWx0YSwgJHJldmVydEZ1bmM6IGV2ZW50RHJvcEluZm8ucmV2ZXJ0LCAkdWk6IHt9LCAkdmlldzogZXZlbnREcm9wSW5mby52aWV3fSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGVmYXVsdCBkYXRlIHdoZW4gdGhlIGRhdGF2YWx1ZSBpcyBwcm92aWRlZFxuICAgIGdldERlZmF1bHREYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJPcHRpb25zO1xuICAgIH1cblxuICAgIGdldExpYigpIHtcbiAgICAgICAgcmV0dXJuICdmdWxsY2FsZW5kYXInO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0KCRzZWxlY3Rpb25JbmZvKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRkYXRlcyA9IHtzdGFydDogZ2V0VVRDRGF0ZVRpbWUoJHNlbGVjdGlvbkluZm8uc3RhcnQpLCBlbmQ6IGdldFVUQ0RhdGVUaW1lKCRzZWxlY3Rpb25JbmZvLmVuZCl9O1xuICAgICAgICB0aGlzLnNlbGVjdGVkZGF0YSA9IHRoaXMuc2V0U2VsZWN0ZWREYXRhKCRzZWxlY3Rpb25JbmZvLnN0YXJ0LCAkc2VsZWN0aW9uSW5mby5lbmQpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHskc3RhcnQ6ICRzZWxlY3Rpb25JbmZvLnN0YXJ0LnZhbHVlT2YoKSwgJGVuZDogJHNlbGVjdGlvbkluZm8uZW5kLnZhbHVlT2YoKSwgJHZpZXc6ICRzZWxlY3Rpb25JbmZvLnZpZXcsICRkYXRhOiB0aGlzLnNlbGVjdGVkZGF0YX0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICB0aGlzIGZ1bmN0aW9ucyB1bnNlbGVjdHMgYWxsIHRoZSBzZWxlY3Rpb25zIGluIGNhbGVuZGFyXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0KCkge1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIudW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGFkZCBleHRlbmRlZFByb3BzIGRhdGEgdG8gdGhlIGRhdGEgb2JqZWN0LlxuICAgICAqIHRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqIEBwYXJhbSBldmVudE9iaiBldmVudCBvYmplY3QgYXMgcGVyIG5ldyB2ZXJzaW9uICh2NSlcbiAgICAgKiBAcmV0dXJucyBfZXZlbnRNZXRhZGF0YSBldmVudCBvYmplY3QgYXMgcGVyIHRoZSBvbGQgdmVyc2lvbiAodjMpXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb252ZXJ0RXZlbnRPYmooZXZlbnRPYmopIHtcbiAgICAgICAgaWYgKCFldmVudE9iai5leHRlbmRlZFByb3BzLl9ldmVudE1ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRPYmo7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX2V2ZW50TWV0YWRhdGEgPSBldmVudE9iai5leHRlbmRlZFByb3BzLl9ldmVudE1ldGFkYXRhO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX2V2ZW50TWV0YWRhdGEsIGV2ZW50T2JqKTtcbiAgICAgICAgcmV0dXJuIF9ldmVudE1ldGFkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICB0aGlzIGZ1bmN0aW9uIGlzIHRvIGFkZCBleHRlbmRlZFByb3BzIGRhdGEgdG8gdGhlIGRhdGEgb2JqZWN0IGV4bHVkaW5nIHN0YXJ0IGVuZCB0aXRsZSBhbGxEYXkgb2JqZWN0cyBpZiB0aGUga2V5IG5hbWUgbWF0Y2hlcy5cbiAgICAgKiAqIHRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqIEBwYXJhbSBldmVudE9iaiBldmVudCBvYmplY3QgYXMgcGVyIG5ldyB2ZXJzaW9uICh2NSlcbiAgICAgKiBAcmV0dXJucyBkYXRhIGV2ZW50IG9iamVjdCBhcyBwZXIgdGhlIG9sZCB2ZXJzaW9uICh2MylcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnZlcnRFdmVudE9iakZvck9sZEFuZE5ld0RhdGEoZXZlbnRPYmopIHtcbiAgICAgICAgY29uc3QgX2V2ZW50TWV0YWRhdGEgPSBldmVudE9iai5leHRlbmRlZFByb3BzO1xuICAgICAgICBfLmV4dGVuZChldmVudE9iaiwgX2V2ZW50TWV0YWRhdGEpO1xuICAgICAgICByZXR1cm4gZXZlbnRPYmo7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudFJlc2l6ZShldmVudFJlc2l6ZUluZm8pIHtcbiAgICAgICAgbGV0IG5ld0RhdGFPYmogPSB0aGlzLmNvbnZlcnRFdmVudE9iakZvck9sZEFuZE5ld0RhdGEoZXZlbnRSZXNpemVJbmZvLmV2ZW50KTtcbiAgICAgICAgbGV0IG9sZERhdGFPYmogPSB0aGlzLmNvbnZlcnRFdmVudE9iakZvck9sZEFuZE5ld0RhdGEoZXZlbnRSZXNpemVJbmZvLm9sZEV2ZW50KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdldmVudHJlc2l6ZScsIHskZXZlbnQ6IGV2ZW50UmVzaXplSW5mby5qc0V2ZW50LCAkbmV3RGF0YTogbmV3RGF0YU9iaiwgJG9sZERhdGE6IG9sZERhdGFPYmosICRkZWx0YTogZXZlbnRSZXNpemVJbmZvLmRlbHRhLCAkcmV2ZXJ0RnVuYzogZXZlbnRSZXNpemVJbmZvLnJldmVydCwgJHVpOiB7fSwgJHZpZXc6IGV2ZW50UmVzaXplSW5mby52aWV3fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkV2ZW50Q2hhbmdlU3RhcnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbGREYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50Q2xpY2soZXZlbnRDbGlja0luZm8pIHtcbiAgICAgICAgbGV0IGV2ZW50T2JqID0gdGhpcy5jb252ZXJ0RXZlbnRPYmooZXZlbnRDbGlja0luZm8uZXZlbnQpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2V2ZW50Y2xpY2snLCB7JGV2ZW50OiBldmVudENsaWNrSW5mby5qc0V2ZW50LCAkZGF0YTogZXZlbnRPYmosICR2aWV3OiBldmVudENsaWNrSW5mby52aWV3fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERpZE1vdW50KGV2ZW50KSB7XG4gICAgICAgIGxldCBldmVudE9iaiA9IHRoaXMuY29udmVydEV2ZW50T2JqKGV2ZW50LmV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJ0eXBlID09PSBWSUVXX1RZUEVTLkxJU1QpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmZjLWxpc3QtdGFibGUnKS5hZGRDbGFzcygndGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2V2ZW50cmVuZGVyJywgeyRldmVudDogZXZlbnQuZWwsICRkYXRhOiBldmVudE9iaiwgJHZpZXc6IGV2ZW50LnZpZXd9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZpZXdEaWRNb3VudCgkdmlldykge1xuICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnR5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuZmMtbGlzdC10YWJsZScpLmFkZENsYXNzKCd0YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygndmlld3JlbmRlcicsIHskdmlldzogJHZpZXd9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIHZpZXcgb2YgdGhlIGNhbGVuZGFyIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIGRhdGEgY29udGFpbnMgdGhlIHN0YXJ0IGVuZCBkYXRhIG9mIHRoZSBjYWxlbmRhciB2aWV3LlxuICAgICAqL1xuICAgIHByaXZhdGUgZGF0ZXNTZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmN1cnJlbnR2aWV3ID0ge3N0YXJ0OiBtb21lbnQoZGF0YS5zdGFydCkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSwgZW5kOiBtb21lbnQoZGF0YS5lbmQpLmZvcm1hdChcIllZWVktTU0tRERcIil9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGF0ZUNsaWNrKCRpbmZvKSB7XG4gICAgICAgIGNvbnN0IGRhdGVJbmZvID0gZ2V0VVRDRGF0ZVRpbWUoJGluZm8uZGF0ZSkudmFsdWVPZigpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2RhdGVjbGljaycsIHskZGF0ZUluZm86IGRhdGVJbmZvfSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBjYWxlbmRhciBoZWFkZXIgb3B0aW9ucyBvbmNlIHRoZSBjb250cm9scyBjaGFuZ2VzXG4gICAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhckhlYWRlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGN0cmxzID0gdGhpcy5jb250cm9scywgdmlld1R5cGUgPSB0aGlzLmNhbGVuZGFydHlwZSxcbiAgICAgICAgICAgIHJlZ0V4ID0gbmV3IFJlZ0V4cCgnXFxcXGJkYXlcXFxcYicsICdnJyk7XG4gICAgICAgIGxldCBsZWZ0ID0gJycsIHJpZ2h0ID0gJyc7XG4gICAgICAgIGlmIChjdHJscyAmJiB2aWV3VHlwZSkge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY3RybHMsICduYXZpZ2F0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ICs9ICcgcHJldiBuZXh0JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY3RybHMsICd0b2RheScpKSB7XG4gICAgICAgICAgICAgICAgbGVmdCArPSAnIHRvZGF5JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY3RybHMsICd5ZWFyJykpIHtcbiAgICAgICAgICAgICAgICByaWdodCArPSAodmlld1R5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkgPyAnbGlzdFllYXInIDogJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGN0cmxzLCAnbW9udGgnKSkge1xuICAgICAgICAgICAgICAgIHJpZ2h0ICs9ICh2aWV3VHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICcgbGlzdE1vbnRoJyA6ICcgZGF5R3JpZE1vbnRoJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY3RybHMsICd3ZWVrJykpIHtcbiAgICAgICAgICAgICAgICByaWdodCArPSAodmlld1R5cGUgPT09IFZJRVdfVFlQRVMuQkFTSUMpID8gICcgZGF5R3JpZFdlZWsnIDogKHZpZXdUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJyBsaXN0V2VlaycgOiAnIHRpbWVHcmlkV2Vlayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWdFeC50ZXN0KGN0cmxzKSkge1xuICAgICAgICAgICAgICAgIHJpZ2h0ICs9ICh2aWV3VHlwZSA9PT0gVklFV19UWVBFUy5CQVNJQykgPyAgJyBkYXlHcmlkRGF5JyA6ICh2aWV3VHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICcgbGlzdERheScgOiAnIHRpbWVHcmlkRGF5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZWZ0LmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJpZ2h0LmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfLmV4dGVuZCh0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5oZWFkZXJUb29sYmFyLCB7J3N0YXJ0JzogbGVmdCwgJ2VuZCc6IHJpZ2h0fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRTb3VyY2VzLnB1c2godGhpcy5kYXRhU2V0RXZlbnRzKTtcbiAgICAgICAgY29uc3QgRnVsbENhbGVuZGFyID0gd2luZG93WydGdWxsQ2FsZW5kYXInXTtcbiAgICAgICAgaWYgKCFGdWxsQ2FsZW5kYXIuX193bV9sb2NhbGVfaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGkxOG5TZXJ2aWNlLmluaXRDYWxlbmRhckxvY2FsZSgpO1xuICAgICAgICAgICAgRnVsbENhbGVuZGFyLl9fd21fbG9jYWxlX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRBcHBJbnN0YW5jZSgpLnN1YnNjcmliZShcImxvY2FsZS1jaGFuZ2VkXCIsIChsaWJMb2NhbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlKCk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Q2FsZW5kYXJPcHRpb25zKCdvcHRpb24nLCAnbG9jYWxlJywgbGliTG9jYWxlLmZ1bGxDYWxlbmRhciB8fCAnZW4nKTtcbiAgICAgICAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIsIFsnaGVpZ2h0J10pO1xuICAgICAgICB0aGlzLnNldExvY2FsZSgpO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICBpZiAoa2V5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVIZWlnaHQobnYpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ29wdGlvbicsICdoZWlnaHQnLCB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rpb25tb2RlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYgIT09IFNFTEVDVElPTl9NT0RFUy5OT05FKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLnNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyT3B0aW9ucygnb3B0aW9uJywgJ3NlbGVjdGFibGUnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG52ID09PSBTRUxFQ1RJT05fTU9ERVMuU0lOR0xFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5zZWxlY3RDb25zdHJhaW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogJzAwOjAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lOiAnMjQ6MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ29wdGlvbicsICdzZWxlY3RDb25zdHJhaW50JywgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuc2VsZWN0Q29uc3RyYWludCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyT3B0aW9ucygnb3B0aW9uJywgJ3NlbGVjdENvbnN0cmFpbnQnLCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5zZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJPcHRpb25zKCdvcHRpb24nLCAnc2VsZWN0YWJsZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWV3JzpcbiAgICAgICAgICAgICAgICBpZiAobnYgIT09ICdtb250aCcgfHwgdGhpcy5jYWxlbmRhcnR5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5kZWZhdWx0VmlldyA9IHRoaXMuY2FsZW5kYXJ0eXBlICsgXy5jYXBpdGFsaXplKG52KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5kZWZhdWx0VmlldyA9IG52O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyT3B0aW9ucygnY2hhbmdlVmlldycsIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLmRlZmF1bHRWaWV3KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NhbGVuZGFydHlwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnR5cGUgPSBudiB8fCAnZGF5R3JpZCc7XG4gICAgICAgICAgICBjYXNlICdjb250cm9scyc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckhlYWRlck9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIGxldCBkYXRhU2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgIGRhdGFTZXQgPSBjcmVhdGVBcnJheUZyb20oZ2V0Q2xvbmVkT2JqZWN0KG52KSk7XG4gICAgICAgICAgICAgICAgZGF0YVNldCA9IHRoaXMuY29uc3RydWN0Q2FsZW5kYXJEYXRhc2V0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNldEV2ZW50cy5ldmVudHMgPSBkYXRhU2V0LmZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQgPSBldmVudC5zdGFydCB8fCBldmVudC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRXZlbnREYXRhU2V0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXI/LmNoYW5nZVZpZXcodGhpcy5nZXRWaWV3VHlwZSh0aGlzLnZpZXcgPyB0aGlzLnZpZXcgOiAnZGF5R3JpZE1vbnRoJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQgZm9yIHRoZSBldmVudCBsaW1pdCBhbmQgcGFyc2luZyB0aGUgdmFsdWUgd2hlbiBpdCBpcyBwZXJjZW50YWdlIGJhc2VkLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSGVpZ2h0KGhlaWdodCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0ICRwYXJlbnQgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkucGFyZW50KCksXG4gICAgICAgICAgICBlbEhlaWdodCA9IGhlaWdodCB8fCAnNjUwcHgnO1xuXG4gICAgICAgIGxldCBwYXJlbnRIZWlnaHQgPSAkcGFyZW50LmNzcygnaGVpZ2h0JyksXG4gICAgICAgICAgICBjb21wdXRlZEhlaWdodDogbnVtYmVyO1xuXG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGVsSGVpZ2h0LCAnJScpKSB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhwYXJlbnRIZWlnaHQsICclJykpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRIZWlnaHQgPSAkcGFyZW50LmhlaWdodCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHQgPSAocGFyc2VJbnQocGFyZW50SGVpZ2h0LCAxMCkgKiBOdW1iZXIoZWxIZWlnaHQucmVwbGFjZSgvXFwlL2csICcnKSkpIC8gMTAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHQgPSBwYXJzZUludChlbEhlaWdodCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLnZpZXdzLm1vbnRoLmV2ZW50TGltaXQgPSBwYXJzZUludCgnJyArIGNvbXB1dGVkSGVpZ2h0IC8gMjAwLCAxMCkgKyAxO1xuICAgICAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHQ7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJFbCA9IHRoaXMuX2NhbGVuZGFyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IEZ1bGxDYWxlbmRhciA9IHdpbmRvd1snRnVsbENhbGVuZGFyJ107XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyID0gbmV3IEZ1bGxDYWxlbmRhci5DYWxlbmRhcihjYWxlbmRhckVsLCB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhcik7XG4gICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhciA9ICBjYWxlbmRhcjtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW5kZXInLCB7JyRldmVudCcgOiB7fX0pO1xuICAgICAgICBjYWxlbmRhci5yZW5kZXIoKTtcblxuICAgICAgICAvLyBpZiB0aGUgY2hhbmdlcyBhcmUgYWxyZWFkeSBzdGFja2VkIGJlZm9yZSBjYWxlbmRhciByZW5kZXJzIHRoZW4gZXhlY3V0ZSB0aGVtIHdoZW4gbmVlZGVkXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1N0YWNrLmZvckVhY2goKGNoYW5nZU9iaikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDYWxlbmRhck9wdGlvbnMoY2hhbmdlT2JqLm9wZXJhdGlvblR5cGUsIGNoYW5nZU9iai5hcmd1bWVudEtleSwgY2hhbmdlT2JqLmFyZ3VtZW50VmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXNTdGFjay5sZW5ndGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9XTVMtMjI0MTIgOiBjaGFuZ2UgY2FsZW5kZXIncyB2aWV3IGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHNldCBmcm9tIHN0dWRpb1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5jaGFuZ2VWaWV3KHRoaXMuZ2V0Vmlld1R5cGUodGhpcy52aWV3ID8gdGhpcy52aWV3IDogJ2RheUdyaWRNb250aCcpKTtcbiAgICAgICAgfSw1MCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0cyB0aGUgY2FsZW5kYXIgZGF0YXNldCBieSBtYXBwaW5nIHRoZSBldmVudHN0YXJ0LCBldmVudGVuZCwgZXZlbnR0aXRsZSBldGMuLFxuICAgIHByaXZhdGUgY29uc3RydWN0Q2FsZW5kYXJEYXRhc2V0KGV2ZW50U291cmNlKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5ldmVudHRpdGxlIHx8ICd0aXRsZScsXG4gICAgICAgICAgICBhbGxEYXk6IHRoaXMuZXZlbnRhbGxkYXkgfHwgJ2FsbGRheScsXG4gICAgICAgICAgICBzdGFydDogdGhpcy5ldmVudHN0YXJ0IHx8ICdzdGFydCcsXG4gICAgICAgICAgICBlbmQ6IHRoaXMuZXZlbnRlbmQgfHwgJ2VuZCcsXG4gICAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuZXZlbnRjbGFzcyB8fCAnY2xhc3NOYW1lJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGV2ZW50U291cmNlLmZvckVhY2goKG9iaikgPT4ge1xuICAgICAgICAgICAgb2JqLl9ldmVudE1ldGFkYXRhID0gXy5jbG9uZShvYmopO1xuICAgICAgICAgICAgXy5tYXBLZXlzKHByb3BlcnRpZXMsICAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBvYmpWYWw7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3RpdGxlJykge1xuICAgICAgICAgICAgICAgICAgICBvYmpWYWwgPSBnZXRFdmFsdWF0ZWREYXRhKG9iaiwge2V4cHJlc3Npb246IHZhbHVlfSwgdGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FsbERheScpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqVmFsID0gISFfLmdldChvYmosIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpWYWwgPSBfLmdldChvYmosIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFvYmpWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IG9ialZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGV2ZW50U291cmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TG9jYWxlKCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gXy5nZXQodGhpcy5hcHBMb2NhbGUsICdMQUJFTF9DQUxFTkRBUl9ZRUFSJykgfHwgQlVUVE9OX1RFWFQuWUVBUjtcbiAgICAgICAgY29uc3QgbW9udGggPSBfLmdldCh0aGlzLmFwcExvY2FsZSwgJ0xBQkVMX0NBTEVOREFSX01PTlRIJykgfHwgQlVUVE9OX1RFWFQuTU9OVEg7XG4gICAgICAgIGNvbnN0IHdlZWsgPSBfLmdldCh0aGlzLmFwcExvY2FsZSwgJ0xBQkVMX0NBTEVOREFSX1dFRUsnKSB8fCBCVVRUT05fVEVYVC5XRUVLO1xuICAgICAgICBjb25zdCBkYXkgPSBfLmdldCh0aGlzLmFwcExvY2FsZSwgJ0xBQkVMX0NBTEVOREFSX0RBWScpIHx8IEJVVFRPTl9URVhULkRBWTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBfLmdldCh0aGlzLmFwcExvY2FsZSwgJ0xBQkVMX0NBTEVOREFSX1RPREFZJykgfHwgQlVUVE9OX1RFWFQuVE9EQVk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLmJ1dHRvblRleHQgICAgPSB7IHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIHRvZGF5LFxuICAgICAgICAgICAgJ2xpc3RZZWFyJzogeWVhcixcbiAgICAgICAgICAgICdsaXN0TW9udGgnOiBtb250aCxcbiAgICAgICAgICAgICdsaXN0V2Vlayc6IHdlZWssXG4gICAgICAgICAgICAnbGlzdERheSc6IGRheVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNhbGVuZGFyIG9wdGlvbnMgd2l0aCB0aGUgbmV3U2V0IG9mIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIG92ZXJyaWRlRGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICBpZiAoXy5pc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykubWFwKG9wdGlvbiA9PiB0aGlzLiRmdWxsQ2FsZW5kYXIuc2V0T3B0aW9uKG9wdGlvblswXSwgb3B0aW9uWzFdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpZiB0aGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY2FsZW5kYXIgcmVuZGVycywgdGhlIGNoYW5nZXMgYXJlIHB1c2hlZCBpbnRvIGNoYW5nZXNTdGFjayBhbmQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciB0aGUgY2FsZW5kYXIgZ2V0cyByZW5kZXJlZFxuICAgICAqIGlmIHRoZSBjYWxlbmRhciBpcyBhbHJlYWR5IHJlbmRlcmVkLCB0aGVuIHRoZSBzcGVjaWZpYyBvcGVyYXRpb24gd2lsbCBiZSBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBvcGVyYXRpb24gdHlwZVxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25UeXBlXG4gICAgICogQHBhcmFtIGFyZ3VtZW50S2V5XG4gICAgICogQHBhcmFtIGFyZ3VtZW50VmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGVDYWxlbmRhck9wdGlvbnMob3BlcmF0aW9uVHlwZTogc3RyaW5nLCBhcmd1bWVudEtleT86IGFueSwgYXJndW1lbnRWYWx1ZT86IGFueSk6IHZvaWQgey8vXG4gICAgICAgIGlmICghdGhpcy4kZnVsbENhbGVuZGFyKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXNTdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlOiBvcGVyYXRpb25UeXBlLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50S2V5OiBhcmd1bWVudEtleSxcbiAgICAgICAgICAgICAgICBhcmd1bWVudFZhbHVlOiBhcmd1bWVudFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGx5Q2FsZW5kYXJPcHRpb25zKG9wZXJhdGlvblR5cGUsIGFyZ3VtZW50S2V5LCBhcmd1bWVudFZhbHVlKTtcbiAgICB9XG5cbiAgICByZWRyYXcoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJPcHRpb25zKCdyZW5kZXInKTtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyPy5jaGFuZ2VWaWV3KHRoaXMuZ2V0Vmlld1R5cGUodGhpcy52aWV3ID8gdGhpcy52aWV3IDogJ2RheUdyaWRNb250aCcpKTtcbiAgICB9XG5cbiAgICAvLyBvbiBkYXRlIGNoYW5nZSBpbnZva2UgdGhlIHNlbGVjdCBldmVudCwgYW5kIGlmIGRhdGUgaGFzIGV2ZW50IG9uIGl0IHRoZW4gaW52b2tlIHRoZSBldmVudCBjbGljay5cbiAgICBwcml2YXRlIG9uVmFsdWVDaGFuZ2UodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSAgICAgICAgPSB0aGlzLnByb3h5TW9kZWwgJiYgbW9tZW50KHRoaXMucHJveHlNb2RlbCkuc3RhcnRPZignZGF5JykuZm9ybWF0KGRhdGVGb3JtYXQpLFxuICAgICAgICAgICAgc2VsZWN0ZWRFdmVudERhdGEgICA9IHRoaXMuZXZlbnREYXRhW3NlbGVjdGVkRGF0ZV0sXG4gICAgICAgICAgICBzdGFydCAgICAgICAgICAgICAgID0gbW9tZW50KHRoaXMucHJveHlNb2RlbCksXG4gICAgICAgICAgICBlbmQgICAgICAgICAgICAgICAgID0gbW9tZW50KHRoaXMucHJveHlNb2RlbCkuZW5kT2YoJ2RheScpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkZGF0YSA9IHNlbGVjdGVkRXZlbnREYXRhO1xuICAgICAgICB0aGlzLnNlbGVjdGVkZGF0ZXMgPSB7XG4gICAgICAgICAgICAnc3RhcnQnOiBtb21lbnQoc2VsZWN0ZWREYXRlKS52YWx1ZU9mKCksXG4gICAgICAgICAgICAnZW5kJyAgOiBtb21lbnQoc2VsZWN0ZWREYXRlKS5lbmRPZignZGF5JykudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLnNlbGVjdChzdGFydC52YWx1ZU9mKCksIGVuZC52YWx1ZU9mKCksIHt9LCB0aGlzLCBzZWxlY3RlZEV2ZW50RGF0YSk7XG4gICAgICAgIGlmIChzZWxlY3RlZEV2ZW50RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuZXZlbnRDbGljayhzZWxlY3RlZEV2ZW50RGF0YSwge30sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIG9mIGNhbGVuZGFyLCBhcGlrZXkgYW5kIGNhbGVuZGFySWQgYW5kIHdpbGwgaW50ZWdyYXRlIHRoZSByZXNwZWN0aXZlIGNhbGVuZGFyIHdpdGggZnVsbGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBldmVudE9iamVjdFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRFdmVudFNvdXJjZShldmVudE9iamVjdCkge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGV2ZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdhZGRFdmVudFNvdXJjZSBtZXRob2QgcmVxdWlyZXMgYW4gb2JqZWN0IGFzIGEgcGFyYW1ldGVyLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudE9iamVjdC5zb3VyY2UgPT09ICdnb29nbGUnKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50T2JqZWN0Lmdvb2dsZUNhbGVuZGFyQXBpS2V5IHx8ICFldmVudE9iamVjdC5nb29nbGVDYWxlbmRhcklkICkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRm9yIGdvb2dsZSBjYWxlbmRhciBpbnRlZ3JhdGlvbiwgXFwnZ29vZ2xlQ2FsZW5kYXJBcGlLZXlcXCcgYW5kIFxcJ2dvb2dsZUNhbGVuZGFySWRcXCcgc2hvdWxkIGJlIHBhc3NlZCBpbiB0aGUgcGFyYW1ldGVyIG9iamVjdC4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuc2V0T3B0aW9uKCdnb29nbGVDYWxlbmRhckFwaUtleScsIGV2ZW50T2JqZWN0Lmdvb2dsZUNhbGVuZGFyQXBpS2V5KTtcbiAgICAgICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5hZGRFdmVudFNvdXJjZSh7XG4gICAgICAgICAgICAgICAgZ29vZ2xlQ2FsZW5kYXJJZDogZXZlbnRPYmplY3QuZ29vZ2xlQ2FsZW5kYXJJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHZpZXdUeXBlS2V5IGFjY29yZGluZyB0byB0aGUgY2FsZW5kYXJUeXBlIGFuZCB2aWV3VHlwZSBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSB2aWV3S2V5XG4gICAgICovXG4gICAgZ2V0Vmlld1R5cGUodmlld0tleSkge1xuICAgICAgICBjb25zdCBjYWxlbmRhclR5cGUgPSB0aGlzLmNhbGVuZGFydHlwZTtcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlldztcbiAgICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgICBpZiAodmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgcmVzdWx0ID0gKGNhbGVuZGFyVHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICdsaXN0TW9udGgnIDogJ2RheUdyaWRNb250aCc7XG4gICAgICAgIH0gZWxzZSBpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkJBU0lDKSA/ICAnZGF5R3JpZFdlZWsnIDogKGNhbGVuZGFyVHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICdsaXN0V2VlaycgOiAndGltZUdyaWRXZWVrJztcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgcmVzdWx0ID0gKGNhbGVuZGFyVHlwZSA9PT0gVklFV19UWVBFUy5CQVNJQykgPyAgJ2RheUdyaWREYXknIDogKGNhbGVuZGFyVHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICdsaXN0RGF5JyA6ICd0aW1lR3JpZERheSc7XG4gICAgICAgIH0gZWxzZSBpZiAodmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJ2xpc3RZZWFyJyA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gdmlld0tleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25UeXBlXG4gICAgICogQHBhcmFtIGFyZ3VtZW50S2V5XG4gICAgICogQHBhcmFtIGFyZ3VtZW50VmFsdWVcbiAgICAgKiBIYW5kbGUgdmFyaW91cyBvcGVyYXRpb25zIGxpa2UgUmVuZGVyaW5nIENhbGVuZGFyLCBjaGFuZ2luZyB0aGUgY2FsZW5kYXIgdmlld1R5cGUsIHNldHRpbmcgdGhlIGNhbGVuZGFyT3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIG9wZXJhdGlvblR5cGUuXG4gICAgICovXG4gICAgYXBwbHlDYWxlbmRhck9wdGlvbnMob3BlcmF0aW9uVHlwZTogc3RyaW5nLCBhcmd1bWVudEtleT86IGFueSwgYXJndW1lbnRWYWx1ZT86IGFueSk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlbmRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnJlbmRlcigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuc2V0T3B0aW9uKGFyZ3VtZW50S2V5LCBhcmd1bWVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NoYW5nZVZpZXcnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdUeXBlKGFyZ3VtZW50S2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuY2hhbmdlVmlldyh2aWV3KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIG5ldyBldmVudHNEYXRhU2V0IHRvIHRoZSBjYWxlbmRhciBvYmplY3Qgd2l0aCBhZGRFdmVudCBNZXRob2QgYW5kIHJlLXJlbmRlcnMgdGhlIGNhbGVuZGFyXG4gICAgICovXG4gICAgcmVuZGVyRXZlbnREYXRhU2V0KCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmJhdGNoUmVuZGVyaW5nKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gc2VsZi4kZnVsbENhbGVuZGFyLmdldEV2ZW50cygpO1xuICAgICAgICAgICAgXy5lYWNoKCBldmVudHMsIGZ1bmN0aW9uKCBldmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHNlbGYuJGZ1bGxDYWxlbmRhci5nZXRFdmVudEJ5SWQoZXZlbnQuaWQpO1xuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXy5lYWNoKCBzZWxmLmRhdGFTZXRFdmVudHMuZXZlbnRzLCBmdW5jdGlvbiggZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLiRmdWxsQ2FsZW5kYXIuYWRkRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZih0aGlzLmNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NhbGVuZGFyL3NyYy9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUE4QyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEosT0FBTyxFQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBZSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFNUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBdUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFL0ssT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWpELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQztBQUNuQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL00sTUFBTSxvQkFBb0IsR0FBRztJQUN6QixLQUFLLEVBQUUsaUJBQWlCO0lBQ3hCLE1BQU0sRUFBRSxPQUFPO0lBQ2YsR0FBRyxFQUFFLHFDQUFxQztDQUM3QyxDQUFDO0FBQ0YsTUFBTSxVQUFVLEdBQUc7SUFDZixLQUFLLEVBQUUsT0FBTztJQUNkLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0NBQ2YsQ0FBQztBQUNGLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLElBQUksRUFBRSxN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LENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVUsS0FBSztnQkFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBdmxCTSxpQ0FBZSxHQUFHLGFBQWEsRUFBRSxDQUFDOztZQVY1QyxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHlFQUF3QztnQkFFeEMsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDO2lCQUN4QztnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDeEM7OztZQTlFMkUsUUFBUTtZQUVwQyxtQkFBbUI7Ozt3QkFnRjlELFNBQVMsU0FBQyxVQUFVOzBCQUNwQixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaWNrZXJJbm5lckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWlubmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEF0dHJpYnV0ZSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Z2V0Q2xvbmVkT2JqZWN0LCBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0sIEFic3RyYWN0STE4blNlcnZpY2UsIGlzTW9iaWxlQXBwLCBpc01vYmlsZX0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBBUFBMWV9TVFlMRVNfVFlQRSwgY3JlYXRlQXJyYXlGcm9tLCBnZXRFdmFsdWF0ZWREYXRhLCBJV2lkZ2V0Q29uZmlnLCBJUmVkcmF3YWJsZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL2NhbGVuZGFyLnByb3BzJztcblxuZGVjbGFyZSBjb25zdCBfLCAkLCBtb21lbnQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1jYWxlbmRhcic7XG5jb25zdCBkYXRlRm9ybWF0cyA9IFsneXl5eS1NTS1kZCcsICd5eXl5LU0tZGQnLCAnTS1kZC15eXl5JywgJ01NLWRkLXl5JywgJ3l5eXksIGRkIE1NTU0nLCAneXl5eSwgTU1NIGRkJywgJ01NL2RkL3l5eXknLCAnTS9kL3l5eXknLCAnRUVFLCBkZCBNTU0geXl5eScsICdFRUUgTU1NIGRkIHl5eXknLCAnRUVFRSwgTU1NTSBkZCwgeXl5eScsICd0aW1lc3RhbXAnXTtcbmNvbnN0IGRlZmF1bHRIZWFkZXJPcHRpb25zID0ge1xuICAgIHN0YXJ0OiAncHJldiBuZXh0IHRvZGF5JyxcbiAgICBjZW50ZXI6ICd0aXRsZScsXG4gICAgZW5kOiAnZGF5R3JpZE1vbnRoIGRheUdyaWRXZWVrIGRheUdyaWREYXknXG59O1xuY29uc3QgVklFV19UWVBFUyA9IHtcbiAgICBCQVNJQzogJ2Jhc2ljJyxcbiAgICBBR0VOREE6ICdhZ2VuZGEnLFxuICAgIExJU1Q6ICdsaXN0J1xufTtcbmNvbnN0IEJVVFRPTl9URVhUID0ge1xuICAgIFlFQVI6ICdZZWFyJyxcbiAgICBNT05USDogJ01vbnRoJyxcbiAgICBXRUVLOiAnV2VlaycsXG4gICAgREFZOiAnRGF5JyxcbiAgICBUT0RBWTogJ1RvZGF5J1xufTtcbmNvbnN0IFNFTEVDVElPTl9NT0RFUyA9IHtcbiAgICBOT05FOiAnbm9uZScsXG4gICAgU0lOR0xFOiAnc2luZ2xlJyxcbiAgICBNVUxUSVBMRTogJ211bHRpcGxlJ1xufTtcbmNvbnN0IE5FWFRfREFZX1RIUkVTSE9MRCA9IHtcbiAgICBTVEFSVDogJzAwOjAwJyxcbiAgICBFTkQ6ICcyNDowMCdcbn07XG5jb25zdCBnZXRFdmVudE1vbWVudFZhbHVlID0gKHZhbHVlLCBrZXkpID0+IHtcbiAgICBsZXQgaXNEYXRlID0gZmFsc2U7XG5cbiAgICBkYXRlRm9ybWF0cy5mb3JFYWNoKChmb3JtYXQpID0+IHtcbiAgICAgICAgLy8gbW9tZW50IHN1cHBvcnRzIHVwcGVyY2FzZSBmb3JtYXRzXG4gICAgICAgIGlmIChtb21lbnQodmFsdWUsIGZvcm1hdC50b1VwcGVyQ2FzZSgpLCB0cnVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIGlzRGF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBkYXRlIHRoZW4gZm9yIGVuZCBkYXRlIHRoZSB2YWx1ZSBzaG91bGQgYmUgZW5kIG9mIHRoZSBkYXkgYXMgdGhlIGNhbGVuZGFyIGlzIGFwcHJveGltYXRpbmcgaXQgdG8gdGhlIHN0YXJ0LlxuICAgIGlmIChpc0RhdGUgJiYga2V5ID09PSAnZW5kJykge1xuICAgICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5lbmRPZignZGF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vbWVudCh2YWx1ZSk7XG59O1xuY29uc3QgZ2V0VVRDRGF0ZVRpbWUgPSAoZGF0ZU9iaikgPT4ge1xuICAgIGRhdGVPYmogPSBtb21lbnQoZGF0ZU9iaik7XG4gICAgY29uc3QgeWVhciA9IGRhdGVPYmouZm9ybWF0KCdZWVlZJyksXG4gICAgICAgIC8vIGphdmFzY3JpcHQgc3RhcnRzIHRoZSBtb250aCBjb3VudCBmcm9tICcwJyB3aGVyZSBhcyBtb21lbnQgcmV0dXJucyB0aGUgaHVtYW4gY291bnRcbiAgICAgICAgbW9udGggPSBkYXRlT2JqLmZvcm1hdCgnTU0nKSAtIDEsXG4gICAgICAgIGRheSA9IGRhdGVPYmouZm9ybWF0KCdERCcpLFxuICAgICAgICBob3VycyA9IGRhdGVPYmouZm9ybWF0KCdISCcpLFxuICAgICAgICBtaW51dGVzID0gZGF0ZU9iai5mb3JtYXQoJ21tJyksXG4gICAgICAgIHNlY29uZHMgPSBkYXRlT2JqLmZvcm1hdCgnc3MnKTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xufTtcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWNhbGVuZGFyJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5jb25zdCBkYXRlRm9ybWF0ID0gJ1lZWVkvTU0vREQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bUNhbGVuZGFyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bGxjYWxlbmRhci9tYWluLmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkluaXQsIElSZWRyYXdhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIC8vIFRoZSBjYWxlbmRhciBlbGVtZW50IHJlZmVyZW5jZVxuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgX2NhbGVuZGFyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXInKSBfZGF0ZXBpY2tlcjogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBfZGF0ZXBpY2tlcklubmVyQ29tcG9uZW50OiBEYXRlUGlja2VySW5uZXJDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRkYXRlczogYW55O1xuICAgIHB1YmxpYyBzZWxlY3RlZGRhdGE6IGFueTtcbiAgICBwdWJsaWMgY3VycmVudHZpZXc6IG9iamVjdDtcbiAgICBwdWJsaWMgZGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBjYWxlbmRhcnR5cGU7XG4gICAgcHVibGljIGNvbnRyb2xzID0gJ25hdmlnYXRpb24sIHRvZGF5LCB5ZWFyLCBtb250aCwgd2VlaywgZGF5JztcbiAgICBwdWJsaWMgZGF0YXZhbHVlO1xuICAgIHB1YmxpYyBldmVudHRpdGxlO1xuICAgIHB1YmxpYyBldmVudHN0YXJ0O1xuICAgIHB1YmxpYyBldmVudGVuZDtcbiAgICBwdWJsaWMgZXZlbnRhbGxkYXk7XG4gICAgcHVibGljIGV2ZW50Y2xhc3M7XG5cbiAgICBwcml2YXRlIGV2ZW50U291cmNlczogQXJyYXk8YW55PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBkYXRhU2V0RXZlbnRzID0ge1xuICAgICAgICBldmVudHM6IFtdXG4gICAgfTtcbiAgICBwcml2YXRlIG9sZERhdGE7XG4gICAgLy8gbWFwIHRoZSBmdWxsY2FsZW5kYXIgRWxlbWVudCByZW5kZXJlZFxuICAgIHByaXZhdGUgJGZ1bGxDYWxlbmRhcjtcbiAgICAvLyBtb2RlbCB0byB0aGUgbW9iaWxlIGNhbGVuZGFyXG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsO1xuICAgIHByaXZhdGUgZXZlbnREYXRhO1xuICAgIHByaXZhdGUgZXZlbnRzO1xuICAgIHByaXZhdGUgY2hhbmdlc1N0YWNrID0gW107XG5cbiAgICAvLyBjYWxlbmRhck9wdGlvbnMgdG8gdGhlIGNhbGVuZGFyXG4gICAgcHJpdmF0ZSBjYWxlbmRhck9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgZXZlbnRTb3VyY2VzOiB0aGlzLmV2ZW50U291cmNlcyxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgbG9jYWxlOiBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0oJ3NlbGVjdGVkTG9jYWxlJykgfHwgJ2VuJyxcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgbG9uZ1ByZXNzRGVsYXk6IGlzTW9iaWxlKCkgPyAxIDogMTAwMCxcbiAgICAgICAgICAgIGhlYWRlclRvb2xiYXI6IGRlZmF1bHRIZWFkZXJPcHRpb25zLFxuICAgICAgICAgICAgbmV4dERheVRocmVzaG9sZDogTkVYVF9EQVlfVEhSRVNIT0xELFxuICAgICAgICAgICAgdmlld3M6IHtcbiAgICAgICAgICAgICAgICBtb250aDoge1xuICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHNSb3c6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zZWxlY3RBdXRvOiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50RHJvcDogdGhpcy5ldmVudERyb3AuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50UmVzaXplU3RhcnQ6IHRoaXMub25FdmVudENoYW5nZVN0YXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgICBldmVudERyYWdTdGFydDogdGhpcy5vbkV2ZW50Q2hhbmdlU3RhcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50UmVzaXplOiB0aGlzLmV2ZW50UmVzaXplLmJpbmQodGhpcyksXG4gICAgICAgICAgICBldmVudENsaWNrOiB0aGlzLmV2ZW50Q2xpY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGVjdDogdGhpcy5zZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGV2ZW50RGlkTW91bnQ6IHRoaXMuZXZlbnREaWRNb3VudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmlld0RpZE1vdW50OiB0aGlzLnZpZXdEaWRNb3VudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGF0ZXNTZXQ6IHRoaXMuZGF0ZXNTZXQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGRhdGVDbGljazogdGhpcy5kYXRlQ2xpY2suYmluZCh0aGlzKSAgIFxuICAgICAgICB9XG4gICAgfTtcbiAgICBwdWJsaWMgdmlldzogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF5Q2xhc3M6IEFycmF5PGFueT4gPSBbXTtcblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCBkYXRlIGdpdmVuIGZvciB0aGUgY2FsZW5kYXJcbiAgICBzZWxlY3REYXRlKCkge1xuICAgICAgICBsZXQgc3RhcnQsIGVuZDtcbiAgICAgICAgLy8gY2hlY2tzIGlmIGRhdGF2YWx1ZSBpcyBhbiBvYmplY3QgYW5kIG5vdCBhIERhdGUgb2JqZWN0IFxuICAgICAgICBpZiAoXy5pc09iamVjdCh0aGlzLmRhdGF2YWx1ZSkgJiYgIV8uaXNEYXRlKHRoaXMuZGF0YXZhbHVlKSkge1xuICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQodGhpcy5kYXRhdmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgZW5kICAgPSBtb21lbnQodGhpcy5kYXRhdmFsdWUuZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIGVuZCAgID0gbW9tZW50KHRoaXMuZGF0YXZhbHVlKS5hZGQoMSwgJ2RheScpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmdvdG9EYXRlKCBtb21lbnQoc3RhcnQpLl9kKTsgLy8gYWZ0ZXIgc2VsZWN0aW5nIHRoZSBkYXRlIGdvIHRvIHRoZSBkYXRlLlxuICAgICAgICBcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnNlbGVjdChzdGFydC52YWx1ZU9mKCksIGVuZC52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZXMgdGhlIGNhbGVuZGFyIHZpZXcgdG8gdGhlIGRlZmF1bHQgZGF0ZSBnaXZlbiBmb3IgdGhlIGNhbGVuZGFyLlxuICAgIHB1YmxpYyBnb3RvRGF0ZSgpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmdvdG9EYXRlKCBtb21lbnQodGhpcy5kYXRhdmFsdWUpLl9kKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIHllYXIgYWhlYWRcbiAgICBwdWJsaWMgZ290b05leHRZZWFyKCkge1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIubmV4dFllYXIoKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIHllYXIgYmVmb3JlXG4gICAgcHVibGljIGdvdG9QcmV2WWVhcigpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnByZXZZZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FsZW5kYXIgdmlldyB0byB0aGUgc3BlY2lmaWVkIG1vbnRoXG4gICAgICogQHBhcmFtIG1vbnRoVmFsLCAxLTEyIHZhbHVlIG9mIG1vbnRoXG4gICAgICovXG4gICAgcHVibGljIGdvdG9Nb250aChtb250aFZhbCkge1xuICAgICAgICBsZXQgcHJlc2VudERheSA9IHRoaXMuJGZ1bGxDYWxlbmRhci5nZXREYXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXNlbnRNb250aFZhbCA9IHByZXNlbnREYXkuZ2V0TW9udGgoKTtcbiAgICAgICAgcHJlc2VudERheSA9IG1vbWVudChwcmVzZW50RGF5KTtcbiAgICAgICAgaWYgKHByZXNlbnRNb250aFZhbCA8IG1vbnRoVmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuZ290b0RhdGUocHJlc2VudERheS5hZGQobW9udGhWYWwgLSBwcmVzZW50TW9udGhWYWwgLSAxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuZ290b0RhdGUocHJlc2VudERheS5zdWJ0cmFjdCggcHJlc2VudE1vbnRoVmFsIC0gbW9udGhWYWwgKyAxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHRoZSBhIG1vbnRoIGFoZWFkXG4gICAgcHVibGljIGdvdG9OZXh0TW9udGgoKSB7XG4gICAgICAgIGNvbnN0IHByZXNlbnREYXkgPSBtb21lbnQodGhpcy4kZnVsbENhbGVuZGFyLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5nb3RvRGF0ZShwcmVzZW50RGF5LmFkZCgxLCAnTScpLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FsZW5kYXIgdmlldyB0byB0aGUgYSBtb250aCBiZWZvcmVcbiAgICBwdWJsaWMgZ290b1ByZXZNb250aCgpIHtcbiAgICAgICAgY29uc3QgcHJlc2VudERheSA9IG1vbWVudCh0aGlzLiRmdWxsQ2FsZW5kYXIuZ2V0RGF0ZSgpKTtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmdvdG9EYXRlKHByZXNlbnREYXkuc3VidHJhY3QoMSwgJ00nKS52YWx1ZU9mKCkpO1xuICAgIH1cblxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiByZS1yZW5kZXJzIHRoZSBldmVudHMgYXNzaWduZWQgdG8gdGhlIGNhbGVuZGFyLlxuICAgIHB1YmxpYyByZXJlbmRlckV2ZW50cygpIHtcbiAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWREYXRhKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgbGV0IGRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRlcyA9IFtdO1xuICAgICAgICBjb25zdCBldmVudFN0YXJ0S2V5ID0gdGhpcy5ldmVudHN0YXJ0IHx8ICdzdGFydCc7XG4gICAgICAgIGNvbnN0IGV2ZW50RW5kS2V5ID0gdGhpcy5ldmVudGVuZCB8fCAnZW5kJztcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KG5ldyBEYXRlKHN0YXJ0KSkuZm9ybWF0KCdNTS9ERC9ZWVlZJyk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBtb21lbnQobmV3IERhdGUoZW5kKSkuc3VidHJhY3QoMSwgJ2RheXMnKS5mb3JtYXQoJ01NL0REL1lZWVknKTtcblxuICAgICAgICBkYXRhc2V0ID0gZGF0YXNldC5kYXRhIHx8IGRhdGFzZXQ7XG4gICAgICAgIGRhdGFzZXQuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWVbZXZlbnRTdGFydEtleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudFN0YXJ0RGF0ZSAgID0gbW9tZW50KG5ldyBEYXRlKHZhbHVlW2V2ZW50U3RhcnRLZXldKSkuZm9ybWF0KCdNTS9ERC9ZWVlZJyk7XG4gICAgICAgICAgICBjb25zdCBldmVudEVuZERhdGUgICA9IG1vbWVudChuZXcgRGF0ZSh2YWx1ZVtldmVudEVuZEtleV0gfHwgdmFsdWVbZXZlbnRTdGFydEtleV0pKS5mb3JtYXQoJ01NL0REL1lZWVknKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RXhpc3RzID0gbW9tZW50KGV2ZW50U3RhcnREYXRlKS5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiYgbW9tZW50KGV2ZW50RW5kRGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSk7XG4gICAgICAgICAgICBpZiAoZXZlbnRFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERyb3AoZXZlbnREcm9wSW5mbykge1xuICAgICAgICBsZXQgbmV3RGF0YU9iaiA9IHRoaXMuY29udmVydEV2ZW50T2JqRm9yT2xkQW5kTmV3RGF0YShldmVudERyb3BJbmZvLmV2ZW50KTtcbiAgICAgICAgbGV0IG9sZERhdGFPYmogPSB0aGlzLmNvbnZlcnRFdmVudE9iakZvck9sZEFuZE5ld0RhdGEoZXZlbnREcm9wSW5mby5vbGRFdmVudCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZXZlbnRkcm9wJywgeyRldmVudDogZXZlbnREcm9wSW5mby5qc0V2ZW50LCAkbmV3RGF0YTogbmV3RGF0YU9iaiwgJG9sZERhdGE6IG9sZERhdGFPYmosICRkZWx0YTogZXZlbnREcm9wSW5mby5kZWx0YSwgJHJldmVydEZ1bmM6IGV2ZW50RHJvcEluZm8ucmV2ZXJ0LCAkdWk6IHt9LCAkdmlldzogZXZlbnREcm9wSW5mby52aWV3fSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGVmYXVsdCBkYXRlIHdoZW4gdGhlIGRhdGF2YWx1ZSBpcyBwcm92aWRlZFxuICAgIGdldERlZmF1bHREYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJPcHRpb25zO1xuICAgIH1cblxuICAgIGdldExpYigpIHtcbiAgICAgICAgcmV0dXJuICdmdWxsY2FsZW5kYXInO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0KCRzZWxlY3Rpb25JbmZvKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRkYXRlcyA9IHtzdGFydDogZ2V0VVRDRGF0ZVRpbWUoJHNlbGVjdGlvbkluZm8uc3RhcnQpLCBlbmQ6IGdldFVUQ0RhdGVUaW1lKCRzZWxlY3Rpb25JbmZvLmVuZCl9O1xuICAgICAgICB0aGlzLnNlbGVjdGVkZGF0YSA9IHRoaXMuc2V0U2VsZWN0ZWREYXRhKCRzZWxlY3Rpb25JbmZvLnN0YXJ0LCAkc2VsZWN0aW9uSW5mby5lbmQpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHskc3RhcnQ6ICRzZWxlY3Rpb25JbmZvLnN0YXJ0LnZhbHVlT2YoKSwgJGVuZDogJHNlbGVjdGlvbkluZm8uZW5kLnZhbHVlT2YoKSwgJHZpZXc6ICRzZWxlY3Rpb25JbmZvLnZpZXcsICRkYXRhOiB0aGlzLnNlbGVjdGVkZGF0YX0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICB0aGlzIGZ1bmN0aW9ucyB1bnNlbGVjdHMgYWxsIHRoZSBzZWxlY3Rpb25zIGluIGNhbGVuZGFyXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0KCkge1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIudW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGFkZCBleHRlbmRlZFByb3BzIGRhdGEgdG8gdGhlIGRhdGEgb2JqZWN0LlxuICAgICAqIHRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqIEBwYXJhbSBldmVudE9iaiBldmVudCBvYmplY3QgYXMgcGVyIG5ldyB2ZXJzaW9uICh2NSlcbiAgICAgKiBAcmV0dXJucyBfZXZlbnRNZXRhZGF0YSBldmVudCBvYmplY3QgYXMgcGVyIHRoZSBvbGQgdmVyc2lvbiAodjMpXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb252ZXJ0RXZlbnRPYmooZXZlbnRPYmopIHtcbiAgICAgICAgaWYgKCFldmVudE9iai5leHRlbmRlZFByb3BzLl9ldmVudE1ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRPYmo7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX2V2ZW50TWV0YWRhdGEgPSBldmVudE9iai5leHRlbmRlZFByb3BzLl9ldmVudE1ldGFkYXRhO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX2V2ZW50TWV0YWRhdGEsIGV2ZW50T2JqKTtcbiAgICAgICAgcmV0dXJuIF9ldmVudE1ldGFkYXRhOyAgICAgXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWRkIGV4dGVuZGVkUHJvcHMgZGF0YSB0byB0aGUgZGF0YSBvYmplY3QgZXhsdWRpbmcgc3RhcnQgZW5kIHRpdGxlIGFsbERheSBvYmplY3RzIGlmIHRoZSBrZXkgbmFtZSBtYXRjaGVzLlxuICAgICAqICogdGhpcyBpcyBkb25lIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICogQHBhcmFtIGV2ZW50T2JqIGV2ZW50IG9iamVjdCBhcyBwZXIgbmV3IHZlcnNpb24gKHY1KVxuICAgICAqIEByZXR1cm5zIGRhdGEgZXZlbnQgb2JqZWN0IGFzIHBlciB0aGUgb2xkIHZlcnNpb24gKHYzKVxuICAgICAqL1xuICAgIHByaXZhdGUgY29udmVydEV2ZW50T2JqRm9yT2xkQW5kTmV3RGF0YShldmVudE9iaikge1xuICAgICAgICBjb25zdCBfZXZlbnRNZXRhZGF0YSA9IGV2ZW50T2JqLmV4dGVuZGVkUHJvcHM7XG4gICAgICAgIF8uZXh0ZW5kKGV2ZW50T2JqLCBfZXZlbnRNZXRhZGF0YSk7XG4gICAgICAgIHJldHVybiBldmVudE9iajsgICAgIFxuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnRSZXNpemUoZXZlbnRSZXNpemVJbmZvKSB7XG4gICAgICAgIGxldCBuZXdEYXRhT2JqID0gdGhpcy5jb252ZXJ0RXZlbnRPYmpGb3JPbGRBbmROZXdEYXRhKGV2ZW50UmVzaXplSW5mby5ldmVudCk7XG4gICAgICAgIGxldCBvbGREYXRhT2JqID0gdGhpcy5jb252ZXJ0RXZlbnRPYmpGb3JPbGRBbmROZXdEYXRhKGV2ZW50UmVzaXplSW5mby5vbGRFdmVudCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZXZlbnRyZXNpemUnLCB7JGV2ZW50OiBldmVudFJlc2l6ZUluZm8uanNFdmVudCwgJG5ld0RhdGE6IG5ld0RhdGFPYmosICRvbGREYXRhOiBvbGREYXRhT2JqLCAkZGVsdGE6IGV2ZW50UmVzaXplSW5mby5kZWx0YSwgJHJldmVydEZ1bmM6IGV2ZW50UmVzaXplSW5mby5yZXZlcnQsICR1aToge30sICR2aWV3OiBldmVudFJlc2l6ZUluZm8udmlld30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FdmVudENoYW5nZVN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMub2xkRGF0YSA9IGdldENsb25lZE9iamVjdChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudENsaWNrKGV2ZW50Q2xpY2tJbmZvKSB7XG4gICAgICAgIGxldCBldmVudE9iaiA9IHRoaXMuY29udmVydEV2ZW50T2JqKGV2ZW50Q2xpY2tJbmZvLmV2ZW50KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdldmVudGNsaWNrJywgeyRldmVudDogZXZlbnRDbGlja0luZm8uanNFdmVudCwgJGRhdGE6IGV2ZW50T2JqLCAkdmlldzogZXZlbnRDbGlja0luZm8udmlld30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnREaWRNb3VudChldmVudCkge1xuICAgICAgICBsZXQgZXZlbnRPYmogPSB0aGlzLmNvbnZlcnRFdmVudE9iaihldmVudC5ldmVudCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFydHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5mYy1saXN0LXRhYmxlJykuYWRkQ2xhc3MoJ3RhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdldmVudHJlbmRlcicsIHskZXZlbnQ6IGV2ZW50LmVsLCAkZGF0YTogZXZlbnRPYmosICR2aWV3OiBldmVudC52aWV3fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3RGlkTW91bnQoJHZpZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJ0eXBlID09PSBWSUVXX1RZUEVTLkxJU1QpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmZjLWxpc3QtdGFibGUnKS5hZGRDbGFzcygndGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3ZpZXdyZW5kZXInLCB7JHZpZXc6ICR2aWV3fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIHRoZSB2aWV3IG9mIHRoZSBjYWxlbmRhciBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSBzdGFydCBlbmQgZGF0YSBvZiB0aGUgY2FsZW5kYXIgdmlldy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRhdGVzU2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50dmlldyA9IHtzdGFydDogbW9tZW50KGRhdGEuc3RhcnQpLmZvcm1hdChcIllZWVktTU0tRERcIiksIGVuZDogbW9tZW50KGRhdGEuZW5kKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRhdGVDbGljaygkaW5mbykge1xuICAgICAgICBjb25zdCBkYXRlSW5mbyA9IGdldFVUQ0RhdGVUaW1lKCRpbmZvLmRhdGUpLnZhbHVlT2YoKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdkYXRlY2xpY2snLCB7JGRhdGVJbmZvOiBkYXRlSW5mb30pO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgY2FsZW5kYXIgaGVhZGVyIG9wdGlvbnMgb25jZSB0aGUgY29udHJvbHMgY2hhbmdlc1xuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJIZWFkZXJPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMuY29udHJvbHMsIHZpZXdUeXBlID0gdGhpcy5jYWxlbmRhcnR5cGUsXG4gICAgICAgICAgICByZWdFeCA9IG5ldyBSZWdFeHAoJ1xcXFxiZGF5XFxcXGInLCAnZycpO1xuICAgICAgICBsZXQgbGVmdCA9ICcnLCByaWdodCA9ICcnO1xuICAgICAgICBpZiAoY3RybHMgJiYgdmlld1R5cGUpIHtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGN0cmxzLCAnbmF2aWdhdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgbGVmdCArPSAnIHByZXYgbmV4dCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGN0cmxzLCAndG9kYXknKSkge1xuICAgICAgICAgICAgICAgIGxlZnQgKz0gJyB0b2RheSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGN0cmxzLCAneWVhcicpKSB7XG4gICAgICAgICAgICAgICAgcmlnaHQgKz0gKHZpZXdUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJ2xpc3RZZWFyJyA6ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhjdHJscywgJ21vbnRoJykpIHtcbiAgICAgICAgICAgICAgICByaWdodCArPSAodmlld1R5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkgPyAnIGxpc3RNb250aCcgOiAnIGRheUdyaWRNb250aCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGN0cmxzLCAnd2VlaycpKSB7XG4gICAgICAgICAgICAgICAgcmlnaHQgKz0gKHZpZXdUeXBlID09PSBWSUVXX1RZUEVTLkJBU0lDKSA/ICAnIGRheUdyaWRXZWVrJyA6ICh2aWV3VHlwZSA9PT0gVklFV19UWVBFUy5MSVNUKSA/ICcgbGlzdFdlZWsnIDogJyB0aW1lR3JpZFdlZWsnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVnRXgudGVzdChjdHJscykpIHtcbiAgICAgICAgICAgICAgICByaWdodCArPSAodmlld1R5cGUgPT09IFZJRVdfVFlQRVMuQkFTSUMpID8gICcgZGF5R3JpZERheScgOiAodmlld1R5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkgPyAnIGxpc3REYXknIDogJyB0aW1lR3JpZERheSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVmdC5jaGFyQXQoMCkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0LnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyaWdodC5jaGFyQXQoMCkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5leHRlbmQodGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuaGVhZGVyVG9vbGJhciwgeydzdGFydCc6IGxlZnQsICdlbmQnOiByaWdodH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcblxuICAgICAgICB0aGlzLmV2ZW50U291cmNlcy5wdXNoKHRoaXMuZGF0YVNldEV2ZW50cyk7XG4gICAgICAgIGNvbnN0IEZ1bGxDYWxlbmRhciA9IHdpbmRvd1snRnVsbENhbGVuZGFyJ107XG4gICAgICAgIGlmICghRnVsbENhbGVuZGFyLl9fd21fbG9jYWxlX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpMThuU2VydmljZS5pbml0Q2FsZW5kYXJMb2NhbGUoKTtcbiAgICAgICAgICAgIEZ1bGxDYWxlbmRhci5fX3dtX2xvY2FsZV9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSLCBbJ2hlaWdodCddKTtcbiAgICAgICAgdGhpcy5zZXRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92Pykge1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2hlaWdodCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLmhlaWdodCA9IHRoaXMuY2FsY3VsYXRlSGVpZ2h0KG52KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJPcHRpb25zKCdvcHRpb24nLCAnaGVpZ2h0JywgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0aW9ubW9kZSc6XG4gICAgICAgICAgICAgICAgaWYgKG52ICE9PSBTRUxFQ1RJT05fTU9ERVMuTk9ORSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5zZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ29wdGlvbicsICdzZWxlY3RhYmxlJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudiA9PT0gU0VMRUNUSU9OX01PREVTLlNJTkdMRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuc2VsZWN0Q29uc3RyYWludCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6ICcwMDowMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGltZTogJzI0OjAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJPcHRpb25zKCdvcHRpb24nLCAnc2VsZWN0Q29uc3RyYWludCcsIHRoaXMuY2FsZW5kYXJPcHRpb25zLmNhbGVuZGFyLnNlbGVjdENvbnN0cmFpbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ29wdGlvbicsICdzZWxlY3RDb25zdHJhaW50Jywge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyT3B0aW9ucygnb3B0aW9uJywgJ3NlbGVjdGFibGUnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlldyc6XG4gICAgICAgICAgICAgICAgaWYgKG52ICE9PSAnbW9udGgnIHx8IHRoaXMuY2FsZW5kYXJ0eXBlID09PSBWSUVXX1RZUEVTLkxJU1QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuZGVmYXVsdFZpZXcgPSB0aGlzLmNhbGVuZGFydHlwZSArIF8uY2FwaXRhbGl6ZShudik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuZGVmYXVsdFZpZXcgPSBudjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ2NoYW5nZVZpZXcnLCB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5kZWZhdWx0Vmlldyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjYWxlbmRhcnR5cGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJ0eXBlID0gbnYgfHwgJ2RheUdyaWQnO1xuICAgICAgICAgICAgY2FzZSAnY29udHJvbHMnOlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJIZWFkZXJPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICBkYXRhU2V0ID0gY3JlYXRlQXJyYXlGcm9tKGdldENsb25lZE9iamVjdChudikpO1xuICAgICAgICAgICAgICAgIGRhdGFTZXQgPSB0aGlzLmNvbnN0cnVjdENhbGVuZGFyRGF0YXNldChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXRFdmVudHMuZXZlbnRzID0gZGF0YVNldC5maWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0ID0gZXZlbnQuc3RhcnQgfHwgZXZlbnQuZW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckV2ZW50RGF0YVNldCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyPy5jaGFuZ2VWaWV3KHRoaXMuZ2V0Vmlld1R5cGUodGhpcy52aWV3ID8gdGhpcy52aWV3IDogJ2RheUdyaWRNb250aCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgaGVpZ2h0IGZvciB0aGUgZXZlbnQgbGltaXQgYW5kIHBhcnNpbmcgdGhlIHZhbHVlIHdoZW4gaXQgaXMgcGVyY2VudGFnZSBiYXNlZC5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUhlaWdodChoZWlnaHQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCAkcGFyZW50ID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLnBhcmVudCgpLFxuICAgICAgICAgICAgZWxIZWlnaHQgPSBoZWlnaHQgfHwgJzY1MHB4JztcblxuICAgICAgICBsZXQgcGFyZW50SGVpZ2h0ID0gJHBhcmVudC5jc3MoJ2hlaWdodCcpLFxuICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHQ6IG51bWJlcjtcblxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhlbEhlaWdodCwgJyUnKSkge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMocGFyZW50SGVpZ2h0LCAnJScpKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50SGVpZ2h0ID0gJHBhcmVudC5oZWlnaHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXB1dGVkSGVpZ2h0ID0gKHBhcnNlSW50KHBhcmVudEhlaWdodCwgMTApICogTnVtYmVyKGVsSGVpZ2h0LnJlcGxhY2UoL1xcJS9nLCAnJykpKSAvIDEwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXB1dGVkSGVpZ2h0ID0gcGFyc2VJbnQoZWxIZWlnaHQsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci52aWV3cy5tb250aC5ldmVudExpbWl0ID0gcGFyc2VJbnQoJycgKyBjb21wdXRlZEhlaWdodCAvIDIwMCwgMTApICsgMTtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRWwgPSB0aGlzLl9jYWxlbmRhci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBGdWxsQ2FsZW5kYXIgPSB3aW5kb3dbJ0Z1bGxDYWxlbmRhciddO1xuICAgICAgICBjb25zdCBjYWxlbmRhciA9IG5ldyBGdWxsQ2FsZW5kYXIuQ2FsZW5kYXIoY2FsZW5kYXJFbCwgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIpO1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIgPSAgY2FsZW5kYXI7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVuZGVyJywgeyckZXZlbnQnIDoge319KTtcbiAgICAgICAgY2FsZW5kYXIucmVuZGVyKCk7XG4gICAgICAgXG4gICAgICAgIC8vIGlmIHRoZSBjaGFuZ2VzIGFyZSBhbHJlYWR5IHN0YWNrZWQgYmVmb3JlIGNhbGVuZGFyIHJlbmRlcnMgdGhlbiBleGVjdXRlIHRoZW0gd2hlbiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlc1N0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VzU3RhY2suZm9yRWFjaCgoY2hhbmdlT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUNhbGVuZGFyT3B0aW9ucyhjaGFuZ2VPYmoub3BlcmF0aW9uVHlwZSwgY2hhbmdlT2JqLmFyZ3VtZW50S2V5LCBjaGFuZ2VPYmouYXJndW1lbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1N0YWNrLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvL1dNUy0yMjQxMiA6IGNoYW5nZSBjYWxlbmRlcidzIHZpZXcgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGZyb20gc3R1ZGlvXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmNoYW5nZVZpZXcodGhpcy5nZXRWaWV3VHlwZSh0aGlzLnZpZXcgPyB0aGlzLnZpZXcgOiAnZGF5R3JpZE1vbnRoJykpO1xuICAgICAgICB9LDUwKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3RzIHRoZSBjYWxlbmRhciBkYXRhc2V0IGJ5IG1hcHBpbmcgdGhlIGV2ZW50c3RhcnQsIGV2ZW50ZW5kLCBldmVudHRpdGxlIGV0Yy4sXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RDYWxlbmRhckRhdGFzZXQoZXZlbnRTb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmV2ZW50dGl0bGUgfHwgJ3RpdGxlJyxcbiAgICAgICAgICAgIGFsbERheTogdGhpcy5ldmVudGFsbGRheSB8fCAnYWxsZGF5JyxcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmV2ZW50c3RhcnQgfHwgJ3N0YXJ0JyxcbiAgICAgICAgICAgIGVuZDogdGhpcy5ldmVudGVuZCB8fCAnZW5kJyxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5ldmVudGNsYXNzIHx8ICdjbGFzc05hbWUnXG4gICAgICAgIH07XG5cbiAgICAgICAgZXZlbnRTb3VyY2UuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgICAgICBvYmouX2V2ZW50TWV0YWRhdGEgPSBfLmNsb25lKG9iaik7XG4gICAgICAgICAgICBfLm1hcEtleXMocHJvcGVydGllcywgICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG9ialZhbDtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAndGl0bGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialZhbCA9IGdldEV2YWx1YXRlZERhdGEob2JqLCB7ZXhwcmVzc2lvbjogdmFsdWV9LCB0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYWxsRGF5Jykge1xuICAgICAgICAgICAgICAgICAgICBvYmpWYWwgPSAhIV8uZ2V0KG9iaiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialZhbCA9IF8uZ2V0KG9iaiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9ialZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ialtrZXldID0gb2JqVmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXZlbnRTb3VyY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2NhbGUoKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBfLmdldCh0aGlzLmFwcExvY2FsZSwgJ0xBQkVMX0NBTEVOREFSX1lFQVInKSB8fCBCVVRUT05fVEVYVC5ZRUFSO1xuICAgICAgICBjb25zdCBtb250aCA9IF8uZ2V0KHRoaXMuYXBwTG9jYWxlLCAnTEFCRUxfQ0FMRU5EQVJfTU9OVEgnKSB8fCBCVVRUT05fVEVYVC5NT05USDtcbiAgICAgICAgY29uc3Qgd2VlayA9IF8uZ2V0KHRoaXMuYXBwTG9jYWxlLCAnTEFCRUxfQ0FMRU5EQVJfV0VFSycpIHx8IEJVVFRPTl9URVhULldFRUs7XG4gICAgICAgIGNvbnN0IGRheSA9IF8uZ2V0KHRoaXMuYXBwTG9jYWxlLCAnTEFCRUxfQ0FMRU5EQVJfREFZJykgfHwgQlVUVE9OX1RFWFQuREFZO1xuICAgICAgICBjb25zdCB0b2RheSA9IF8uZ2V0KHRoaXMuYXBwTG9jYWxlLCAnTEFCRUxfQ0FMRU5EQVJfVE9EQVknKSB8fCBCVVRUT05fVEVYVC5UT0RBWTtcbiAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuYnV0dG9uVGV4dCAgICA9IHsgeWVhciwgbW9udGgsIHdlZWssIGRheSwgdG9kYXksXG4gICAgICAgICAgICAnbGlzdFllYXInOiB5ZWFyLFxuICAgICAgICAgICAgJ2xpc3RNb250aCc6IG1vbnRoLFxuICAgICAgICAgICAgJ2xpc3RXZWVrJzogd2VlayxcbiAgICAgICAgICAgICdsaXN0RGF5JzogZGF5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2FsZW5kYXIgb3B0aW9ucyB3aXRoIHRoZSBuZXdTZXQgb2Ygb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgb3ZlcnJpZGVEZWZhdWx0cyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRpb25zKS5tYXAob3B0aW9uID0+IHRoaXMuJGZ1bGxDYWxlbmRhci5zZXRPcHRpb24ob3B0aW9uWzBdLCBvcHRpb25bMV0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjYWxlbmRhciByZW5kZXJzLCB0aGUgY2hhbmdlcyBhcmUgcHVzaGVkIGludG8gY2hhbmdlc1N0YWNrIGFuZCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBjYWxlbmRhciBnZXRzIHJlbmRlcmVkXG4gICAgICogaWYgdGhlIGNhbGVuZGFyIGlzIGFscmVhZHkgcmVuZGVyZWQsIHRoZW4gdGhlIHNwZWNpZmljIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIG9wZXJhdGlvbiB0eXBlXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblR5cGVcbiAgICAgKiBAcGFyYW0gYXJndW1lbnRLZXlcbiAgICAgKiBAcGFyYW0gYXJndW1lbnRWYWx1ZVxuICAgICAqL1xuICAgIHVwZGF0ZUNhbGVuZGFyT3B0aW9ucyhvcGVyYXRpb25UeXBlOiBzdHJpbmcsIGFyZ3VtZW50S2V5PzogYW55LCBhcmd1bWVudFZhbHVlPzogYW55KTogdm9pZCB7Ly9cbiAgICAgICAgaWYgKCF0aGlzLiRmdWxsQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1N0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6IG9wZXJhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgYXJndW1lbnRLZXk6IGFyZ3VtZW50S2V5LFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VmFsdWU6IGFyZ3VtZW50VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwbHlDYWxlbmRhck9wdGlvbnMob3BlcmF0aW9uVHlwZSwgYXJndW1lbnRLZXksIGFyZ3VtZW50VmFsdWUpO1xuICAgIH1cblxuICAgIHJlZHJhdygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhck9wdGlvbnMoJ3JlbmRlcicpO1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXI/LmNoYW5nZVZpZXcodGhpcy5nZXRWaWV3VHlwZSh0aGlzLnZpZXcgPyB0aGlzLnZpZXcgOiAnZGF5R3JpZE1vbnRoJykpO1xuICAgIH1cblxuICAgIC8vIG9uIGRhdGUgY2hhbmdlIGludm9rZSB0aGUgc2VsZWN0IGV2ZW50LCBhbmQgaWYgZGF0ZSBoYXMgZXZlbnQgb24gaXQgdGhlbiBpbnZva2UgdGhlIGV2ZW50IGNsaWNrLlxuICAgIHByaXZhdGUgb25WYWx1ZUNoYW5nZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlICAgICAgICA9IHRoaXMucHJveHlNb2RlbCAmJiBtb21lbnQodGhpcy5wcm94eU1vZGVsKS5zdGFydE9mKCdkYXknKS5mb3JtYXQoZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICBzZWxlY3RlZEV2ZW50RGF0YSAgID0gdGhpcy5ldmVudERhdGFbc2VsZWN0ZWREYXRlXSxcbiAgICAgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICAgPSBtb21lbnQodGhpcy5wcm94eU1vZGVsKSxcbiAgICAgICAgICAgIGVuZCAgICAgICAgICAgICAgICAgPSBtb21lbnQodGhpcy5wcm94eU1vZGVsKS5lbmRPZignZGF5Jyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRkYXRhID0gc2VsZWN0ZWRFdmVudERhdGE7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRkYXRlcyA9IHtcbiAgICAgICAgICAgICdzdGFydCc6IG1vbWVudChzZWxlY3RlZERhdGUpLnZhbHVlT2YoKSxcbiAgICAgICAgICAgICdlbmQnICA6IG1vbWVudChzZWxlY3RlZERhdGUpLmVuZE9mKCdkYXknKS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYWxlbmRhck9wdGlvbnMuY2FsZW5kYXIuc2VsZWN0KHN0YXJ0LnZhbHVlT2YoKSwgZW5kLnZhbHVlT2YoKSwge30sIHRoaXMsIHNlbGVjdGVkRXZlbnREYXRhKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRXZlbnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucy5jYWxlbmRhci5ldmVudENsaWNrKHNlbGVjdGVkRXZlbnREYXRhLCB7fSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSBhbiBvYmplY3QgY29udGFpbmluZyBzb3VyY2Ugb2YgY2FsZW5kYXIsIGFwaWtleSBhbmQgY2FsZW5kYXJJZCBhbmQgd2lsbCBpbnRlZ3JhdGUgdGhlIHJlc3BlY3RpdmUgY2FsZW5kYXIgd2l0aCBmdWxsY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGV2ZW50T2JqZWN0XG4gICAgICovXG4gICAgcHVibGljIGFkZEV2ZW50U291cmNlKGV2ZW50T2JqZWN0KSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FkZEV2ZW50U291cmNlIG1ldGhvZCByZXF1aXJlcyBhbiBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50T2JqZWN0LnNvdXJjZSA9PT0gJ2dvb2dsZScpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnRPYmplY3QuZ29vZ2xlQ2FsZW5kYXJBcGlLZXkgfHwgIWV2ZW50T2JqZWN0Lmdvb2dsZUNhbGVuZGFySWQgKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3IgZ29vZ2xlIGNhbGVuZGFyIGludGVncmF0aW9uLCBcXCdnb29nbGVDYWxlbmRhckFwaUtleVxcJyBhbmQgXFwnZ29vZ2xlQ2FsZW5kYXJJZFxcJyBzaG91bGQgYmUgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXIgb2JqZWN0LicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5zZXRPcHRpb24oJ2dvb2dsZUNhbGVuZGFyQXBpS2V5JywgZXZlbnRPYmplY3QuZ29vZ2xlQ2FsZW5kYXJBcGlLZXkpO1xuICAgICAgICAgICAgdGhpcy4kZnVsbENhbGVuZGFyLmFkZEV2ZW50U291cmNlKHtcbiAgICAgICAgICAgICAgICBnb29nbGVDYWxlbmRhcklkOiBldmVudE9iamVjdC5nb29nbGVDYWxlbmRhcklkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgdmlld1R5cGVLZXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxlbmRhclR5cGUgYW5kIHZpZXdUeXBlIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIHZpZXdLZXlcbiAgICAgKi9cbiAgICBnZXRWaWV3VHlwZSh2aWV3S2V5KSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyVHlwZSA9IHRoaXMuY2FsZW5kYXJ0eXBlO1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3O1xuICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgIGlmICh2aWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJ2xpc3RNb250aCcgOiAnZGF5R3JpZE1vbnRoJztcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3ID09PSAnd2VlaycpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChjYWxlbmRhclR5cGUgPT09IFZJRVdfVFlQRVMuQkFTSUMpID8gICdkYXlHcmlkV2VlaycgOiAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJ2xpc3RXZWVrJyA6ICd0aW1lR3JpZFdlZWsnO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXcgPT09ICdkYXknKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkJBU0lDKSA/ICAnZGF5R3JpZERheScgOiAoY2FsZW5kYXJUeXBlID09PSBWSUVXX1RZUEVTLkxJU1QpID8gJ2xpc3REYXknIDogJ3RpbWVHcmlkRGF5JztcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChjYWxlbmRhclR5cGUgPT09IFZJRVdfVFlQRVMuTElTVCkgPyAnbGlzdFllYXInIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB2aWV3S2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblR5cGVcbiAgICAgKiBAcGFyYW0gYXJndW1lbnRLZXlcbiAgICAgKiBAcGFyYW0gYXJndW1lbnRWYWx1ZVxuICAgICAqIEhhbmRsZSB2YXJpb3VzIG9wZXJhdGlvbnMgbGlrZSBSZW5kZXJpbmcgQ2FsZW5kYXIsIGNoYW5naW5nIHRoZSBjYWxlbmRhciB2aWV3VHlwZSwgc2V0dGluZyB0aGUgY2FsZW5kYXJPcHRpb25zIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW9uVHlwZS5cbiAgICAgKi9cbiAgICBhcHBseUNhbGVuZGFyT3B0aW9ucyhvcGVyYXRpb25UeXBlOiBzdHJpbmcsIGFyZ3VtZW50S2V5PzogYW55LCBhcmd1bWVudFZhbHVlPzogYW55KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncmVuZGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5zZXRPcHRpb24oYXJndW1lbnRLZXksIGFyZ3VtZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hhbmdlVmlldyc6XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld1R5cGUoYXJndW1lbnRLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGZ1bGxDYWxlbmRhci5jaGFuZ2VWaWV3KHZpZXcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgbmV3IGV2ZW50c0RhdGFTZXQgdG8gdGhlIGNhbGVuZGFyIG9iamVjdCB3aXRoIGFkZEV2ZW50IE1ldGhvZCBhbmQgcmUtcmVuZGVycyB0aGUgY2FsZW5kYXJcbiAgICAgKi9cbiAgICByZW5kZXJFdmVudERhdGFTZXQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLiRmdWxsQ2FsZW5kYXIuYmF0Y2hSZW5kZXJpbmcoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudHMgPSBzZWxmLiRmdWxsQ2FsZW5kYXIuZ2V0RXZlbnRzKCk7XG4gICAgICAgICAgICBfLmVhY2goIGV2ZW50cywgZnVuY3Rpb24oIGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhID0gc2VsZi4kZnVsbENhbGVuZGFyLmdldEV2ZW50QnlJZChldmVudC5pZCk7XG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfLmVhY2goIHNlbGYuZGF0YVNldEV2ZW50cy5ldmVudHMsIGZ1bmN0aW9uKCBldmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGYuJGZ1bGxDYWxlbmRhci5hZGRFdmVudChldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -126,16 +126,11 @@ class CalendarComponent extends StylableComponent {
126
126
  i18nService.initCalendarLocale();
127
127
  FullCalendar.__wm_locale_initialized = true;
128
128
  }
129
- this.cancelLocaleChangeSubscription = this.getAppInstance().subscribe("locale-changed", (libLocale) => {
130
- this.setLocale();
131
- this.applyCalendarOptions('option', 'locale', libLocale.fullCalendar || 'en');
132
- this.redraw();
133
- });
134
129
  }
135
130
  // this function selects the default date given for the calendar
136
131
  selectDate() {
137
132
  let start, end;
138
- // checks if datavalue is an object and not a Date object
133
+ // checks if datavalue is an object and not a Date object
139
134
  if (_.isObject(this.datavalue) && !_.isDate(this.datavalue)) {
140
135
  start = moment(this.datavalue.start);
141
136
  end = moment(this.datavalue.end);
@@ -607,11 +602,6 @@ class CalendarComponent extends StylableComponent {
607
602
  });
608
603
  });
609
604
  }
610
- ngOnDestroy() {
611
- if (this.cancelLocaleChangeSubscription) {
612
- this.cancelLocaleChangeSubscription();
613
- }
614
- }
615
605
  }
616
606
  CalendarComponent.initializeProps = registerProps();
617
607
  CalendarComponent.decorators = [