@gipisistemas/ng-core 1.1.10 → 1.1.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. package/assets/styles/colors.scss +228 -211
  2. package/assets/styles/styles.scss +50 -5
  3. package/bundles/gipisistemas-ng-core.umd.js +3497 -146
  4. package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
  5. package/bundles/gipisistemas-ng-core.umd.min.js +9 -9
  6. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
  7. package/core/gipi-components/components/abstract-crud.component.d.ts +2 -2
  8. package/core/gipi-components/components/abstract-find.component.d.ts +5 -4
  9. package/core/gipi-components/components/abstract.component.d.ts +1 -0
  10. package/esm2015/core/components/abstract-find.component.js +4 -1
  11. package/esm2015/core/gipi-components/components/abstract-crud.component.js +5 -5
  12. package/esm2015/core/gipi-components/components/abstract-find.component.js +45 -21
  13. package/esm2015/core/gipi-components/components/abstract.component.js +5 -2
  14. package/esm2015/gipi-components.js +19 -6
  15. package/esm2015/gipisistemas-ng-core.js +3 -1
  16. package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  17. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +3 -3
  18. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +1 -1
  19. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +1 -1
  20. package/esm2015/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.js +158 -0
  21. package/esm2015/shared/gipi-components/datetime-picker/datetime-picker.module.js +82 -0
  22. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.js +116 -0
  23. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.js +676 -0
  24. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.js +306 -0
  25. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.js +30 -0
  26. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.js +7 -0
  27. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.js +7 -0
  28. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.js +346 -0
  29. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.js +83 -0
  30. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.js +1 -0
  31. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.js +451 -0
  32. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.js +151 -0
  33. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.js +230 -0
  34. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.js +43 -0
  35. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.js +139 -0
  36. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.js +3 -0
  37. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.js +138 -0
  38. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.js +20 -0
  39. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.js +141 -0
  40. package/esm2015/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +1 -1
  41. package/esm2015/shared/gipi-components/form-field/form-field.component.js +1 -1
  42. package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  43. package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  44. package/esm2015/shared/gipi-components/input-select/input-select.component.js +1 -1
  45. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
  46. package/esm2015/shared/gipi-components/radio-group/radio-group.component.js +1 -1
  47. package/esm2015/shared/gipi-components/range-page/range-page.component.js +1 -1
  48. package/esm2015/shared/gipi-components/range-slider/range-slider.component.js +1 -1
  49. package/esm2015/shared/gipi-components/select-button/select-button.component.js +1 -1
  50. package/esm2015/shared/gipi-components/textarea/textarea.component.js +1 -1
  51. package/esm2015/shared/shared.module.js +51 -3
  52. package/esm5/core/components/abstract-find.component.js +4 -1
  53. package/esm5/core/gipi-components/components/abstract-crud.component.js +5 -5
  54. package/esm5/core/gipi-components/components/abstract-find.component.js +45 -21
  55. package/esm5/core/gipi-components/components/abstract.component.js +5 -2
  56. package/esm5/gipi-components.js +19 -6
  57. package/esm5/gipisistemas-ng-core.js +3 -1
  58. package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  59. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +3 -3
  60. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +1 -1
  61. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +1 -1
  62. package/esm5/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.js +176 -0
  63. package/esm5/shared/gipi-components/datetime-picker/datetime-picker.module.js +85 -0
  64. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.js +119 -0
  65. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.js +747 -0
  66. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.js +332 -0
  67. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.js +30 -0
  68. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.js +7 -0
  69. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.js +7 -0
  70. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.js +377 -0
  71. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.js +89 -0
  72. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.js +1 -0
  73. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.js +495 -0
  74. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.js +160 -0
  75. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.js +248 -0
  76. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.js +49 -0
  77. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.js +145 -0
  78. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.js +3 -0
  79. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.js +141 -0
  80. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.js +20 -0
  81. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.js +151 -0
  82. package/esm5/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +1 -1
  83. package/esm5/shared/gipi-components/form-field/form-field.component.js +1 -1
  84. package/esm5/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  85. package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  86. package/esm5/shared/gipi-components/input-select/input-select.component.js +1 -1
  87. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
  88. package/esm5/shared/gipi-components/radio-group/radio-group.component.js +1 -1
  89. package/esm5/shared/gipi-components/range-page/range-page.component.js +1 -1
  90. package/esm5/shared/gipi-components/range-slider/range-slider.component.js +1 -1
  91. package/esm5/shared/gipi-components/select-button/select-button.component.js +1 -1
  92. package/esm5/shared/gipi-components/textarea/textarea.component.js +1 -1
  93. package/esm5/shared/shared.module.js +51 -3
  94. package/fesm2015/gipisistemas-ng-core.js +3264 -191
  95. package/fesm2015/gipisistemas-ng-core.js.map +1 -1
  96. package/fesm5/gipisistemas-ng-core.js +3475 -152
  97. package/fesm5/gipisistemas-ng-core.js.map +1 -1
  98. package/gipi-components.d.ts +16 -0
  99. package/gipisistemas-ng-core.d.ts +2 -0
  100. package/gipisistemas-ng-core.metadata.json +1 -1
  101. package/package.json +4 -4
  102. package/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.d.ts +40 -0
  103. package/shared/gipi-components/datetime-picker/datetime-picker.module.d.ts +2 -0
  104. package/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.d.ts +50 -0
  105. package/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.d.ts +140 -0
  106. package/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.d.ts +66 -0
  107. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.d.ts +8 -0
  108. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.d.ts +2 -0
  109. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.d.ts +5 -0
  110. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.d.ts +98 -0
  111. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.d.ts +20 -0
  112. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.d.ts +1 -0
  113. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.d.ts +133 -0
  114. package/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.d.ts +53 -0
  115. package/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.d.ts +80 -0
  116. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.d.ts +4 -0
  117. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.d.ts +46 -0
  118. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.d.ts +20 -0
  119. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.d.ts +36 -0
  120. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.d.ts +2 -0
  121. package/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.d.ts +52 -0
@@ -39,13 +39,13 @@ var GIPIAbstractCrudComponent = /** @class */ (function (_super) {
39
39
  GIPIAbstractCrudComponent.prototype.ngOnDestroy = function () {
40
40
  _super.prototype.ngOnDestroy.call(this);
41
41
  };
42
- GIPIAbstractCrudComponent.prototype.onInitForm = function () {
42
+ GIPIAbstractCrudComponent.prototype.onInitForm = function (version) {
43
43
  var _this = this;
44
44
  try {
45
45
  this.loading = true;
46
46
  var id = this.activatedRoute.snapshot.params.id;
47
47
  if (this.UUIDIsValid(id)) {
48
- this.abstractCrudService.getOne(id).toPromise().then(function (entity) {
48
+ this.abstractCrudService.getOne(id, version).toPromise().then(function (entity) {
49
49
  _this.entity = entity;
50
50
  _this.onAfterGetOne();
51
51
  _this.loading = false;
@@ -66,7 +66,7 @@ var GIPIAbstractCrudComponent = /** @class */ (function (_super) {
66
66
  };
67
67
  GIPIAbstractCrudComponent.prototype.onAfterGetOne = function () { };
68
68
  GIPIAbstractCrudComponent.prototype.preSave = function (entity) { };
69
- GIPIAbstractCrudComponent.prototype.save = function (entity, toGoBack) {
69
+ GIPIAbstractCrudComponent.prototype.save = function (entity, toGoBack, version) {
70
70
  var _this = this;
71
71
  if (toGoBack === void 0) { toGoBack = true; }
72
72
  try {
@@ -76,7 +76,7 @@ var GIPIAbstractCrudComponent = /** @class */ (function (_super) {
76
76
  }
77
77
  if (this.isValid(entity)) {
78
78
  this.preSave(entity);
79
- this.abstractCrudService.save(entity).toPromise().then(function (resp) {
79
+ this.abstractCrudService.save(entity, version).toPromise().then(function (resp) {
80
80
  _this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);
81
81
  if (toGoBack) {
82
82
  _this.navigateByUrl(_this.getPath(), [_this.getPath()], true);
@@ -119,4 +119,4 @@ var GIPIAbstractCrudComponent = /** @class */ (function (_super) {
119
119
  return GIPIAbstractCrudComponent;
120
120
  }(GIPIAbstractComponent));
121
121
  export { GIPIAbstractCrudComponent };
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJjb3JlL2dpcGktY29tcG9uZW50cy9jb21wb25lbnRzL2Fic3RyYWN0LWNydWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RDtJQUEyRiw2Q0FBcUI7SUFVNUcsbUNBQ2MsbUJBQTBELEVBQzFELFdBQTRCLEVBQzVCLGNBQThCO1FBSDVDLFlBS0ksa0JBQU0sV0FBVyxFQUFFLGNBQWMsQ0FBQyxTQUNyQztRQUxhLHlCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUM7UUFDMUQsaUJBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLG9CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVhwQyxhQUFPLEdBQVksS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOztJQWM1QyxDQUFDO0lBYkQsc0JBQVcsNkNBQU07YUFHakI7WUFDSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQzthQUxELFVBQWtCLEtBQWM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFD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QUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU0sMENBQU0sR0FBYixVQUFjLGdCQUFnQztRQUE5QyxpQkFVQztRQVZhLGlDQUFBLEVBQUEsdUJBQWdDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksZ0JBQWdCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxhQUFhO2dCQUNwQixPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ3ZELE1BQU0sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBMUQsQ0FBMEQ7YUFDM0UsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDOUQ7SUFDTCxDQUFDOztnQkExRmtDLHVCQUF1QjtnQkFDL0IsZUFBZTtnQkFDWixjQUFjOztJQWIxQix5QkFBeUI7UUFEOUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO3lDQVlXLHVCQUF1QjtZQUMvQixlQUFlO1lBQ1osY0FBYztPQWIxQix5QkFBeUIsQ0F1RzlDO0lBQUQsZ0NBQUM7Q0FBQSxBQXZHRCxDQUEyRixxQkFBcUIsR0F1Ry9HO1NBdkdxQix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElOSkVDVE9SIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NoYXJlZC5tb2R1bGUnO1xuaW1wb3J0IHsgQVBQX01FU1NBR0VTIH0gZnJvbSAnLi4vLi4vYXBwLm1lc3NhZ2VzJztcbmltcG9ydCB7IE9iamVjdFV0aWwgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QudXRpbCc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hYnN0cmFjdC5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RDcnVkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LWNydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHSVBJQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR0lQSVV1aWQgfSBmcm9tICcuLi90eXBlcy91dWlkLnR5cGUnO1xuaW1wb3J0IHsgR0lQSUFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hYnN0cmFjdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR0lQSUFic3RyYWN0Q3J1ZENvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgR0lQSUFic3RyYWN0TW9kZWw+IGV4dGVuZHMgR0lQSUFic3RyYWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBfZW50aXR5OiBURW50aXR5ID0gdGhpcy5uZXdFbnRpdHkoKTtcbiAgICBwdWJsaWMgc2V0IGVudGl0eSh2YWx1ZTogVEVudGl0eSkge1xuICAgICAgICB0aGlzLl9lbnRpdHkgPSB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBlbnRpdHkoKTogVEVudGl0eSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRpdHk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdENydWRTZXJ2aWNlOiBHSVBJQWJzdHJhY3RDcnVkU2VydmljZTxURW50aXR5LCBhbnk+LFxuICAgICAgICBwcm90ZWN0ZWQgYmFzZVNlcnZpY2U6IEdJUElCYXNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYmFzZVNlcnZpY2UsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jhc2VQZXJtaXNzaW9uTGlzdCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Jbml0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpZDogR0lQSVV1aWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuVVVJRElzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmdldE9uZTxURW50aXR5PihpZCkudG9Qcm9taXNlKCkudGhlbihlbnRpdHkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFmdGVyR2V0T25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHkgPSB0aGlzLm5ld0VudGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25BZnRlckdldE9uZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IG5ld0VudGl0eSgpOiBURW50aXR5O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGlzVmFsaWQoZW50aXR5OiBURW50aXR5KTogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBvbkFmdGVyR2V0T25lKCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgcHJlU2F2ZShlbnRpdHk6IFRFbnRpdHkpOiB2b2lkIHsgfVxuXG4gICAgcHVibGljIHNhdmUoZW50aXR5PzogVEVudGl0eSwgdG9Hb0JhY2s6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGVudGl0eSkpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZW50aXR5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlU2F2ZShlbnRpdHkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLnNhdmUoZW50aXR5KS50b1Byb21pc2UoKS50aGVuKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9Hb0JhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdvQmFjayhzaG93Q29uZmlybWF0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaWV3aW5nKCkgfHwgc2hvd0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5iYXNlU2VydmljZS5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybWHDp8OjbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuUkVUVVJOX0NPTkZJUk1BVElPTixcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpXSwgdHJ1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCldLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJjb3JlL2dpcGktY29tcG9uZW50cy9jb21wb25lbnRzL2Fic3RyYWN0LWNydWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RDtJQUEyRiw2Q0FBcUI7SUFVNUcsbUNBQ2MsbUJBQTBELEVBQzFELFdBQTRCLEVBQzVCLGNBQThCO1FBSDVDLFlBS0ksa0JBQU0sV0FBVyxFQUFFLGNBQWMsQ0FBQyxTQUNyQztRQUxhLHlCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUM7UUFDMUQsaUJBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLG9CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVhwQyxhQUFPLEdBQVksS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOztJQWM1QyxDQUFDO0lBYkQsc0JBQVcsNkNBQU07YUFHakI7WUFDSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQzthQUxELFVBQWtCLEtBQWM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFD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bXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU5KRUNUT1IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBBUFBfTUVTU0FHRVMgfSBmcm9tICcuLi8uLi9hcHAubWVzc2FnZXMnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdC51dGlsJztcbmltcG9ydCB7IEdJUElBYnN0cmFjdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2Fic3RyYWN0Lm1vZGVsJztcbmltcG9ydCB7IEdJUElBYnN0cmFjdENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdJUElCYXNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBHSVBJVXVpZCB9IGZyb20gJy4uL3R5cGVzL3V1aWQudHlwZSc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHSVBJQWJzdHJhY3RDcnVkQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBHSVBJQWJzdHJhY3RNb2RlbD4gZXh0ZW5kcyBHSVBJQWJzdHJhY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwcml2YXRlIF9lbnRpdHk6IFRFbnRpdHkgPSB0aGlzLm5ld0VudGl0eSgpO1xuICAgIHB1YmxpYyBzZXQgZW50aXR5KHZhbHVlOiBURW50aXR5KSB7XG4gICAgICAgIHRoaXMuX2VudGl0eSA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGVudGl0eSgpOiBURW50aXR5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0Q3J1ZFNlcnZpY2U6IEdJUElBYnN0cmFjdENydWRTZXJ2aWNlPFRFbnRpdHksIGFueT4sXG4gICAgICAgIHByb3RlY3RlZCBiYXNlU2VydmljZTogR0lQSUJhc2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICkge1xuICAgICAgICBzdXBlcihiYXNlU2VydmljZSwgYWN0aXZhdGVkUm91dGUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFzZVBlcm1pc3Npb25MaXN0IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkluaXRGb3JtKHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpZDogR0lQSVV1aWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuVVVJRElzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmdldE9uZTxURW50aXR5PihpZCwgdmVyc2lvbikudG9Qcm9taXNlKCkudGhlbihlbnRpdHkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFmdGVyR2V0T25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHkgPSB0aGlzLm5ld0VudGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25BZnRlckdldE9uZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IG5ld0VudGl0eSgpOiBURW50aXR5O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGlzVmFsaWQoZW50aXR5OiBURW50aXR5KTogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBvbkFmdGVyR2V0T25lKCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgcHJlU2F2ZShlbnRpdHk6IFRFbnRpdHkpOiB2b2lkIHsgfVxuXG4gICAgcHVibGljIHNhdmUoZW50aXR5PzogVEVudGl0eSwgdG9Hb0JhY2s6IGJvb2xlYW4gPSB0cnVlLCB2ZXJzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGVudGl0eSkpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZW50aXR5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlU2F2ZShlbnRpdHkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLnNhdmUoZW50aXR5LCB2ZXJzaW9uKS50b1Byb21pc2UoKS50aGVuKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9Hb0JhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdvQmFjayhzaG93Q29uZmlybWF0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWaWV3aW5nKCkgfHwgc2hvd0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5iYXNlU2VydmljZS5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybWHDp8OjbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuUkVUVVJOX0NPTkZJUk1BVElPTixcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpXSwgdHJ1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCldLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
@@ -121,6 +121,9 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
121
121
  }
122
122
  if (ObjectUtil.isNull(pageEvent) && !ObjectUtil.isNull(this.tablePageEventDTO)) {
123
123
  pageEvent = this.tablePageEventDTO;
124
+ if (ObjectUtil.hasPropertyInObj(pageEvent, 'pageIndex')) {
125
+ pageEvent.pageIndex = 0;
126
+ }
124
127
  }
125
128
  if (pageEvent) {
126
129
  this.tablePageEventDTO = pageEvent;
@@ -190,7 +193,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
190
193
  this.navigateByUrl(this.getPath(), [this.getPath(), 'edit', id], true);
191
194
  }
192
195
  };
193
- GIPIAbstractFindComponent.prototype.deleteRegister = function (id, permission, fetchAgain) {
196
+ GIPIAbstractFindComponent.prototype.deleteRegister = function (id, permission, fetchAgain, version) {
194
197
  if (fetchAgain === void 0) { fetchAgain = true; }
195
198
  try {
196
199
  id = this.handleEntityId(id);
@@ -198,7 +201,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
198
201
  return;
199
202
  }
200
203
  if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {
201
- this._deleteRegister(id, fetchAgain);
204
+ this._deleteRegister(id, fetchAgain, version);
202
205
  }
203
206
  else {
204
207
  if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {
@@ -208,7 +211,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
208
211
  this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);
209
212
  return;
210
213
  }
211
- this._deleteRegister(id, fetchAgain);
214
+ this._deleteRegister(id, fetchAgain, version);
212
215
  }
213
216
  }
214
217
  catch (e) {
@@ -220,7 +223,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
220
223
  }
221
224
  };
222
225
  /** @Internal */
223
- GIPIAbstractFindComponent.prototype._deleteRegister = function (id, fetchAgain) {
226
+ GIPIAbstractFindComponent.prototype._deleteRegister = function (id, fetchAgain, version) {
224
227
  var _this = this;
225
228
  if (fetchAgain === void 0) { fetchAgain = true; }
226
229
  try {
@@ -232,7 +235,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
232
235
  _this.loading = true;
233
236
  _this.page = _this.newPage();
234
237
  _this.preDelete(id);
235
- _this.abstractCrudService.delete(id).toPromise().then(function () {
238
+ _this.abstractCrudService.delete(id, version).toPromise().then(function () {
236
239
  if (fetchAgain) {
237
240
  _this.findAll();
238
241
  }
@@ -249,7 +252,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
249
252
  throw new Error(e);
250
253
  }
251
254
  };
252
- GIPIAbstractFindComponent.prototype.deleteAllRegister = function (idList, permission, fetchAgain) {
255
+ GIPIAbstractFindComponent.prototype.deleteAllRegister = function (idList, permission, fetchAgain, version) {
253
256
  if (fetchAgain === void 0) { fetchAgain = true; }
254
257
  try {
255
258
  idList = this.handleEntityIdList(idList);
@@ -257,7 +260,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
257
260
  return;
258
261
  }
259
262
  if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {
260
- this._deleteAllRegister(idList, fetchAgain);
263
+ this._deleteAllRegister(idList, fetchAgain, version);
261
264
  }
262
265
  else {
263
266
  if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {
@@ -267,7 +270,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
267
270
  this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);
268
271
  return;
269
272
  }
270
- this._deleteAllRegister(idList, fetchAgain);
273
+ this._deleteAllRegister(idList, fetchAgain, version);
271
274
  }
272
275
  }
273
276
  catch (e) {
@@ -279,7 +282,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
279
282
  }
280
283
  };
281
284
  /** @Internal */
282
- GIPIAbstractFindComponent.prototype._deleteAllRegister = function (idList, fetchAgain) {
285
+ GIPIAbstractFindComponent.prototype._deleteAllRegister = function (idList, fetchAgain, version) {
283
286
  var _this = this;
284
287
  if (fetchAgain === void 0) { fetchAgain = true; }
285
288
  try {
@@ -291,7 +294,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
291
294
  _this.loading = true;
292
295
  _this.page = _this.newPage();
293
296
  _this.preDelete();
294
- _this.abstractCrudService.deleteAll(idList).toPromise().then(function () {
297
+ _this.abstractCrudService.deleteAll(idList, version).toPromise().then(function () {
295
298
  if (fetchAgain) {
296
299
  _this.findAll();
297
300
  }
@@ -337,7 +340,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
337
340
  this.viewRegister(id, permission);
338
341
  }
339
342
  };
340
- GIPIAbstractFindComponent.prototype.enableOrDisableRegister = function (action, id, permission, fetchAgain) {
343
+ GIPIAbstractFindComponent.prototype.enableOrDisableRegister = function (action, id, permission, fetchAgain, version) {
341
344
  if (fetchAgain === void 0) { fetchAgain = true; }
342
345
  try {
343
346
  id = this.handleEntityId(id);
@@ -345,7 +348,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
345
348
  return;
346
349
  }
347
350
  if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {
348
- this._enableOrDisableRegister(action, id, fetchAgain);
351
+ this._enableOrDisableRegister(action, id, fetchAgain, version);
349
352
  }
350
353
  else {
351
354
  if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {
@@ -355,7 +358,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
355
358
  this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);
356
359
  return;
357
360
  }
358
- this._enableOrDisableRegister(action, id, fetchAgain);
361
+ this._enableOrDisableRegister(action, id, fetchAgain, version);
359
362
  }
360
363
  }
361
364
  catch (e) {
@@ -367,7 +370,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
367
370
  }
368
371
  };
369
372
  /** @Internal */
370
- GIPIAbstractFindComponent.prototype._enableOrDisableRegister = function (action, id, fetchAgain) {
373
+ GIPIAbstractFindComponent.prototype._enableOrDisableRegister = function (action, id, fetchAgain, version) {
371
374
  var _this = this;
372
375
  if (fetchAgain === void 0) { fetchAgain = true; }
373
376
  try {
@@ -378,7 +381,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
378
381
  _this.setFilterSessionStorage();
379
382
  _this.loading = true;
380
383
  _this.page = _this.newPage();
381
- _this.abstractCrudService.enableOrDisable(id, action).toPromise().then(function () {
384
+ _this.abstractCrudService.enableOrDisable(id, action, version).toPromise().then(function () {
382
385
  if (fetchAgain) {
383
386
  _this.findAll();
384
387
  }
@@ -395,7 +398,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
395
398
  throw new Error(e);
396
399
  }
397
400
  };
398
- GIPIAbstractFindComponent.prototype.enableAndDisableAllRegister = function (action, idList, permission, fetchAgain) {
401
+ GIPIAbstractFindComponent.prototype.enableAndDisableAllRegister = function (action, idList, permission, fetchAgain, version) {
399
402
  if (fetchAgain === void 0) { fetchAgain = true; }
400
403
  try {
401
404
  idList = this.handleEntityIdList(idList);
@@ -403,7 +406,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
403
406
  return;
404
407
  }
405
408
  if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {
406
- this._enableAndDisableAllRegister(action, idList, fetchAgain);
409
+ this._enableAndDisableAllRegister(action, idList, fetchAgain, version);
407
410
  }
408
411
  else {
409
412
  if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {
@@ -413,7 +416,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
413
416
  this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);
414
417
  return;
415
418
  }
416
- this._enableAndDisableAllRegister(action, idList, fetchAgain);
419
+ this._enableAndDisableAllRegister(action, idList, fetchAgain, version);
417
420
  }
418
421
  }
419
422
  catch (e) {
@@ -425,7 +428,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
425
428
  }
426
429
  };
427
430
  /** @Internal */
428
- GIPIAbstractFindComponent.prototype._enableAndDisableAllRegister = function (action, idList, fetchAgain) {
431
+ GIPIAbstractFindComponent.prototype._enableAndDisableAllRegister = function (action, idList, fetchAgain, version) {
429
432
  var _this = this;
430
433
  if (fetchAgain === void 0) { fetchAgain = true; }
431
434
  try {
@@ -436,7 +439,7 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
436
439
  _this.setFilterSessionStorage();
437
440
  _this.loading = true;
438
441
  _this.page = _this.newPage();
439
- _this.abstractCrudService.enableOrDisableAll(idList, action).toPromise().then(function () {
442
+ _this.abstractCrudService.enableOrDisableAll(idList, action, version).toPromise().then(function () {
440
443
  if (fetchAgain) {
441
444
  _this.findAll();
442
445
  }
@@ -453,6 +456,27 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
453
456
  throw new Error(e);
454
457
  }
455
458
  };
459
+ GIPIAbstractFindComponent.prototype.cloneRegister = function (id, permission) {
460
+ id = this.handleEntityId(id);
461
+ if (ObjectUtil.isNull(id)) {
462
+ return;
463
+ }
464
+ if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {
465
+ this.setFilterSessionStorage();
466
+ this.navigateByUrl(this.getPath(), [this.getPath(), 'new', 'clone'], true);
467
+ }
468
+ else {
469
+ if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {
470
+ permission = this.basePermissionList.MAKE;
471
+ }
472
+ if (!this.hasPermission(permission)) {
473
+ this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);
474
+ return;
475
+ }
476
+ this.setFilterSessionStorage();
477
+ this.navigateByUrl(this.getPath(), [this.getPath(), 'new', 'clone', id], true);
478
+ }
479
+ };
456
480
  GIPIAbstractFindComponent.prototype.clear = function () {
457
481
  this.baseService.sessionStorageService.remove('filter');
458
482
  this.page = this.newPage();
@@ -504,4 +528,4 @@ var GIPIAbstractFindComponent = /** @class */ (function (_super) {
504
528
  return GIPIAbstractFindComponent;
505
529
  }(GIPIAbstractComponent));
506
530
  export { GIPIAbstractFindComponent };
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmluZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJjb3JlL2dpcGktY29tcG9uZW50cy9jb21wb25lbnRzL2Fic3RyYWN0LWZpbmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHN0Q7SUFBb0ksNkNBQXFCO0lBMENySixtQ0FDYyxtQkFBOEQsRUFDOUQsV0FBNEIsRUFDNUIsY0FBOEI7UUFINUMsWUFLSSxrQkFBTSxXQUFXLEVBQUUsY0FBYyxDQUFDLFNBQ3JDO1FBTGEseUJBQW1CLEdBQW5CLG1CQUFtQixDQUEyQztRQUM5RCxpQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsb0JBQWMsR0FBZCxjQUFjLENBQWdC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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgSU5KRUNUT1IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBBUFBfTUVTU0FHRVMgfSBmcm9tICcuLi8uLi9hcHAubWVzc2FnZXMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5EVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZHRvL3RhYmxlLWNvbHVtbi5kdG8nO1xuaW1wb3J0IHsgVGFibGVQYWdlRXZlbnREVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZHRvL3RhYmxlLXBhZ2UtZXZlbnQuZHRvJztcbmltcG9ydCB7IEFycmF5VXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5LnV0aWwnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdC51dGlsJztcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmcudXRpbCc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RGaWx0ZXJNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hYnN0cmFjdC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgR0lQSUFic3RyYWN0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYWJzdHJhY3QubW9kZWwnO1xuaW1wb3J0IHsgR0lQSUFwcGxpZWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvYXBwbGllZC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgR0lQSVBhZ2VNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wYWdlLm1vZGVsJztcbmltcG9ydCB7IEdJUElTb3J0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc29ydC5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RDcnVkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LWNydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHSVBJQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR0lQSVV1aWQgfSBmcm9tICcuLi90eXBlcy91dWlkLnR5cGUnO1xuaW1wb3J0IHsgR0lQSUFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hYnN0cmFjdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR0lQSUFic3RyYWN0RmluZENvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgR0lQSUFic3RyYWN0TW9kZWwsIFRGaWx0ZXIgZXh0ZW5kcyBHSVBJQWJzdHJhY3RGaWx0ZXJNb2RlbD4gZXh0ZW5kcyBHSVBJQWJzdHJhY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwcml2YXRlIF9maWx0ZXI6IFRGaWx0ZXIgPSBudWxsO1xuICAgIHB1YmxpYyBzZXQgZmlsdGVyKHZhbHVlOiBURmlsdGVyKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlciA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcigpOiBURmlsdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYWdlOiBHSVBJUGFnZU1vZGVsPFRFbnRpdHk+ID0gbnVsbDtcbiAgICBwdWJsaWMgc2V0IHBhZ2UodmFsdWU6IEdJUElQYWdlTW9kZWw8VEVudGl0eT4pIHtcbiAgICAgICAgdGhpcy5fcGFnZSA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHBhZ2UoKTogR0lQSVBhZ2VNb2RlbDxURW50aXR5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RhYmxlUGFnZUV2ZW50RFRPOiBUYWJsZVBhZ2VFdmVudERUTztcbiAgICBwdWJsaWMgc2V0IHRhYmxlUGFnZUV2ZW50RFRPKHZhbHVlOiBUYWJsZVBhZ2VFdmVudERUTykge1xuICAgICAgICB0aGlzLl90YWJsZVBhZ2VFdmVudERUTyA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHRhYmxlUGFnZUV2ZW50RFRPKCk6IFRhYmxlUGFnZUV2ZW50RFRPIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlUGFnZUV2ZW50RFRPO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcbiAgICBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IFRhYmxlQ29sdW1uRFRPW10pIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5EVE9bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGxpZWRGaWx0ZXJzOiBHSVBJQXBwbGllZEZpbHRlcjxhbnk+W10gPSBbXTtcbiAgICBwdWJsaWMgc2V0IGFwcGxpZWRGaWx0ZXJzKHZhbHVlOiBHSVBJQXBwbGllZEZpbHRlcjxhbnk+W10pIHtcbiAgICAgICAgdGhpcy5fYXBwbGllZEZpbHRlcnMgPSB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBhcHBsaWVkRmlsdGVycygpOiBHSVBJQXBwbGllZEZpbHRlcjxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGllZEZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdENydWRTZXJ2aWNlOiBHSVBJQWJzdHJhY3RDcnVkU2VydmljZTxURW50aXR5LCBURmlsdGVyPixcbiAgICAgICAgcHJvdGVjdGVkIGJhc2VTZXJ2aWNlOiBHSVBJQmFzZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGJhc2VTZXJ2aWNlLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYXNlUGVybWlzc2lvbkxpc3QgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uSW5pdEZpbHRlcigpO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNyZWF0ZVRhYmxlQ29sdW1ucygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IG5ld0ZpbHRlcigpOiBURmlsdGVyO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbkRUT1tdO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldEFwcGxpZWRGaWx0ZXJzKCk6IHZvaWQ7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2xlYXJBcHBsaWVkRmlsdGVycygpOiB2b2lkO1xuXG4gICAgcHVibGljIGFic3RyYWN0IHJlbW92ZUFwcGxpZWRGaWx0ZXJzKGZpbHRlcjogeyBjaGlwOiBHSVBJQXBwbGllZEZpbHRlcjxhbnk+OyBpbmRleDogbnVtYmVyOyB9KTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGhhbmRsZUZpbHRlclNlc3Npb25TdG9yYWdlKCk6IHZvaWQ7XG5cbiAgICBwcm90ZWN0ZWQgbmV3UGFnZSgpOiBHSVBJUGFnZU1vZGVsPFRFbnRpdHk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBHSVBJUGFnZU1vZGVsPFRFbnRpdHk+KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYmxlU29ydHMoKTogR0lQSVNvcnRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcmVEZWxldGUoaWQ/OiBHSVBJVXVpZCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgZXhpc3RJbkFwcGxpZWRGaWx0ZXJzPFQgPSBhbnk+KGtleTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMuYXBwbGllZEZpbHRlcnMpICYmXG4gICAgICAgICAgICAodGhpcy5hcHBsaWVkRmlsdGVycy5maW5kSW5kZXgoZSA9PiBlLmtleSA9PT0ga2V5KSA+PSAwKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBASW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgX29uSW5pdEZpbHRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5uZXdQYWdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5uZXdGaWx0ZXIoKTtcblxuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZmlsdGVyKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRBcHBsaWVkRmlsdGVycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyU2Vzc2lvblN0b3JhZ2UgPSB0aGlzLmJhc2VTZXJ2aWNlLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXQoJ2ZpbHRlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKGZpbHRlclNlc3Npb25TdG9yYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBbGwocGFnZUV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLm5ld1BhZ2UoKTtcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMubmV3RmlsdGVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChwYWdlRXZlbnQpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLnRhYmxlUGFnZUV2ZW50RFRPKSkge1xuICAgICAgICAgICAgICAgIHBhZ2VFdmVudCA9IHRoaXMudGFibGVQYWdlRXZlbnREVE87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYWdlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlUGFnZUV2ZW50RFRPID0gcGFnZUV2ZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLnBhZ2VOdW1iZXIgPSBwYWdlRXZlbnQucGFnZUluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLnBhZ2VTaXplID0gcGFnZUV2ZW50LnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLm9mZnNldCA9IHBhZ2VFdmVudC5wYWdlSW5kZXggKiBwYWdlRXZlbnQucGFnZVNpemU7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFnZUV2ZW50LnNvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIuc29ydHMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgR0lQSVNvcnRNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlRXZlbnQuc29ydC5hY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nVXRpbC5pc0VtcHR5KHBhZ2VFdmVudC5zb3J0LmRpcmVjdGlvbikgPyAnREVTQycgOiBwYWdlRXZlbnQuc29ydC5kaXJlY3Rpb24udG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIucGFnZU51bWJlciA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5wYWdlU2l6ZSA9IDEwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFic3RyYWN0Q3J1ZFNlcnZpY2UuZmluZEFsbDxURmlsdGVyLCBURW50aXR5Pih0aGlzLmZpbHRlcikudG9Qcm9taXNlKCkudGhlbihwYWdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwbGllZEZpbHRlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5ld1JlZ2lzdGVyKHBlcm1pc3Npb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAnbmV3J10sIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0Lk1BS0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkV2FybmluZ01lc3NhZ2UoSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuTk9UX1BFUk1JU1NJT04pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCksICduZXcnXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdFJlZ2lzdGVyKGlkPzogR0lQSVV1aWQsIHBlcm1pc3Npb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWQgPSB0aGlzLmhhbmRsZUVudGl0eUlkKGlkKTtcbiAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAnZWRpdCddLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSB0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdC5VUERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkV2FybmluZ01lc3NhZ2UoSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuTk9UX1BFUk1JU1NJT04pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCksICdlZGl0JywgaWRdLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSZWdpc3RlcihpZD86IEdJUElVdWlkLCBwZXJtaXNzaW9uPzogc3RyaW5nLCBmZXRjaEFnYWluOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWQgPSB0aGlzLmhhbmRsZUVudGl0eUlkKGlkKTtcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChpZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlUmVnaXN0ZXIoaWQsIGZldGNoQWdhaW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0LkRFTEVURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVSZWdpc3RlcihpZCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQEludGVybmFsICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlUmVnaXN0ZXIoaWQ6IEdJUElVdWlkLCBmZXRjaEFnYWluOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5iYXNlU2VydmljZS5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybWHDp8OjbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuREVMRVRFX0NPTkZJUk1BVElPTixcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZURlbGV0ZShpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmRlbGV0ZTxURW50aXR5PihpZCkudG9Qcm9taXNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hBZ2Fpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWxsUmVnaXN0ZXIoaWRMaXN0PzogR0lQSVV1aWRbXSwgcGVybWlzc2lvbj86IHN0cmluZywgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlkTGlzdCA9IHRoaXMuaGFuZGxlRW50aXR5SWRMaXN0KGlkTGlzdCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWRMaXN0KSB8fCBBcnJheVV0aWwuaXNFbXB0eShpZExpc3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUFsbFJlZ2lzdGVyKGlkTGlzdCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuREVMRVRFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUFsbFJlZ2lzdGVyKGlkTGlzdCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQEludGVybmFsICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlQWxsUmVnaXN0ZXIoaWRMaXN0OiBHSVBJVXVpZFtdLCBmZXRjaEFnYWluOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5iYXNlU2VydmljZS5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybWHDp8OjbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuREVMRVRFX0NPTkZJUk1BVElPTixcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZURlbGV0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzdHJhY3RDcnVkU2VydmljZS5kZWxldGVBbGwoaWRMaXN0KS50b1Byb21pc2UoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaEFnYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkU3VjY2Vzc01lc3NhZ2UoSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuU1VDQ0VTUyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB2aWV3UmVnaXN0ZXIoaWQ/OiBHSVBJVXVpZCwgcGVybWlzc2lvbj86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZCA9IHRoaXMuaGFuZGxlRW50aXR5SWQoaWQpO1xuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCksICd2aWV3JywgaWRdLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSB0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdC5SRUFEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAndmlldycsIGlkXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdE9yVmlld1JlZ2lzdGVyKGlkOiBHSVBJVXVpZCwgcGVybWlzc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFJlZ2lzdGVyKGlkLCBwZXJtaXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlld1JlZ2lzdGVyKGlkLCBwZXJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVPckRpc2FibGVSZWdpc3RlcihhY3Rpb246ICdESVNBQkxFJyB8ICdFTkFCTEUnLCBpZD86IEdJUElVdWlkLCBwZXJtaXNzaW9uPzogc3RyaW5nLCBmZXRjaEFnYWluOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWQgPSB0aGlzLmhhbmRsZUVudGl0eUlkKGlkKTtcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChpZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlT3JEaXNhYmxlUmVnaXN0ZXIoYWN0aW9uLCBpZCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuVVBEQVRFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZU9yRGlzYWJsZVJlZ2lzdGVyKGFjdGlvbiwgaWQsIGZldGNoQWdhaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdGluZygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBJbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX2VuYWJsZU9yRGlzYWJsZVJlZ2lzdGVyKGFjdGlvbjogJ0RJU0FCTEUnIHwgJ0VOQUJMRScsIGlkOiBHSVBJVXVpZCwgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm1hw6fDo28nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEZXNlamEgcmVhbG1lbnRlICR7KGFjdGlvbiA9PT0gJ0RJU0FCTEUnKSA/ICdpbmF0aXZhcicgOiAnYXRpdmFyJ30gZXN0ZSByZWdpc3Rybz9gLFxuICAgICAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5uZXdQYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmVuYWJsZU9yRGlzYWJsZShpZCwgYWN0aW9uKS50b1Byb21pc2UoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaEFnYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkU3VjY2Vzc01lc3NhZ2UoSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuU1VDQ0VTUyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVBbmREaXNhYmxlQWxsUmVnaXN0ZXIoYWN0aW9uOiAnRElTQUJMRScgfCAnRU5BQkxFJywgaWRMaXN0PzogR0lQSVV1aWRbXSwgcGVybWlzc2lvbj86IHN0cmluZywgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlkTGlzdCA9IHRoaXMuaGFuZGxlRW50aXR5SWRMaXN0KGlkTGlzdCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWRMaXN0KSB8fCBBcnJheVV0aWwuaXNFbXB0eShpZExpc3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuZERpc2FibGVBbGxSZWdpc3RlcihhY3Rpb24sIGlkTGlzdCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuVVBEQVRFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuZERpc2FibGVBbGxSZWdpc3RlcihhY3Rpb24sIGlkTGlzdCwgZmV0Y2hBZ2Fpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQEludGVybmFsICovXG4gICAgcHJpdmF0ZSBfZW5hYmxlQW5kRGlzYWJsZUFsbFJlZ2lzdGVyKGFjdGlvbjogJ0RJU0FCTEUnIHwgJ0VOQUJMRScsIGlkTGlzdDogR0lQSVV1aWRbXSwgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm1hw6fDo28nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEZXNlamEgcmVhbG1lbnRlICR7KGFjdGlvbiA9PT0gJ0RJU0FCTEUnKSA/ICdpbmF0aXZhcicgOiAnYXRpdmFyJ30gb3MgcmVnaXN0cm9zIHNlbGVjaW9uYWRvcz9gLFxuICAgICAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5uZXdQYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmVuYWJsZU9yRGlzYWJsZUFsbChpZExpc3QsIGFjdGlvbikudG9Qcm9taXNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hBZ2Fpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2Uuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZSgnZmlsdGVyJyk7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMubmV3RmlsdGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYXJBcHBsaWVkRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbmRBbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRW50aXR5SWQoaWQ6IEdJUElVdWlkKTogR0lQSVV1aWQge1xuICAgICAgICBpZiAoIXRoaXMuVVVJRElzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gaWRlbnRpZmljYWRvciBkbyByZWdpc3RybyBuw6NvIMOpIHbDoWxpZG8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChpZCkgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMucGFnZSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMucGFnZS5jb250ZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RTZWxldGVjdGVkID0gdGhpcy5wYWdlLmNvbnRlbnQuZmlsdGVyKGMgPT4gYy5zZWxlY3RlZClbMF07XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoZmlyc3RTZWxldGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmlyc3RTZWxldGVjdGVkLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVFbnRpdHlJZExpc3QoaWRMaXN0OiBHSVBJVXVpZFtdKTogR0lQSVV1aWRbXSB7XG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuVVVJRElzVmFsaWQoaWRMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gaWRlbnRpZmljYWRvciBkbyByZWdpc3RybyBuw6NvIMOpIHbDoWxpZG8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5wYWdlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5wYWdlLmNvbnRlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0U2VsZWN0ZWQgPSB0aGlzLnBhZ2UuY29udGVudC5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5tYXAocCA9PiBwLmlkKTtcbiAgICAgICAgICAgIGlmIChBcnJheVV0aWwuaXNFbXB0eShsaXN0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaXN0U2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaWRMaXN0O1xuICAgIH1cblxufVxuIl19
531
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmluZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJjb3JlL2dpcGktY29tcG9uZW50cy9jb21wb25lbnRzL2Fic3RyYWN0LWZpbmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHN0Q7SUFBb0ksNkNBQXFCO0lBMENySixtQ0FDYyxtQkFBOEQsRUFDOUQsV0FBNEIsRUFDNUIsY0FBOEI7UUFINUMsWUFLSSxrQkFBTSxXQUFXLEVBQUUsY0FBYyxDQUFDLFNBQ3JDO1FBTGEseUJBQW1CLEdBQW5CLG1CQUFtQixDQUEyQztRQUM5RCxpQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsb0JBQWMsR0FBZCxjQUFjLENBQWdC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QyxPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsT0FBTyxZQUFZLENBQUM7U0FDdkI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztnQkFoZmtDLHVCQUF1QjtnQkFDL0IsZUFBZTtnQkFDWixjQUFjOztJQTdDMUIseUJBQXlCO1FBRDlDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQzt5Q0E0Q1csdUJBQXVCO1lBQy9CLGVBQWU7WUFDWixjQUFjO09BN0MxQix5QkFBeUIsQ0E2aEI5QztJQUFELGdDQUFDO0NBQUEsQUE3aEJELENBQW9JLHFCQUFxQixHQTZoQnhKO1NBN2hCcUIseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBJTkpFQ1RPUiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IEFQUF9NRVNTQUdFUyB9IGZyb20gJy4uLy4uL2FwcC5tZXNzYWdlcyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9kdG8vdGFibGUtY29sdW1uLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uL21vZGVscy9kdG8vdGFibGUtcGFnZS1ldmVudC5kdG8nO1xuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXkudXRpbCc7XG5pbXBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0LnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nVXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmluZy51dGlsJztcbmltcG9ydCB7IEdJUElBYnN0cmFjdEZpbHRlck1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2Fic3RyYWN0LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hYnN0cmFjdC5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJQXBwbGllZEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9hcHBsaWVkLWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJUGFnZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2UubW9kZWwnO1xuaW1wb3J0IHsgR0lQSVNvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zb3J0Lm1vZGVsJztcbmltcG9ydCB7IEdJUElBYnN0cmFjdENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdJUElCYXNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBHSVBJVXVpZCB9IGZyb20gJy4uL3R5cGVzL3V1aWQudHlwZSc7XG5pbXBvcnQgeyBHSVBJQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHSVBJQWJzdHJhY3RGaW5kQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBHSVBJQWJzdHJhY3RNb2RlbCwgVEZpbHRlciBleHRlbmRzIEdJUElBYnN0cmFjdEZpbHRlck1vZGVsPiBleHRlbmRzIEdJUElBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgX2ZpbHRlcjogVEZpbHRlciA9IG51bGw7XG4gICAgcHVibGljIHNldCBmaWx0ZXIodmFsdWU6IFRGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyKCk6IFRGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhZ2U6IEdJUElQYWdlTW9kZWw8VEVudGl0eT4gPSBudWxsO1xuICAgIHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogR0lQSVBhZ2VNb2RlbDxURW50aXR5Pikge1xuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgcGFnZSgpOiBHSVBJUGFnZU1vZGVsPFRFbnRpdHk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGFibGVQYWdlRXZlbnREVE86IFRhYmxlUGFnZUV2ZW50RFRPO1xuICAgIHB1YmxpYyBzZXQgdGFibGVQYWdlRXZlbnREVE8odmFsdWU6IFRhYmxlUGFnZUV2ZW50RFRPKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlUGFnZUV2ZW50RFRPID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdGFibGVQYWdlRXZlbnREVE8oKTogVGFibGVQYWdlRXZlbnREVE8ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVQYWdlRXZlbnREVE87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5EVE9bXSA9IFtdO1xuICAgIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogVGFibGVDb2x1bW5EVE9bXSkge1xuICAgICAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbkRUT1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXBwbGllZEZpbHRlcnM6IEdJUElBcHBsaWVkRmlsdGVyPGFueT5bXSA9IFtdO1xuICAgIHB1YmxpYyBzZXQgYXBwbGllZEZpbHRlcnModmFsdWU6IEdJUElBcHBsaWVkRmlsdGVyPGFueT5bXSkge1xuICAgICAgICB0aGlzLl9hcHBsaWVkRmlsdGVycyA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGFwcGxpZWRGaWx0ZXJzKCk6IEdJUElBcHBsaWVkRmlsdGVyPGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBsaWVkRmlsdGVycztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0Q3J1ZFNlcnZpY2U6IEdJUElBYnN0cmFjdENydWRTZXJ2aWNlPFRFbnRpdHksIFRGaWx0ZXI+LFxuICAgICAgICBwcm90ZWN0ZWQgYmFzZVNlcnZpY2U6IEdJUElCYXNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYmFzZVNlcnZpY2UsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jhc2VQZXJtaXNzaW9uTGlzdCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25Jbml0RmlsdGVyKCk7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY3JlYXRlVGFibGVDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgbmV3RmlsdGVyKCk6IFRGaWx0ZXI7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uRFRPW107XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0QXBwbGllZEZpbHRlcnMoKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjbGVhckFwcGxpZWRGaWx0ZXJzKCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlQXBwbGllZEZpbHRlcnMoZmlsdGVyOiB7IGNoaXA6IEdJUElBcHBsaWVkRmlsdGVyPGFueT47IGluZGV4OiBudW1iZXI7IH0pOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk6IHZvaWQ7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGFuZGxlRmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBuZXdQYWdlKCk6IEdJUElQYWdlTW9kZWw8VEVudGl0eT4ge1xuICAgICAgICByZXR1cm4gbmV3IEdJUElQYWdlTW9kZWw8VEVudGl0eT4oKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFibGVTb3J0cygpOiBHSVBJU29ydE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByZURlbGV0ZShpZD86IEdJUElVdWlkKTogdm9pZCB7IH1cblxuICAgIHByb3RlY3RlZCBleGlzdEluQXBwbGllZEZpbHRlcnM8VCA9IGFueT4oa2V5OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5hcHBsaWVkRmlsdGVycykgJiZcbiAgICAgICAgICAgICh0aGlzLmFwcGxpZWRGaWx0ZXJzLmZpbmRJbmRleChlID0+IGUua2V5ID09PSBrZXkpID49IDApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBJbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCBfb25Jbml0RmlsdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLm5ld1BhZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLm5ld0ZpbHRlcigpO1xuXG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5maWx0ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFwcGxpZWRGaWx0ZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJTZXNzaW9uU3RvcmFnZSA9IHRoaXMuYmFzZVNlcnZpY2Uuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldCgnZmlsdGVyJyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwoZmlsdGVyU2Vzc2lvblN0b3JhZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEFsbChwYWdlRXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5uZXdGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKHBhZ2VFdmVudCkgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMudGFibGVQYWdlRXZlbnREVE8pKSB7XG4gICAgICAgICAgICAgICAgcGFnZUV2ZW50ID0gdGhpcy50YWJsZVBhZ2VFdmVudERUTztcblxuICAgICAgICAgICAgICAgIGlmIChPYmplY3RVdGlsLmhhc1Byb3BlcnR5SW5PYmoocGFnZUV2ZW50LCAncGFnZUluZGV4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZUV2ZW50LnBhZ2VJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFnZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVBhZ2VFdmVudERUTyA9IHBhZ2VFdmVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5wYWdlTnVtYmVyID0gcGFnZUV2ZW50LnBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5wYWdlU2l6ZSA9IHBhZ2VFdmVudC5wYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5vZmZzZXQgPSBwYWdlRXZlbnQucGFnZUluZGV4ICogcGFnZUV2ZW50LnBhZ2VTaXplO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VFdmVudC5zb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLnNvcnRzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEdJUElTb3J0TW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUV2ZW50LnNvcnQuYWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1V0aWwuaXNFbXB0eShwYWdlRXZlbnQuc29ydC5kaXJlY3Rpb24pID8gJ0RFU0MnIDogcGFnZUV2ZW50LnNvcnQuZGlyZWN0aW9uLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLnBhZ2VOdW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLm9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIucGFnZVNpemUgPSAxMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hYnN0cmFjdENydWRTZXJ2aWNlLmZpbmRBbGw8VEZpbHRlciwgVEVudGl0eT4odGhpcy5maWx0ZXIpLnRvUHJvbWlzZSgpLnRoZW4ocGFnZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFwcGxpZWRGaWx0ZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZXdSZWdpc3RlcihwZXJtaXNzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRQYXRoKCksIFt0aGlzLmdldFBhdGgoKSwgJ25ldyddLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSB0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdC5NQUtFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAnbmV3J10sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVkaXRSZWdpc3RlcihpZD86IEdJUElVdWlkLCBwZXJtaXNzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlkID0gdGhpcy5oYW5kbGVFbnRpdHlJZChpZCk7XG4gICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRQYXRoKCksIFt0aGlzLmdldFBhdGgoKSwgJ2VkaXQnXSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuVVBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFdhcm5pbmdNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLk5PVF9QRVJNSVNTSU9OKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAnZWRpdCcsIGlkXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlUmVnaXN0ZXIoaWQ/OiBHSVBJVXVpZCwgcGVybWlzc2lvbj86IHN0cmluZywgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlkID0gdGhpcy5oYW5kbGVFbnRpdHlJZChpZCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVJlZ2lzdGVyKGlkLCBmZXRjaEFnYWluLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5iYXNlUGVybWlzc2lvbkxpc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSB0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdC5ERUxFVEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkV2FybmluZ01lc3NhZ2UoSU5KRUNUT1IuZ2V0KEFQUF9NRVNTQUdFUykuTk9UX1BFUk1JU1NJT04pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlUmVnaXN0ZXIoaWQsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdGluZygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBJbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZVJlZ2lzdGVyKGlkOiBHSVBJVXVpZCwgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm1hw6fDo28nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLkRFTEVURV9DT05GSVJNQVRJT04sXG4gICAgICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLm5ld1BhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUoaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzdHJhY3RDcnVkU2VydmljZS5kZWxldGU8VEVudGl0eT4oaWQsIHZlcnNpb24pLnRvUHJvbWlzZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZldGNoQWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTdWNjZXNzTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5TVUNDRVNTKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZUFsbFJlZ2lzdGVyKGlkTGlzdD86IEdJUElVdWlkW10sIHBlcm1pc3Npb24/OiBzdHJpbmcsIGZldGNoQWdhaW46IGJvb2xlYW4gPSB0cnVlLCB2ZXJzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZExpc3QgPSB0aGlzLmhhbmRsZUVudGl0eUlkTGlzdChpZExpc3QpO1xuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGlkTGlzdCkgfHwgQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVBbGxSZWdpc3RlcihpZExpc3QsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0LkRFTEVURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVBbGxSZWdpc3RlcihpZExpc3QsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdGluZygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBJbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZUFsbFJlZ2lzdGVyKGlkTGlzdDogR0lQSVV1aWRbXSwgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm1hw6fDo28nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLkRFTEVURV9DT05GSVJNQVRJT04sXG4gICAgICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLm5ld1BhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFic3RyYWN0Q3J1ZFNlcnZpY2UuZGVsZXRlQWxsKGlkTGlzdCwgdmVyc2lvbikudG9Qcm9taXNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hBZ2Fpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld1JlZ2lzdGVyKGlkPzogR0lQSVV1aWQsIHBlcm1pc3Npb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWQgPSB0aGlzLmhhbmRsZUVudGl0eUlkKGlkKTtcbiAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldFBhdGgoKSwgW3RoaXMuZ2V0UGF0aCgpLCAndmlldycsIGlkXSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuUkVBRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRQYXRoKCksIFt0aGlzLmdldFBhdGgoKSwgJ3ZpZXcnLCBpZF0sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVkaXRPclZpZXdSZWdpc3RlcihpZDogR0lQSVV1aWQsIHBlcm1pc3Npb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRSZWdpc3RlcihpZCwgcGVybWlzc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdSZWdpc3RlcihpZCwgcGVybWlzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlT3JEaXNhYmxlUmVnaXN0ZXIoYWN0aW9uOiAnRElTQUJMRScgfCAnRU5BQkxFJywgaWQ/OiBHSVBJVXVpZCwgcGVybWlzc2lvbj86IHN0cmluZywgZmV0Y2hBZ2FpbjogYm9vbGVhbiA9IHRydWUsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlkID0gdGhpcy5oYW5kbGVFbnRpdHlJZChpZCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZU9yRGlzYWJsZVJlZ2lzdGVyKGFjdGlvbiwgaWQsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0LlVQREFURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVPckRpc2FibGVSZWdpc3RlcihhY3Rpb24sIGlkLCBmZXRjaEFnYWluLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3RpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBASW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIF9lbmFibGVPckRpc2FibGVSZWdpc3RlcihhY3Rpb246ICdESVNBQkxFJyB8ICdFTkFCTEUnLCBpZDogR0lQSVV1aWQsIGZldGNoQWdhaW46IGJvb2xlYW4gPSB0cnVlLCB2ZXJzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb25maXJtYcOnw6NvJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRGVzZWphIHJlYWxtZW50ZSAkeyhhY3Rpb24gPT09ICdESVNBQkxFJykgPyAnaW5hdGl2YXInIDogJ2F0aXZhcid9IGVzdGUgcmVnaXN0cm8/YCxcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzdHJhY3RDcnVkU2VydmljZS5lbmFibGVPckRpc2FibGUoaWQsIGFjdGlvbiwgdmVyc2lvbikudG9Qcm9taXNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hBZ2Fpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Y2Nlc3NNZXNzYWdlKElOSkVDVE9SLmdldChBUFBfTUVTU0FHRVMpLlNVQ0NFU1MpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlQW5kRGlzYWJsZUFsbFJlZ2lzdGVyKGFjdGlvbjogJ0RJU0FCTEUnIHwgJ0VOQUJMRScsIGlkTGlzdD86IEdJUElVdWlkW10sIHBlcm1pc3Npb24/OiBzdHJpbmcsIGZldGNoQWdhaW46IGJvb2xlYW4gPSB0cnVlLCB2ZXJzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZExpc3QgPSB0aGlzLmhhbmRsZUVudGl0eUlkTGlzdChpZExpc3QpO1xuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKGlkTGlzdCkgfHwgQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShwZXJtaXNzaW9uKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVBbmREaXNhYmxlQWxsUmVnaXN0ZXIoYWN0aW9uLCBpZExpc3QsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0LlVQREFURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVBbmREaXNhYmxlQWxsUmVnaXN0ZXIoYWN0aW9uLCBpZExpc3QsIGZldGNoQWdhaW4sIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdGluZygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBJbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX2VuYWJsZUFuZERpc2FibGVBbGxSZWdpc3RlcihhY3Rpb246ICdESVNBQkxFJyB8ICdFTkFCTEUnLCBpZExpc3Q6IEdJUElVdWlkW10sIGZldGNoQWdhaW46IGJvb2xlYW4gPSB0cnVlLCB2ZXJzaW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb25maXJtYcOnw6NvJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRGVzZWphIHJlYWxtZW50ZSAkeyhhY3Rpb24gPT09ICdESVNBQkxFJykgPyAnaW5hdGl2YXInIDogJ2F0aXZhcid9IG9zIHJlZ2lzdHJvcyBzZWxlY2lvbmFkb3M/YCxcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzdHJhY3RDcnVkU2VydmljZS5lbmFibGVPckRpc2FibGVBbGwoaWRMaXN0LCBhY3Rpb24sIHZlcnNpb24pLnRvUHJvbWlzZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZldGNoQWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTdWNjZXNzTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5TVUNDRVNTKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsb25lUmVnaXN0ZXIoaWQ/OiBHSVBJVXVpZCwgcGVybWlzc2lvbj86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZCA9IHRoaXMuaGFuZGxlRW50aXR5SWQoaWQpO1xuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYmFzZVBlcm1pc3Npb25MaXN0KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0UGF0aCgpLCBbdGhpcy5nZXRQYXRoKCksICduZXcnLCAnY2xvbmUnXSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmJhc2VQZXJtaXNzaW9uTGlzdCkpIHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gdGhpcy5iYXNlUGVybWlzc2lvbkxpc3QuTUFLRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRXYXJuaW5nTWVzc2FnZShJTkpFQ1RPUi5nZXQoQVBQX01FU1NBR0VTKS5OT1RfUEVSTUlTU0lPTik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRQYXRoKCksIFt0aGlzLmdldFBhdGgoKSwgJ25ldycsICdjbG9uZScsIGlkXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2Uuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZSgnZmlsdGVyJyk7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMubmV3UGFnZSgpO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMubmV3RmlsdGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYXJBcHBsaWVkRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbmRBbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRW50aXR5SWQoaWQ6IEdJUElVdWlkKTogR0lQSVV1aWQge1xuICAgICAgICBpZiAoIXRoaXMuVVVJRElzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gaWRlbnRpZmljYWRvciBkbyByZWdpc3RybyBuw6NvIMOpIHbDoWxpZG8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3RVdGlsLmlzTnVsbChpZCkgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMucGFnZSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMucGFnZS5jb250ZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RTZWxldGVjdGVkID0gdGhpcy5wYWdlLmNvbnRlbnQuZmlsdGVyKGMgPT4gYy5zZWxlY3RlZClbMF07XG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwoZmlyc3RTZWxldGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmlyc3RTZWxldGVjdGVkLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVFbnRpdHlJZExpc3QoaWRMaXN0OiBHSVBJVXVpZFtdKTogR0lQSVV1aWRbXSB7XG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuVVVJRElzVmFsaWQoaWRMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gaWRlbnRpZmljYWRvciBkbyByZWdpc3RybyBuw6NvIMOpIHbDoWxpZG8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkoaWRMaXN0KSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5wYWdlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5wYWdlLmNvbnRlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0U2VsZWN0ZWQgPSB0aGlzLnBhZ2UuY29udGVudC5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5tYXAocCA9PiBwLmlkKTtcbiAgICAgICAgICAgIGlmIChBcnJheVV0aWwuaXNFbXB0eShsaXN0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaXN0U2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaWRMaXN0O1xuICAgIH1cblxufVxuIl19
@@ -51,7 +51,10 @@ var GIPIAbstractComponent = /** @class */ (function () {
51
51
  return this.baseService.router.url.split('/').filter(function (path) { return (path === 'view'); }).length > 0;
52
52
  };
53
53
  GIPIAbstractComponent.prototype.isListing = function () {
54
- return this.baseService.router.url.split('/').filter(function (path) { return (path === 'new') || (path === 'edit') || (path === 'view'); }).length === 0;
54
+ return this.baseService.router.url.split('/').filter(function (path) { return (path === 'new') || (path === 'edit') || (path === 'view') || (path === 'clone'); }).length === 0;
55
+ };
56
+ GIPIAbstractComponent.prototype.isCloning = function () {
57
+ return this.baseService.router.url.split('/').filter(function (path) { return (path === 'clone'); }).length > 0;
55
58
  };
56
59
  GIPIAbstractComponent.prototype.hasPermission = function (permission) {
57
60
  if (StringUtil.isEmpty(permission)) {
@@ -149,4 +152,4 @@ var GIPIAbstractComponent = /** @class */ (function () {
149
152
  return GIPIAbstractComponent;
150
153
  }());
151
154
  export { GIPIAbstractComponent };
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsiY29yZS9naXBpLWNvbXBvbmVudHMvY29tcG9uZW50cy9hYnN0cmFjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTNEO0lBa0JJLCtCQUNjLFdBQTRCLEVBQzVCLGNBQThCO1FBRDlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFsQnBDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFRMUIsd0JBQW1CLEdBQXVCLElBQUksQ0FBQztJQVduRCxDQUFDO0lBbEJMLHNCQUFXLDBDQUFPO2FBR2xCO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7YUFMRCxVQUFtQixLQUFjO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBTUQsc0JBQVcscURBQWtCO2FBRzdCO1lBQ0ksT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDcEMsQ0FBQzthQUxELFVBQThCLEtBQXlCO1lBQ25ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQzs7O09BQUE7SUFVRCx3Q0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFD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LENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkYsSUFBSSxjQUFjLEVBQUU7WUFDaEIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBMUMsQ0FBMEMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDOUY7YUFBTTtZQUNILE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQTFDLENBQTBDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ3pGO0lBQ0wsQ0FBQzs7Z0JBN0gwQixlQUFlO2dCQUNaLGNBQWM7O0lBcEIxQixxQkFBcUI7UUFEMUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO3lDQW9CRyxlQUFlO1lBQ1osY0FBYztPQXBCMUIscUJBQXFCLENBa0oxQztJQUFELDRCQUFDO0NBQUEsQUFsSkQsSUFrSkM7U0FsSnFCLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlVXNlciB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlLXVzZXIubW9kZWwnO1xuaW1wb3J0IHsgTWVzc2FnZURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9kdG8vbWVzc2FnZS5kdG8nO1xuaW1wb3J0IHsgVG9rZW5EVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZHRvL3Rva2VuLmR0byc7XG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyaW5nLnV0aWwnO1xuaW1wb3J0IHsgVVVJRFV0aWwgfSBmcm9tICcuLi8uLi91dGlscy91dWlkLnV0aWwnO1xuaW1wb3J0IHsgR0lQSUJhc2VQZXJtaXNzaW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlL2Jhc2UtcGVybWlzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR0lQSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEdJUElVdWlkIH0gZnJvbSAnLi4vdHlwZXMvdXVpZC50eXBlJztcblxuQENvbXBvbmVudCh7IHRlbXBsYXRlOiAnJyB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdJUElBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgX2xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Jhc2VQZXJtaXNzaW9uTGlzdDogR0lQSUJhc2VQZXJtaXNzaW9uID0gbnVsbDtcbiAgICBwdWJsaWMgc2V0IGJhc2VQZXJtaXNzaW9uTGlzdCh2YWx1ZTogR0lQSUJhc2VQZXJtaXNzaW9uKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VQZXJtaXNzaW9uTGlzdCA9IHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGJhc2VQZXJtaXNzaW9uTGlzdCgpOiBHSVBJQmFzZVBlcm1pc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmFzZVBlcm1pc3Npb25MaXN0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgYmFzZVNlcnZpY2U6IEdJUElCYXNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Jbml0Rm9ybSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkFmdGVySW5pdEZvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDcmVhdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpLmZpbHRlcihwYXRoID0+IChwYXRoID09PSAnbmV3JykpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpLmZpbHRlcihwYXRoID0+IChwYXRoID09PSAnZWRpdCcpKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1ZpZXdpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci51cmwuc3BsaXQoJy8nKS5maWx0ZXIocGF0aCA9PiAocGF0aCA9PT0gJ3ZpZXcnKSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNMaXN0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlU2VydmljZS5yb3V0ZXIudXJsLnNwbGl0KCcvJykuZmlsdGVyKHBhdGggPT4gKHBhdGggPT09ICduZXcnKSB8fCAocGF0aCA9PT0gJ2VkaXQnKSB8fCAocGF0aCA9PT0gJ3ZpZXcnKSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW46IFRva2VuRFRPPEJhc2VVc2VyPiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykpO1xuICAgICAgICByZXR1cm4gISF0b2tlbi51c2VyLmF1dGhvcml0aWVzLmZpbmQoYXV0aG9yaXR5ID0+IGF1dGhvcml0eS5hdXRob3JpdHkubWF0Y2gocGVybWlzc2lvbikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBVVUlESXNWYWxpZChpZDogR0lQSVV1aWQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFVVSURVdGlsLmlzVmFsaWQoaWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkluaXRGb3JtKCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgb25BZnRlckluaXRGb3JtKCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgb25EZXN0cm95KCk6IHZvaWQgeyB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQucGFyZW50LnVybFswXS5wYXRofS8ke3RoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LnVybFswXS5wYXRofWA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG5hdmlnYXRlQnlVcmwobmF2aWdhdGVCeVVybDogc3RyaW5nLCBuYXZpZ2F0ZTogYW55W10sIHNraXBMb2NhdGlvbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYXNlU2VydmljZS5yb3V0ZXIubmF2aWdhdGVCeVVybChuYXZpZ2F0ZUJ5VXJsLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogc2tpcExvY2F0aW9uQ2hhbmdlIH0pLnRoZW4oKCkgPT4gdGhpcy5iYXNlU2VydmljZS5yb3V0ZXIubmF2aWdhdGUobmF2aWdhdGUpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRFRPKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UubWF0U25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoQWxlcnRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICAgICAgZGF0YTogbWVzc2FnZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkU3VjY2Vzc01lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIGljb246ICdjaGVja19jaXJjbGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdTdWNlc3NvJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFkZEVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYXNlU2VydmljZS5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgaWNvbjogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0aXRsZTogJ0Vycm8nLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFkZFdhcm5pbmdNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBpY29uOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdGVuw6fDo28nLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkSW5mb01lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIGljb246ICdpbmZvJyxcbiAgICAgICAgICAgIHRpdGxlOiAnSW5mb3JtYcOnw6NvJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICB0eXBlOiAnaW5mbydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChTdHJpbmcoZXJyb3IpLmluY2x1ZGVzKCdVbmtub3duJykpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdPY29ycmV1IHVtIGVycm8gYW8gcmVhbGl6YXIgZXNzYSBvcGVyYcOnw6NvLCB0ZW50ZSBub3ZhbWVudGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4aXN0SW5Sb3V0ZXJQYXRoKHZhbHVlOiBzdHJpbmcsIHZhbGlkYXRlUGFyYW1zOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci51cmw7XG4gICAgICAgIGNvbnN0IHBhdGhMaXN0OiBzdHJpbmdbXSA9IHVybC5zbGljZSgxLCB1cmwuaW5kZXhPZignPycpICsgMSkuc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogc3RyaW5nW10gPSB1cmwuc2xpY2UodXJsLmluZGV4T2YoJz8nKSArIDEsIHVybC5sZW5ndGgpLnNwbGl0KCc9Jyk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlUGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyTGlzdC5maWx0ZXIocGF0aCA9PiBwYXRoLnRvVXBwZXJDYXNlKCkgPT09IHZhbHVlLnRvVXBwZXJDYXNlKCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aExpc3QuZmlsdGVyKHBhdGggPT4gcGF0aC50b1VwcGVyQ2FzZSgpID09PSB2YWx1ZS50b1VwcGVyQ2FzZSgpKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsiY29yZS9naXBpLWNvbXBvbmVudHMvY29tcG9uZW50cy9hYnN0cmFjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTNEO0lBa0JJLCtCQUNjLFdBQTRCLEVBQzVCLGNBQThCO1FBRDlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFsQnBDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFRMUIsd0JBQW1CLEdBQXVCLElBQUksQ0FBQztJQVduRCxDQUFDO0lBbEJMLHNCQUFXLDBDQUFPO2FBR2xCO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7YUFMRCxVQUFtQixLQUFjO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBTUQsc0JBQVcscURBQWtCO2FBRzdCO1lBQ0ksT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDcEMsQ0FBQzthQUxELFVBQThCLEtBQXlCO1lBQ25ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQzs7O09BQUE7SUFVRCx3Q0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFD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QUFDO1FBQ2hELElBQU0sUUFBUSxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLElBQU0sYUFBYSxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2RixJQUFJLGNBQWMsRUFBRTtZQUNoQixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUExQyxDQUEwQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUM5RjthQUFNO1lBQ0gsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBMUMsQ0FBMEMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDekY7SUFDTCxDQUFDOztnQkFqSTBCLGVBQWU7Z0JBQ1osY0FBYzs7SUFwQjFCLHFCQUFxQjtRQUQxQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7eUNBb0JHLGVBQWU7WUFDWixjQUFjO09BcEIxQixxQkFBcUIsQ0FzSjFDO0lBQUQsNEJBQUM7Q0FBQSxBQXRKRCxJQXNKQztTQXRKcUIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBbGVydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jhc2UtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBNZXNzYWdlRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R0by9tZXNzYWdlLmR0byc7XG5pbXBvcnQgeyBUb2tlbkRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9kdG8vdG9rZW4uZHRvJztcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmcudXRpbCc7XG5pbXBvcnQgeyBVVUlEVXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL3V1aWQudXRpbCc7XG5pbXBvcnQgeyBHSVBJQmFzZVBlcm1pc3Npb24gfSBmcm9tICcuLi9pbnRlcmZhY2UvYmFzZS1wZXJtaXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHSVBJQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR0lQSVV1aWQgfSBmcm9tICcuLi90eXBlcy91dWlkLnR5cGUnO1xuXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR0lQSUFic3RyYWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmFzZVBlcm1pc3Npb25MaXN0OiBHSVBJQmFzZVBlcm1pc3Npb24gPSBudWxsO1xuICAgIHB1YmxpYyBzZXQgYmFzZVBlcm1pc3Npb25MaXN0KHZhbHVlOiBHSVBJQmFzZVBlcm1pc3Npb24pIHtcbiAgICAgICAgdGhpcy5fYmFzZVBlcm1pc3Npb25MaXN0ID0gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgYmFzZVBlcm1pc3Npb25MaXN0KCk6IEdJUElCYXNlUGVybWlzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlUGVybWlzc2lvbkxpc3Q7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBiYXNlU2VydmljZTogR0lQSUJhc2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkluaXRGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQWZ0ZXJJbml0Rm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NyZWF0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlU2VydmljZS5yb3V0ZXIudXJsLnNwbGl0KCcvJykuZmlsdGVyKHBhdGggPT4gKHBhdGggPT09ICduZXcnKSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFZGl0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlU2VydmljZS5yb3V0ZXIudXJsLnNwbGl0KCcvJykuZmlsdGVyKHBhdGggPT4gKHBhdGggPT09ICdlZGl0JykpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVmlld2luZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpLmZpbHRlcihwYXRoID0+IChwYXRoID09PSAndmlldycpKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0xpc3RpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci51cmwuc3BsaXQoJy8nKS5maWx0ZXIocGF0aCA9PiAocGF0aCA9PT0gJ25ldycpIHx8IChwYXRoID09PSAnZWRpdCcpIHx8IChwYXRoID09PSAndmlldycpIHx8IChwYXRoID09PSAnY2xvbmUnKSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nsb25pbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci51cmwuc3BsaXQoJy8nKS5maWx0ZXIocGF0aCA9PiAocGF0aCA9PT0gJ2Nsb25lJykpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChTdHJpbmdVdGlsLmlzRW1wdHkocGVybWlzc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbjogVG9rZW5EVE88QmFzZVVzZXI+ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSk7XG4gICAgICAgIHJldHVybiAhIXRva2VuLnVzZXIuYXV0aG9yaXRpZXMuZmluZChhdXRob3JpdHkgPT4gYXV0aG9yaXR5LmF1dGhvcml0eS5tYXRjaChwZXJtaXNzaW9uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIFVVSURJc1ZhbGlkKGlkOiBHSVBJVXVpZCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gVVVJRFV0aWwuaXNWYWxpZChpZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uSW5pdEZvcm0oKTogdm9pZCB7IH1cblxuICAgIHByb3RlY3RlZCBvbkFmdGVySW5pdEZvcm0oKTogdm9pZCB7IH1cblxuICAgIHByb3RlY3RlZCBvbkRlc3Ryb3koKTogdm9pZCB7IH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5wYXJlbnQudXJsWzBdLnBhdGh9LyR7dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQudXJsWzBdLnBhdGh9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbmF2aWdhdGVCeVVybChuYXZpZ2F0ZUJ5VXJsOiBzdHJpbmcsIG5hdmlnYXRlOiBhbnlbXSwgc2tpcExvY2F0aW9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKG5hdmlnYXRlQnlVcmwsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiBza2lwTG9jYXRpb25DaGFuZ2UgfSkudGhlbigoKSA9PiB0aGlzLmJhc2VTZXJ2aWNlLnJvdXRlci5uYXZpZ2F0ZShuYXZpZ2F0ZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VEVE8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYXNlU2VydmljZS5tYXRTbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChBbGVydENvbXBvbmVudCwge1xuICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgICAgICBkYXRhOiBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRTdWNjZXNzTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYXNlU2VydmljZS5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgaWNvbjogJ2NoZWNrX2NpcmNsZScsXG4gICAgICAgICAgICB0aXRsZTogJ1N1Y2Vzc28nLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBpY29uOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRXJybycsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkV2FybmluZ01lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIGljb246ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F0ZW7Dp8OjbycsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRJbmZvTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYXNlU2VydmljZS5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgaWNvbjogJ2luZm8nLFxuICAgICAgICAgICAgdGl0bGU6ICdJbmZvcm1hw6fDo28nLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHR5cGU6ICdpbmZvJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKFN0cmluZyhlcnJvcikuaW5jbHVkZXMoJ1Vua25vd24nKSkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ09jb3JyZXUgdW0gZXJybyBhbyByZWFsaXphciBlc3NhIG9wZXJhw6fDo28sIHRlbnRlIG5vdmFtZW50ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhpc3RJblJvdXRlclBhdGgodmFsdWU6IHN0cmluZywgdmFsaWRhdGVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB1cmw6IHN0cmluZyA9IHRoaXMuYmFzZVNlcnZpY2Uucm91dGVyLnVybDtcbiAgICAgICAgY29uc3QgcGF0aExpc3Q6IHN0cmluZ1tdID0gdXJsLnNsaWNlKDEsIHVybC5pbmRleE9mKCc/JykgKyAxKS5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBzdHJpbmdbXSA9IHVybC5zbGljZSh1cmwuaW5kZXhPZignPycpICsgMSwgdXJsLmxlbmd0aCkuc3BsaXQoJz0nKTtcblxuICAgICAgICBpZiAodmFsaWRhdGVQYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJMaXN0LmZpbHRlcihwYXRoID0+IHBhdGgudG9VcHBlckNhc2UoKSA9PT0gdmFsdWUudG9VcHBlckNhc2UoKSkubGVuZ3RoID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoTGlzdC5maWx0ZXIocGF0aCA9PiBwYXRoLnRvVXBwZXJDYXNlKCkgPT09IHZhbHVlLnRvVXBwZXJDYXNlKCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==