@ng-matero/extensions 15.0.4 → 15.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/core/pipes/index.d.ts +1 -0
  2. package/core/pipes/is-template-ref.pipe.d.ts +7 -0
  3. package/core/pipes/pipes.module.d.ts +3 -2
  4. package/datetimepicker/_datetimepicker-theme.scss +5 -1
  5. package/datetimepicker/calendar.scss +9 -2
  6. package/datetimepicker/datetimepicker-content.scss +2 -2
  7. package/datetimepicker/time.scss +2 -2
  8. package/esm2020/core/pipes/index.mjs +2 -1
  9. package/esm2020/core/pipes/is-template-ref.pipe.mjs +14 -0
  10. package/esm2020/core/pipes/pipes.module.mjs +5 -4
  11. package/esm2020/datetimepicker/calendar.mjs +3 -3
  12. package/esm2020/datetimepicker/datetimepicker.mjs +2 -2
  13. package/esm2020/datetimepicker/time.mjs +3 -3
  14. package/esm2020/grid/cell.mjs +30 -45
  15. package/esm2020/grid/grid-module.mjs +24 -3
  16. package/esm2020/grid/grid-pipes.mjs +108 -0
  17. package/esm2020/grid/grid-utils.mjs +23 -4
  18. package/esm2020/grid/grid.mjs +9 -19
  19. package/esm2020/grid/interfaces.mjs +1 -1
  20. package/esm2020/grid/public-api.mjs +2 -1
  21. package/esm2020/select/select.mjs +19 -22
  22. package/esm2020/tooltip/tooltip-module.mjs +8 -7
  23. package/esm2020/tooltip/tooltip.mjs +4 -6
  24. package/fesm2015/mtxCore.mjs +17 -5
  25. package/fesm2015/mtxCore.mjs.map +1 -1
  26. package/fesm2015/mtxDatetimepicker.mjs +6 -6
  27. package/fesm2015/mtxDatetimepicker.mjs.map +1 -1
  28. package/fesm2015/mtxGrid.mjs +185 -67
  29. package/fesm2015/mtxGrid.mjs.map +1 -1
  30. package/fesm2015/mtxSelect.mjs +18 -21
  31. package/fesm2015/mtxSelect.mjs.map +1 -1
  32. package/fesm2015/mtxTooltip.mjs +11 -12
  33. package/fesm2015/mtxTooltip.mjs.map +1 -1
  34. package/fesm2020/mtxCore.mjs +17 -5
  35. package/fesm2020/mtxCore.mjs.map +1 -1
  36. package/fesm2020/mtxDatetimepicker.mjs +6 -6
  37. package/fesm2020/mtxDatetimepicker.mjs.map +1 -1
  38. package/fesm2020/mtxGrid.mjs +184 -67
  39. package/fesm2020/mtxGrid.mjs.map +1 -1
  40. package/fesm2020/mtxSelect.mjs +18 -21
  41. package/fesm2020/mtxSelect.mjs.map +1 -1
  42. package/fesm2020/mtxTooltip.mjs +11 -12
  43. package/fesm2020/mtxTooltip.mjs.map +1 -1
  44. package/grid/_grid-theme.scss +5 -5
  45. package/grid/cell.d.ts +15 -12
  46. package/grid/grid-module.d.ts +20 -19
  47. package/grid/grid-pipes.d.ts +31 -0
  48. package/grid/grid-utils.d.ts +18 -3
  49. package/grid/grid.d.ts +14 -13
  50. package/grid/interfaces.d.ts +1 -1
  51. package/grid/public-api.d.ts +1 -0
  52. package/loader/_loader-theme.scss +1 -1
  53. package/package.json +1 -1
  54. package/select/select.d.ts +9 -8
  55. package/split/_split-theme.scss +1 -1
  56. package/tooltip/tooltip-module.d.ts +3 -2
  57. package/tooltip/tooltip.d.ts +0 -1
@@ -406,12 +406,12 @@ export class MtxTime {
406
406
  }
407
407
  }
408
408
  /** @nocollapse */ MtxTime.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MtxTime, deps: [{ token: i1.DatetimeAdapter }, { token: i0.ChangeDetectorRef }, { token: i2.MtxDatetimepickerIntl }], target: i0.ɵɵFactoryTarget.Component });
409
- /** @nocollapse */ MtxTime.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: MtxTime, selector: "mtx-time", inputs: { dateFilter: "dateFilter", interval: "interval", twelvehour: "twelvehour", AMPM: "AMPM", activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", clockView: "clockView" }, outputs: { selectedChange: "selectedChange", activeDateChange: "activeDateChange", _userSelection: "_userSelection", ampmChange: "ampmChange", clockViewChange: "clockViewChange" }, host: { classAttribute: "mtx-time" }, viewQueries: [{ propertyName: "hourInputElement", first: true, predicate: ["hourInput"], descendants: true, read: (ElementRef) }, { propertyName: "hourInputDirective", first: true, predicate: ["hourInput"], descendants: true, read: MtxTimeInput }, { propertyName: "minuteInputElement", first: true, predicate: ["minuteInput"], descendants: true, read: (ElementRef) }, { propertyName: "minuteInputDirective", first: true, predicate: ["minuteInput"], descendants: true, read: MtxTimeInput }], exportAs: ["mtxTime"], usesOnChanges: true, ngImport: i0, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}.mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MtxClock, selector: "mtx-clock", inputs: ["dateFilter", "interval", "twelvehour", "AMPM", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["selectedChange", "activeDateChange", "_userSelection"], exportAs: ["mtxClock"] }, { kind: "directive", type: MtxTimeInput, selector: "input.mtx-time-input", inputs: ["timeInterval", "timeMin", "timeMax", "timeValue"], outputs: ["timeValueChanged"], exportAs: ["mtxTimeInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
409
+ /** @nocollapse */ MtxTime.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: MtxTime, selector: "mtx-time", inputs: { dateFilter: "dateFilter", interval: "interval", twelvehour: "twelvehour", AMPM: "AMPM", activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", clockView: "clockView" }, outputs: { selectedChange: "selectedChange", activeDateChange: "activeDateChange", _userSelection: "_userSelection", ampmChange: "ampmChange", clockViewChange: "clockViewChange" }, host: { classAttribute: "mtx-time" }, viewQueries: [{ propertyName: "hourInputElement", first: true, predicate: ["hourInput"], descendants: true, read: (ElementRef) }, { propertyName: "hourInputDirective", first: true, predicate: ["hourInput"], descendants: true, read: MtxTimeInput }, { propertyName: "minuteInputElement", first: true, predicate: ["minuteInput"], descendants: true, read: (ElementRef) }, { propertyName: "minuteInputDirective", first: true, predicate: ["minuteInput"], descendants: true, read: MtxTimeInput }], exportAs: ["mtxTime"], usesOnChanges: true, ngImport: i0, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{--mdc-typography-button-font-weight: 400;flex:1;width:40px;min-width:auto;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}.mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MtxClock, selector: "mtx-clock", inputs: ["dateFilter", "interval", "twelvehour", "AMPM", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["selectedChange", "activeDateChange", "_userSelection"], exportAs: ["mtxClock"] }, { kind: "directive", type: MtxTimeInput, selector: "input.mtx-time-input", inputs: ["timeInterval", "timeMin", "timeMax", "timeValue"], outputs: ["timeValueChanged"], exportAs: ["mtxTimeInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
410
410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MtxTime, decorators: [{
411
411
  type: Component,
412
412
  args: [{ selector: 'mtx-time', exportAs: 'mtxTime', host: {
413
413
  class: 'mtx-time',
414
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}.mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"] }]
414
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{--mdc-typography-button-font-weight: 400;flex:1;width:40px;min-width:auto;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}.mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mtx-time-button-wrapper .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"] }]
415
415
  }], ctorParameters: function () { return [{ type: i1.DatetimeAdapter }, { type: i0.ChangeDetectorRef }, { type: i2.MtxDatetimepickerIntl }]; }, propDecorators: { selectedChange: [{
416
416
  type: Output
417
417
  }], activeDateChange: [{
@@ -453,4 +453,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
453
453
  }], clockView: [{
454
454
  type: Input
455
455
  }] } });
456
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsb0JBQW9CLEdBRXJCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFRdkIsU0FBUyxHQUFHLENBQUMsR0FBZ0IsRUFBRSxJQUFZO0lBQ3pDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUk7UUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFVRCxNQUFNLE9BQU8sWUFBWTtJQW9DdkIsWUFBb0IsT0FBbUIsRUFBVSxHQUFzQjtRQUFuRCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQi9ELGNBQVMsR0FBVyxDQUFDLENBQUM7UUFNdEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQU1ULFNBQUksR0FBRyxRQUFRLENBQUM7UUFXZCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBSXJELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7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QyxNQUFNO2dCQUdFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxnQkFBZ0I7c0JBRHpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUEsVUFBNEIsQ0FBQSxFQUFFO2dCQUlwRCxrQkFBa0I7c0JBRDNCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFJcEMsa0JBQWtCO3NCQUQzQixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBLFVBQTRCLENBQUEsRUFBRTtnQkFJdEQsb0JBQW9CO3NCQUQ3QixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBTzVDLFVBQVU7c0JBRGIsS0FBSztnQkFVRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTUYsVUFBVTtzQkFEYixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVdGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5LFxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcbiAgTnVtYmVySW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BuZy1tYXRlcm8vZXh0ZW5zaW9ucy9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkxpa2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE10eENsb2NrVmlldyB9IGZyb20gJy4vY2xvY2snO1xuaW1wb3J0IHsgTXR4RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1maWx0ZXJ0eXBlJztcbmltcG9ydCB7IE10eERhdGV0aW1lcGlja2VySW50bCB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItaW50bCc7XG5pbXBvcnQgeyBNdHhBTVBNIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci10eXBlcyc7XG5cbmZ1bmN0aW9uIHBhZChudW06IE51bWJlcklucHV0LCBzaXplOiBudW1iZXIpIHtcbiAgbnVtID0gU3RyaW5nKG51bSk7XG4gIHdoaWxlIChudW0ubGVuZ3RoIDwgc2l6ZSkgbnVtID0gJzAnICsgbnVtO1xuICByZXR1cm4gbnVtO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dC5tdHgtdGltZS1pbnB1dCcsXG4gIGhvc3Q6IHtcbiAgICAnKGJsdXIpJzogJ2JsdXIoJGV2ZW50KScsXG4gICAgJyhmb2N1cyknOiAnZm9jdXMoJGV2ZW50KScsXG4gIH0sXG4gIGV4cG9ydEFzOiAnbXR4VGltZUlucHV0Jyxcbn0pXG5leHBvcnQgY2xhc3MgTXR4VGltZUlucHV0IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCd0aW1lSW50ZXJ2YWwnKVxuICBzZXQgdGltZUludGVydmFsKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX2ludGVydmFsID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2ludGVydmFsOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgndGltZU1pbicpXG4gIHNldCB0aW1lTWluKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX21pbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9taW4gPSAwO1xuXG4gIEBJbnB1dCgndGltZU1heCcpXG4gIHNldCB0aW1lTWF4KHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX21heCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9tYXggPSBJbmZpbml0eTtcblxuICBASW5wdXQoJ3RpbWVWYWx1ZScpXG4gIHNldCB0aW1lVmFsdWUodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHRpbWVWYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE51bWJlcklucHV0PigpO1xuXG4gIHByaXZhdGUgX3ZhbHVlOiBOdW1iZXJJbnB1dDtcblxuICBwcml2YXRlIGtleURvd25MaXN0ZW5lciA9IHRoaXMua2V5RG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBrZXlQcmVzc0xpc3RlbmVyID0gdGhpcy5rZXlQcmVzc0hhbmRsZXIuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBpbnB1dEV2ZW50TGlzdGVuZXIgPSB0aGlzLmlucHV0Q2hhbmdlZEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleURvd25MaXN0ZW5lciwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIERvIG5vdCBwYXNzaXZlIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBwcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLmtleVByZXNzTGlzdGVuZXIpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5pbnB1dEV2ZW50TGlzdGVuZXIsIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGFzRm9jdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQ/LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBnZXQgaW5wdXRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICB9XG5cbiAgLy8gV2UgbG9vayBoZXJlIGF0IHRoZSBwbGFjZWhvbGRlciB2YWx1ZSwgYmVjYXVzZSB3ZSB3cml0ZSAnJyBpbnRvIHRoZSB2YWx1ZSBvbiBmb2N1c1xuICAvLyBwbGFjZWhvbGRlciBzaG91bGQgYWx3YXlzIGJlIHVwIHRvIGRhdGUgd2l0aCBcImN1cnJlbnRWYWx1ZVwiXG4gIGdldCB2YWxpZCgpIHtcbiAgICAvLyBBdCB0aGUgc3RhcnQgX3ZhbHVlIGlzIHVuZGVmaW5lZCB0aGVyZWZvcmUgdGhpcyB3b3VsZCByZXN1bHQgaW4gbm90IHZhbGlkIGFuZFxuICAgIC8vIG1ha2UgYSB1Z2x5IHdhcm5pbmcgYm9yZGVyIGFmdGVyd2FyZHMgd2UgY2FuIHNhZmVseSBjaGVja1xuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gU3RyaW5nKHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKTtcblxuICAgICAgLy8gSXQgY2FuIGJlIHRoYXQgY3VycmVudFZhbHVlIGlzIGVtcHR5IGR1ZSB0byB3ZSByZW1vdmluZyB0aGUgdmFsdWUgb24gZm9jdXMsXG4gICAgICAvLyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIHNob3VsZCBjaGVjayBwcmV2aW91cyB2YWx1ZSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHBsYWNlaG9sZGVyXG4gICAgICBpZiAoY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPT0gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPT0gdGhpcy5pbnB1dEVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLnZhbGlkO1xuICB9XG5cbiAgYmx1cigpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMud3JpdGVQbGFjZWhvbGRlcih0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy50aW1lVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB2YWx1ZSB0byBpbnB1dEVsZW1lbnRcbiAgICogQHBhcmFtIHZhbHVlIE51bWJlcklucHV0XG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gcGFkKHZhbHVlLCAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHZhbHVlIHRvIHBsYWNlaG9sZGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBOdW1iZXJJbnB1dFxuICAgKi9cbiAgd3JpdGVQbGFjZWhvbGRlcih2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IHBhZCh2YWx1ZSwgMik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBrZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChTdHJpbmcodGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgICAgdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIHZhbHVlICs9IHRoaXMuX2ludGVydmFsO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgICB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdmFsdWUgLT0gdGhpcy5faW50ZXJ2YWw7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcbiAgICAgICAgdGhpcy50aW1lVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IG5vbiBudW1iZXIgaW5wdXRzIGluIHRoZSBpbnB1dEVsZW1lbnQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIEVudGVyL0JhY2tTcGFjZVxuICAgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmRFdmVudFxuICAgKi9cbiAga2V5UHJlc3NIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleSA/PyBudWxsO1xuICAgIGlmIChpc05hTihOdW1iZXIoa2V5KSkgJiYga2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZEhhbmRsZXIoKSB7XG4gICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcbiAgICB0aGlzLnRpbWVWYWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBjbGFtcElucHV0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50Py52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuaW5wdXRFbGVtZW50Py52YWx1ZSA/PyBudWxsKTtcbiAgICAvLyBpZiB0aGlzLl9taW4gPT09IDAsIHdlIHNob3VsZCBhbGxvdyAwXG4gICAgaWYgKHZhbHVlIHx8ICh0aGlzLl9taW4gPT09IDAgJiYgdmFsdWUgPT09IDApKSB7XG4gICAgICBjb25zdCBjbGFtcGVkVmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgdGhpcy5fbWluKSwgdGhpcy5fbWF4KTtcbiAgICAgIGlmIChjbGFtcGVkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShjbGFtcGVkVmFsdWUpO1xuICAgICAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIoY2xhbXBlZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3ZhbHVlID0gY2xhbXBlZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIG9uIGRlc3RydWN0aW9uXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlEb3duTGlzdGVuZXIpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5rZXlQcmVzc0xpc3RlbmVyKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaW5wdXRFdmVudExpc3RlbmVyKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdHgtdGltZScsXG4gIHRlbXBsYXRlVXJsOiAndGltZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3RpbWUuc2NzcyddLFxuICBleHBvcnRBczogJ210eFRpbWUnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdtdHgtdGltZScsXG4gIH0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhUaW1lPEQ+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIHNlbGVjdGVkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgX3VzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gQU0vUE0gYnV0dG9uIGFyZSBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYW1wbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TXR4QU1QTT4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBBTS9QTSBidXR0b24gYXJlIGNsaWNrZWQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbG9ja1ZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE10eENsb2NrVmlldz4oKTtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZS4gKi9cbiAgQElucHV0KCkgZGF0ZUZpbHRlciE6IChkYXRlOiBELCB0eXBlOiBNdHhEYXRldGltZXBpY2tlckZpbHRlclR5cGUpID0+IGJvb2xlYW47XG5cbiAgLyoqIFN0ZXAgb3ZlciBtaW51dGVzLiAqL1xuICBASW5wdXQoKSBpbnRlcnZhbDogbnVtYmVyID0gMTtcblxuICBAVmlld0NoaWxkKCdob3VySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfSlcbiAgcHJvdGVjdGVkIGhvdXJJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaG91cklucHV0JywgeyByZWFkOiBNdHhUaW1lSW5wdXQgfSlcbiAgcHJvdGVjdGVkIGhvdXJJbnB1dERpcmVjdGl2ZTogTXR4VGltZUlucHV0IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IH0pXG4gIHByb3RlY3RlZCBtaW51dGVJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnbWludXRlSW5wdXQnLCB7IHJlYWQ6IE10eFRpbWVJbnB1dCB9KVxuICBwcm90ZWN0ZWQgbWludXRlSW5wdXREaXJlY3RpdmU6IE10eFRpbWVJbnB1dCB8IHVuZGVmaW5lZDtcblxuICBkYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25MaWtlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayB1c2VzIDEyIGhvdXIgZm9ybWF0LiAqL1xuICBASW5wdXQoKVxuICBnZXQgdHdlbHZlaG91cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdHdlbHZlaG91cjtcbiAgfVxuICBzZXQgdHdlbHZlaG91cih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3R3ZWx2ZWhvdXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3R3ZWx2ZWhvdXIgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgdGltZSBpcyBub3cgaW4gQU0gb3IgUE0uICovXG4gIEBJbnB1dCgpIEFNUE06IE10eEFNUE0gPSAnQU0nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBkaXNwbGF5IGluIHRoaXMgY2xvY2sgdmlldy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKHZhbHVlOiBEKSB7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY2xhbXBEYXRlKHZhbHVlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfYWN0aXZlRGF0ZSE6IEQ7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fYWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fYWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3NlbGVjdGVkITogRCB8IG51bGw7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgc2V0IG1pbkRhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2FkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwcml2YXRlIF9taW5EYXRlITogRCB8IG51bGw7XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xuICB9XG4gIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfbWF4RGF0ZSE6IEQgfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBzaG91bGQgYmUgc3RhcnRlZCBpbiBob3VyIG9yIG1pbnV0ZSB2aWV3LiAqL1xuICBASW5wdXQoKVxuICBnZXQgY2xvY2tWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXc7XG4gIH1cbiAgc2V0IGNsb2NrVmlldyh2YWx1ZTogTXR4Q2xvY2tWaWV3KSB7XG4gICAgdGhpcy5fY2xvY2tWaWV3ID0gdmFsdWU7XG4gIH1cbiAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIGlzIGluIGhvdXIgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2xvY2tWaWV3OiBNdHhDbG9ja1ZpZXcgPSAnaG91cic7XG5cbiAgZ2V0IGlzSG91clZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb2NrVmlldyA9PT0gJ2hvdXInO1xuICB9XG5cbiAgZ2V0IGlzTWludXRlVmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvY2tWaWV3ID09PSAnaG91cic7XG4gIH1cblxuICBnZXQgaG91cigpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgaWYgKHRoaXMudHdlbHZlaG91cikge1xuICAgICAgICByZXR1cm4gJzEyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnMDAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhvdXIgPSBOdW1iZXIodGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSkpO1xuICAgIGlmICghdGhpcy50d2VsdmVob3VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXhXaXRoWmVybyhob3VyKTtcbiAgICB9XG5cbiAgICBpZiAoaG91ciA9PT0gMCkge1xuICAgICAgcmV0dXJuICcxMic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByZWZpeFdpdGhaZXJvKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaW51dGUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJlZml4V2l0aFplcm8odGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcwMCc7XG4gIH1cblxuICBwcmVmaXhXaXRoWmVybyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMTApIHtcbiAgICAgIHJldHVybiAnMCcgKyBTdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgX2RhdGV0aW1lcGlja2VySW50bDogTXR4RGF0ZXRpbWVwaWNrZXJJbnRsXG4gICkge1xuICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGV0aW1lcGlja2VySW50bC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gd2hlbiBjbG9ja1ZpZXcgY2hhbmdlcyBieSBpbnB1dCB3ZSBzaG91bGQgZm9jdXMgdGhlIGNvcnJlY3QgaW5wdXRcbiAgICBpZiAoY2hhbmdlcy5jbG9ja1ZpZXcpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmNsb2NrVmlldy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY2xvY2tWaWV3LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0RWxlbWVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSW5wdXRFbGVtZW50KCk7XG4gIH1cblxuICBmb2N1c0lucHV0RWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy5jbG9ja1ZpZXcgPT09ICdob3VyJykge1xuICAgICAgaWYgKHRoaXMuaG91cklucHV0RWxlbWVudCkge1xuICAgICAgICAodGhpcy5ob3VySW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubWludXRlSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICh0aGlzLm1pbnV0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSG91cklucHV0Q2hhbmdlKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIGNvbnN0IGhvdXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKGhvdXIgfHwgaG91ciA9PT0gMCkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldERhdGUodGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy51cGRhdGVIb3VyRm9yQW1QbShob3VyKSxcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY2xhbXBEYXRlKG5ld1ZhbHVlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuXG4gICAgICAvLyBJZiBwcmV2aW91c2x5IHdlIGRpZCBzZXQgW210eFZhbHVlXT1cIjEzXCIgYW5kIHRoZSBpbnB1dCBjaGFuZ2VkIHRvIDYsIGFuZCB0aGUgY2xhbXBpbmdcbiAgICAgIC8vIHdpbGwgbWFrZSBpdCBcIjEzXCIgYWdhaW4gdGhlbiB0aGUgaG91cklucHV0RGlyZWN0aXZlIHdpbGwgbm90IGhhdmUgYmVlbiB1cGRhdGVkXG4gICAgICAvLyBzaW5jZSBcIjEzXCIgPT09IFwiMTNcIiBzYW1lIHJlZmVyZW5jZSBzbyBubyBjaGFuZ2UgZGV0ZWN0ZWQgYnkgZGlyZWN0bHkgc2V0dGluZyBpdCB3aXRoaW5cbiAgICAgIC8vIHRoaXMgaGFuZGxlciwgd2UgaGFuZGxlIHRoaXMgdXNlY2FzZVxuICAgICAgaWYgKHRoaXMuaG91cklucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuaG91cklucHV0RGlyZWN0aXZlLnRpbWVWYWx1ZSA9IHRoaXMuaG91cjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVIb3VyRm9yQW1QbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnR3ZWx2ZWhvdXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAxLTEyXG4gICAgaWYgKHRoaXMuQU1QTSA9PT0gJ0FNJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLy8gUE1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgfVxuXG4gICAgICAvLyBvdGhlciBjYXNlcywgd2Ugc2hvdWxkIGFkZCAxMiB0byB0aGUgdmFsdWUgYWthIDM6MDAgUE0gPSAzICsgMTIgPSAxNTowMFxuICAgICAgcmV0dXJuIHZhbHVlICsgMTI7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWludXRlSW5wdXRDaGFuZ2UodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgY29uc3QgbWludXRlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChtaW51dGUgfHwgbWludXRlID09PSAwKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldEhvdXIodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICAgIG1pbnV0ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZShuZXdWYWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcblxuICAgICAgLy8gSWYgcHJldmlvdXNseSB3ZSBkaWQgc2V0IFttdHhWYWx1ZV09XCI0MFwiIGFuZCB0aGUgaW5wdXQgY2hhbmdlZCB0byAzMCwgYW5kIHRoZSBjbGFtcGluZ1xuICAgICAgLy8gd2lsbCBtYWtlIGl0IFwiNDBcIiBhZ2FpbiB0aGVuIHRoZSBtaW51dGVJbnB1dERpcmVjdGl2ZSB3aWxsIG5vdCBoYXZlIGJlZW4gdXBkYXRlZFxuICAgICAgLy8gc2luY2UgXCI0MFwiID09PSBcIjQwXCIgc2FtZSByZWZlcmVuY2Ugc28gbm8gY2hhbmdlIGRldGVjdGVkIGJ5IGRpcmVjdGx5IHNldHRpbmcgaXQgd2l0aGluXG4gICAgICAvLyB0aGlzIGhhbmRsZXIsIHdlIGhhbmRsZSB0aGlzIHVzZWNhc2VcbiAgICAgIGlmICh0aGlzLm1pbnV0ZUlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMubWludXRlSW5wdXREaXJlY3RpdmUudGltZVZhbHVlID0gdGhpcy5taW51dGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRm9jdXMoY2xvY2tWaWV3OiBNdHhDbG9ja1ZpZXcpIHtcbiAgICB0aGlzLmNsb2NrVmlldyA9IGNsb2NrVmlldztcbiAgICB0aGlzLmNsb2NrVmlld0NoYW5nZS5lbWl0KGNsb2NrVmlldyk7XG4gIH1cblxuICBfdGltZVNlbGVjdGVkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbG9ja1ZpZXcgPT09ICdob3VyJykge1xuICAgICAgdGhpcy5jbG9ja1ZpZXcgPSAnbWludXRlJztcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuc2VsZWN0ZWQgPSBkYXRlO1xuICB9XG5cbiAgX29uQWN0aXZlRGF0ZUNoYW5nZShkYXRlOiBEKSB7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gIH1cblxuICBoYW5kbGVPaygpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgfVxuICAgIHRoaXMuX3VzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCkge1xuICAgIHRoaXMuX3VzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3R3ZWx2ZWhvdXI6IEJvb2xlYW5JbnB1dDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJtdHgtdGltZS1pbnB1dC13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJtdHgtdGltZS1pbnB1dC1pbm5lclwiPlxuICAgIDxpbnB1dCBjbGFzcz1cIm10eC10aW1lLWlucHV0XCJcbiAgICAgICAgICAgW2NsYXNzLm10eC10aW1lLWlucHV0LWFjdGl2ZV09XCJjbG9ja1ZpZXcgPT09ICdob3VyJ1wiXG4gICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1pbnB1dC13YXJuaW5nXT1cIiFob3VySW5wdXQudmFsaWRcIlxuICAgICAgICAgICAjaG91cklucHV0PVwibXR4VGltZUlucHV0XCJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXG4gICAgICAgICAgIFt0aW1lTWluXT1cInR3ZWx2ZWhvdXIgPyAxIDogMFwiXG4gICAgICAgICAgIFt0aW1lTWF4XT1cInR3ZWx2ZWhvdXIgPyAxMiA6IDIzXCJcbiAgICAgICAgICAgW3RpbWVWYWx1ZV09XCJob3VyXCJcbiAgICAgICAgICAgKHRpbWVWYWx1ZUNoYW5nZWQpPVwiaGFuZGxlSG91cklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoJ2hvdXInKVwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXR4LXRpbWUtc2VwZXJhdG9yXCI+OjwvZGl2PlxuXG4gICAgPGlucHV0IGNsYXNzPVwibXR4LXRpbWUtaW5wdXRcIlxuICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtaW5wdXQtYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ21pbnV0ZSdcIlxuICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtaW5wdXQtd2FybmluZ109XCIhbWludXRlSW5wdXQudmFsaWRcIlxuICAgICAgICAgICAjbWludXRlSW5wdXQ9XCJtdHhUaW1lSW5wdXRcIlxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcbiAgICAgICAgICAgW3RpbWVNaW5dPVwiMFwiXG4gICAgICAgICAgIFt0aW1lTWF4XT1cIjU5XCJcbiAgICAgICAgICAgW3RpbWVWYWx1ZV09XCJtaW51dGVcIlxuICAgICAgICAgICAodGltZVZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVNaW51dGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgW3RpbWVJbnRlcnZhbF09XCJpbnRlcnZhbFwiXG4gICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygnbWludXRlJylcIiAvPlxuXG4gICAgPGRpdiAqbmdJZj1cInR3ZWx2ZWhvdXJcIiBjbGFzcz1cIm10eC10aW1lLWFtcG1cIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtdHgtdGltZS1hbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1hbXBtLWFjdGl2ZV09XCJBTVBNID09PSAnQU0nXCIgYXJpYS1sYWJlbD1cIkFNXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFtcG1DaGFuZ2UuZW1pdCgnQU0nKVwiPkFNPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXR4LXRpbWUtcG1cIlxuICAgICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtYW1wbS1hY3RpdmVdPVwiQU1QTSA9PT0gJ1BNJ1wiIGFyaWEtbGFiZWw9XCJQTVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhbXBtQ2hhbmdlLmVtaXQoJ1BNJylcIj5QTTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bXR4LWNsb2NrIChzZWxlY3RlZENoYW5nZSk9XCJfdGltZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAoYWN0aXZlRGF0ZUNoYW5nZSk9XCJfb25BY3RpdmVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICBbQU1QTV09XCJBTVBNXCJcbiAgICAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgICAgIFtpbnRlcnZhbF09XCJpbnRlcnZhbFwiXG4gICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjbG9ja1ZpZXdcIlxuICAgICAgICAgICBbdHdlbHZlaG91cl09XCJ0d2VsdmVob3VyXCI+XG48L210eC1jbG9jaz5cblxuPGRpdiBjbGFzcz1cIm10eC10aW1lLWJ1dHRvbi13cmFwcGVyXCI+XG4gIDxidXR0b24gY2xhc3M9XCJtdHgtdGltZS1jYW5jZWwtYnV0dG9uXCIgbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCI+XG4gICAge3sgX2RhdGV0aW1lcGlja2VySW50bC5jYW5jZWxMYWJlbCB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBjbGFzcz1cIm10eC10aW1lLW9rLWJ1dHRvblwiIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVPaygpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibWludXRlSW5wdXREaXJlY3RpdmU/LmludmFsaWQgfHwgaG91cklucHV0RGlyZWN0aXZlPy5pbnZhbGlkXCI+XG4gICAge3sgX2RhdGV0aW1lcGlja2VySW50bC5va0xhYmVsIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
456
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsb0JBQW9CLEdBRXJCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFRdkIsU0FBUyxHQUFHLENBQUMsR0FBZ0IsRUFBRSxJQUFZO0lBQ3pDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUk7UUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFVRCxNQUFNLE9BQU8sWUFBWTtJQW9DdkIsWUFBb0IsT0FBbUIsRUFBVSxHQUFzQjtRQUFuRCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQi9ELGNBQVMsR0FBVyxDQUFDLENBQUM7UUFNdEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQU1ULFNBQUksR0FBRyxRQUFRLENBQUM7UUFXZCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBSXJELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7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QyxNQUFNO2dCQUdFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxnQkFBZ0I7c0JBRHpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUEsVUFBNEIsQ0FBQSxFQUFFO2dCQUlwRCxrQkFBa0I7c0JBRDNCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFJcEMsa0JBQWtCO3NCQUQzQixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBLFVBQTRCLENBQUEsRUFBRTtnQkFJdEQsb0JBQW9CO3NCQUQ3QixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBTzVDLFVBQVU7c0JBRGIsS0FBSztnQkFVRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTUYsVUFBVTtzQkFEYixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVdGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5LFxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcbiAgTnVtYmVySW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BuZy1tYXRlcm8vZXh0ZW5zaW9ucy9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkxpa2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE10eENsb2NrVmlldyB9IGZyb20gJy4vY2xvY2snO1xuaW1wb3J0IHsgTXR4RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1maWx0ZXJ0eXBlJztcbmltcG9ydCB7IE10eERhdGV0aW1lcGlja2VySW50bCB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItaW50bCc7XG5pbXBvcnQgeyBNdHhBTVBNIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci10eXBlcyc7XG5cbmZ1bmN0aW9uIHBhZChudW06IE51bWJlcklucHV0LCBzaXplOiBudW1iZXIpIHtcbiAgbnVtID0gU3RyaW5nKG51bSk7XG4gIHdoaWxlIChudW0ubGVuZ3RoIDwgc2l6ZSkgbnVtID0gJzAnICsgbnVtO1xuICByZXR1cm4gbnVtO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dC5tdHgtdGltZS1pbnB1dCcsXG4gIGhvc3Q6IHtcbiAgICAnKGJsdXIpJzogJ2JsdXIoJGV2ZW50KScsXG4gICAgJyhmb2N1cyknOiAnZm9jdXMoJGV2ZW50KScsXG4gIH0sXG4gIGV4cG9ydEFzOiAnbXR4VGltZUlucHV0Jyxcbn0pXG5leHBvcnQgY2xhc3MgTXR4VGltZUlucHV0IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCd0aW1lSW50ZXJ2YWwnKVxuICBzZXQgdGltZUludGVydmFsKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX2ludGVydmFsID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2ludGVydmFsOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgndGltZU1pbicpXG4gIHNldCB0aW1lTWluKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX21pbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9taW4gPSAwO1xuXG4gIEBJbnB1dCgndGltZU1heCcpXG4gIHNldCB0aW1lTWF4KHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX21heCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9tYXggPSBJbmZpbml0eTtcblxuICBASW5wdXQoJ3RpbWVWYWx1ZScpXG4gIHNldCB0aW1lVmFsdWUodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHRpbWVWYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE51bWJlcklucHV0PigpO1xuXG4gIHByaXZhdGUgX3ZhbHVlOiBOdW1iZXJJbnB1dDtcblxuICBwcml2YXRlIGtleURvd25MaXN0ZW5lciA9IHRoaXMua2V5RG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBrZXlQcmVzc0xpc3RlbmVyID0gdGhpcy5rZXlQcmVzc0hhbmRsZXIuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBpbnB1dEV2ZW50TGlzdGVuZXIgPSB0aGlzLmlucHV0Q2hhbmdlZEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleURvd25MaXN0ZW5lciwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIERvIG5vdCBwYXNzaXZlIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBwcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLmtleVByZXNzTGlzdGVuZXIpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5pbnB1dEV2ZW50TGlzdGVuZXIsIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGFzRm9jdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQ/LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBnZXQgaW5wdXRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICB9XG5cbiAgLy8gV2UgbG9vayBoZXJlIGF0IHRoZSBwbGFjZWhvbGRlciB2YWx1ZSwgYmVjYXVzZSB3ZSB3cml0ZSAnJyBpbnRvIHRoZSB2YWx1ZSBvbiBmb2N1c1xuICAvLyBwbGFjZWhvbGRlciBzaG91bGQgYWx3YXlzIGJlIHVwIHRvIGRhdGUgd2l0aCBcImN1cnJlbnRWYWx1ZVwiXG4gIGdldCB2YWxpZCgpIHtcbiAgICAvLyBBdCB0aGUgc3RhcnQgX3ZhbHVlIGlzIHVuZGVmaW5lZCB0aGVyZWZvcmUgdGhpcyB3b3VsZCByZXN1bHQgaW4gbm90IHZhbGlkIGFuZFxuICAgIC8vIG1ha2UgYSB1Z2x5IHdhcm5pbmcgYm9yZGVyIGFmdGVyd2FyZHMgd2UgY2FuIHNhZmVseSBjaGVja1xuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gU3RyaW5nKHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKTtcblxuICAgICAgLy8gSXQgY2FuIGJlIHRoYXQgY3VycmVudFZhbHVlIGlzIGVtcHR5IGR1ZSB0byB3ZSByZW1vdmluZyB0aGUgdmFsdWUgb24gZm9jdXMsXG4gICAgICAvLyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIHNob3VsZCBjaGVjayBwcmV2aW91cyB2YWx1ZSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHBsYWNlaG9sZGVyXG4gICAgICBpZiAoY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPT0gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPT0gdGhpcy5pbnB1dEVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLnZhbGlkO1xuICB9XG5cbiAgYmx1cigpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMud3JpdGVQbGFjZWhvbGRlcih0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy50aW1lVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB2YWx1ZSB0byBpbnB1dEVsZW1lbnRcbiAgICogQHBhcmFtIHZhbHVlIE51bWJlcklucHV0XG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gcGFkKHZhbHVlLCAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHZhbHVlIHRvIHBsYWNlaG9sZGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBOdW1iZXJJbnB1dFxuICAgKi9cbiAgd3JpdGVQbGFjZWhvbGRlcih2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IHBhZCh2YWx1ZSwgMik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBrZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChTdHJpbmcodGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgICAgdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIHZhbHVlICs9IHRoaXMuX2ludGVydmFsO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgICB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdmFsdWUgLT0gdGhpcy5faW50ZXJ2YWw7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcbiAgICAgICAgdGhpcy50aW1lVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IG5vbiBudW1iZXIgaW5wdXRzIGluIHRoZSBpbnB1dEVsZW1lbnQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIEVudGVyL0JhY2tTcGFjZVxuICAgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmRFdmVudFxuICAgKi9cbiAga2V5UHJlc3NIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleSA/PyBudWxsO1xuICAgIGlmIChpc05hTihOdW1iZXIoa2V5KSkgJiYga2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZEhhbmRsZXIoKSB7XG4gICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcbiAgICB0aGlzLnRpbWVWYWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBjbGFtcElucHV0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50Py52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuaW5wdXRFbGVtZW50Py52YWx1ZSA/PyBudWxsKTtcbiAgICAvLyBpZiB0aGlzLl9taW4gPT09IDAsIHdlIHNob3VsZCBhbGxvdyAwXG4gICAgaWYgKHZhbHVlIHx8ICh0aGlzLl9taW4gPT09IDAgJiYgdmFsdWUgPT09IDApKSB7XG4gICAgICBjb25zdCBjbGFtcGVkVmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgdGhpcy5fbWluKSwgdGhpcy5fbWF4KTtcbiAgICAgIGlmIChjbGFtcGVkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShjbGFtcGVkVmFsdWUpO1xuICAgICAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIoY2xhbXBlZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3ZhbHVlID0gY2xhbXBlZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIG9uIGRlc3RydWN0aW9uXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlEb3duTGlzdGVuZXIpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5rZXlQcmVzc0xpc3RlbmVyKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaW5wdXRFdmVudExpc3RlbmVyKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdHgtdGltZScsXG4gIHRlbXBsYXRlVXJsOiAndGltZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3RpbWUuc2NzcyddLFxuICBleHBvcnRBczogJ210eFRpbWUnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdtdHgtdGltZScsXG4gIH0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhUaW1lPEQ+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIHNlbGVjdGVkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgX3VzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gQU0vUE0gYnV0dG9uIGFyZSBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYW1wbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TXR4QU1QTT4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBBTS9QTSBidXR0b24gYXJlIGNsaWNrZWQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbG9ja1ZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE10eENsb2NrVmlldz4oKTtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZS4gKi9cbiAgQElucHV0KCkgZGF0ZUZpbHRlciE6IChkYXRlOiBELCB0eXBlOiBNdHhEYXRldGltZXBpY2tlckZpbHRlclR5cGUpID0+IGJvb2xlYW47XG5cbiAgLyoqIFN0ZXAgb3ZlciBtaW51dGVzLiAqL1xuICBASW5wdXQoKSBpbnRlcnZhbDogbnVtYmVyID0gMTtcblxuICBAVmlld0NoaWxkKCdob3VySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfSlcbiAgcHJvdGVjdGVkIGhvdXJJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaG91cklucHV0JywgeyByZWFkOiBNdHhUaW1lSW5wdXQgfSlcbiAgcHJvdGVjdGVkIGhvdXJJbnB1dERpcmVjdGl2ZTogTXR4VGltZUlucHV0IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IH0pXG4gIHByb3RlY3RlZCBtaW51dGVJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnbWludXRlSW5wdXQnLCB7IHJlYWQ6IE10eFRpbWVJbnB1dCB9KVxuICBwcm90ZWN0ZWQgbWludXRlSW5wdXREaXJlY3RpdmU6IE10eFRpbWVJbnB1dCB8IHVuZGVmaW5lZDtcblxuICBkYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25MaWtlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayB1c2VzIDEyIGhvdXIgZm9ybWF0LiAqL1xuICBASW5wdXQoKVxuICBnZXQgdHdlbHZlaG91cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdHdlbHZlaG91cjtcbiAgfVxuICBzZXQgdHdlbHZlaG91cih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3R3ZWx2ZWhvdXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3R3ZWx2ZWhvdXIgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgdGltZSBpcyBub3cgaW4gQU0gb3IgUE0uICovXG4gIEBJbnB1dCgpIEFNUE06IE10eEFNUE0gPSAnQU0nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBkaXNwbGF5IGluIHRoaXMgY2xvY2sgdmlldy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKHZhbHVlOiBEKSB7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY2xhbXBEYXRlKHZhbHVlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfYWN0aXZlRGF0ZSE6IEQ7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fYWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fYWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3NlbGVjdGVkITogRCB8IG51bGw7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgc2V0IG1pbkRhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2FkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwcml2YXRlIF9taW5EYXRlITogRCB8IG51bGw7XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xuICB9XG4gIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfbWF4RGF0ZSE6IEQgfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBzaG91bGQgYmUgc3RhcnRlZCBpbiBob3VyIG9yIG1pbnV0ZSB2aWV3LiAqL1xuICBASW5wdXQoKVxuICBnZXQgY2xvY2tWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXc7XG4gIH1cbiAgc2V0IGNsb2NrVmlldyh2YWx1ZTogTXR4Q2xvY2tWaWV3KSB7XG4gICAgdGhpcy5fY2xvY2tWaWV3ID0gdmFsdWU7XG4gIH1cbiAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIGlzIGluIGhvdXIgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2xvY2tWaWV3OiBNdHhDbG9ja1ZpZXcgPSAnaG91cic7XG5cbiAgZ2V0IGlzSG91clZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb2NrVmlldyA9PT0gJ2hvdXInO1xuICB9XG5cbiAgZ2V0IGlzTWludXRlVmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvY2tWaWV3ID09PSAnaG91cic7XG4gIH1cblxuICBnZXQgaG91cigpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgaWYgKHRoaXMudHdlbHZlaG91cikge1xuICAgICAgICByZXR1cm4gJzEyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnMDAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhvdXIgPSBOdW1iZXIodGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSkpO1xuICAgIGlmICghdGhpcy50d2VsdmVob3VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXhXaXRoWmVybyhob3VyKTtcbiAgICB9XG5cbiAgICBpZiAoaG91ciA9PT0gMCkge1xuICAgICAgcmV0dXJuICcxMic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByZWZpeFdpdGhaZXJvKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaW51dGUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJlZml4V2l0aFplcm8odGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcwMCc7XG4gIH1cblxuICBwcmVmaXhXaXRoWmVybyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMTApIHtcbiAgICAgIHJldHVybiAnMCcgKyBTdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgX2RhdGV0aW1lcGlja2VySW50bDogTXR4RGF0ZXRpbWVwaWNrZXJJbnRsXG4gICkge1xuICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGV0aW1lcGlja2VySW50bC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gd2hlbiBjbG9ja1ZpZXcgY2hhbmdlcyBieSBpbnB1dCB3ZSBzaG91bGQgZm9jdXMgdGhlIGNvcnJlY3QgaW5wdXRcbiAgICBpZiAoY2hhbmdlcy5jbG9ja1ZpZXcpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmNsb2NrVmlldy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY2xvY2tWaWV3LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0RWxlbWVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSW5wdXRFbGVtZW50KCk7XG4gIH1cblxuICBmb2N1c0lucHV0RWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy5jbG9ja1ZpZXcgPT09ICdob3VyJykge1xuICAgICAgaWYgKHRoaXMuaG91cklucHV0RWxlbWVudCkge1xuICAgICAgICAodGhpcy5ob3VySW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubWludXRlSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICh0aGlzLm1pbnV0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSG91cklucHV0Q2hhbmdlKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIGNvbnN0IGhvdXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKGhvdXIgfHwgaG91ciA9PT0gMCkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldERhdGUodGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy51cGRhdGVIb3VyRm9yQW1QbShob3VyKSxcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY2xhbXBEYXRlKG5ld1ZhbHVlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuXG4gICAgICAvLyBJZiBwcmV2aW91c2x5IHdlIGRpZCBzZXQgW210eFZhbHVlXT1cIjEzXCIgYW5kIHRoZSBpbnB1dCBjaGFuZ2VkIHRvIDYsIGFuZCB0aGUgY2xhbXBpbmdcbiAgICAgIC8vIHdpbGwgbWFrZSBpdCBcIjEzXCIgYWdhaW4gdGhlbiB0aGUgaG91cklucHV0RGlyZWN0aXZlIHdpbGwgbm90IGhhdmUgYmVlbiB1cGRhdGVkXG4gICAgICAvLyBzaW5jZSBcIjEzXCIgPT09IFwiMTNcIiBzYW1lIHJlZmVyZW5jZSBzbyBubyBjaGFuZ2UgZGV0ZWN0ZWQgYnkgZGlyZWN0bHkgc2V0dGluZyBpdCB3aXRoaW5cbiAgICAgIC8vIHRoaXMgaGFuZGxlciwgd2UgaGFuZGxlIHRoaXMgdXNlY2FzZVxuICAgICAgaWYgKHRoaXMuaG91cklucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuaG91cklucHV0RGlyZWN0aXZlLnRpbWVWYWx1ZSA9IHRoaXMuaG91cjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVIb3VyRm9yQW1QbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnR3ZWx2ZWhvdXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAxLTEyXG4gICAgaWYgKHRoaXMuQU1QTSA9PT0gJ0FNJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLy8gUE1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgfVxuXG4gICAgICAvLyBvdGhlciBjYXNlcywgd2Ugc2hvdWxkIGFkZCAxMiB0byB0aGUgdmFsdWUgYWthIDM6MDAgUE0gPSAzICsgMTIgPSAxNTowMFxuICAgICAgcmV0dXJuIHZhbHVlICsgMTI7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWludXRlSW5wdXRDaGFuZ2UodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgY29uc3QgbWludXRlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChtaW51dGUgfHwgbWludXRlID09PSAwKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldEhvdXIodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICAgIG1pbnV0ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZShuZXdWYWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcblxuICAgICAgLy8gSWYgcHJldmlvdXNseSB3ZSBkaWQgc2V0IFttdHhWYWx1ZV09XCI0MFwiIGFuZCB0aGUgaW5wdXQgY2hhbmdlZCB0byAzMCwgYW5kIHRoZSBjbGFtcGluZ1xuICAgICAgLy8gd2lsbCBtYWtlIGl0IFwiNDBcIiBhZ2FpbiB0aGVuIHRoZSBtaW51dGVJbnB1dERpcmVjdGl2ZSB3aWxsIG5vdCBoYXZlIGJlZW4gdXBkYXRlZFxuICAgICAgLy8gc2luY2UgXCI0MFwiID09PSBcIjQwXCIgc2FtZSByZWZlcmVuY2Ugc28gbm8gY2hhbmdlIGRldGVjdGVkIGJ5IGRpcmVjdGx5IHNldHRpbmcgaXQgd2l0aGluXG4gICAgICAvLyB0aGlzIGhhbmRsZXIsIHdlIGhhbmRsZSB0aGlzIHVzZWNhc2VcbiAgICAgIGlmICh0aGlzLm1pbnV0ZUlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMubWludXRlSW5wdXREaXJlY3RpdmUudGltZVZhbHVlID0gdGhpcy5taW51dGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRm9jdXMoY2xvY2tWaWV3OiBNdHhDbG9ja1ZpZXcpIHtcbiAgICB0aGlzLmNsb2NrVmlldyA9IGNsb2NrVmlldztcbiAgICB0aGlzLmNsb2NrVmlld0NoYW5nZS5lbWl0KGNsb2NrVmlldyk7XG4gIH1cblxuICBfdGltZVNlbGVjdGVkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbG9ja1ZpZXcgPT09ICdob3VyJykge1xuICAgICAgdGhpcy5jbG9ja1ZpZXcgPSAnbWludXRlJztcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuc2VsZWN0ZWQgPSBkYXRlO1xuICB9XG5cbiAgX29uQWN0aXZlRGF0ZUNoYW5nZShkYXRlOiBEKSB7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gIH1cblxuICBoYW5kbGVPaygpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgfVxuICAgIHRoaXMuX3VzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCkge1xuICAgIHRoaXMuX3VzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3R3ZWx2ZWhvdXI6IEJvb2xlYW5JbnB1dDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJtdHgtdGltZS1pbnB1dC13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJtdHgtdGltZS1pbnB1dC1pbm5lclwiPlxuICAgIDxpbnB1dCBjbGFzcz1cIm10eC10aW1lLWlucHV0XCJcbiAgICAgICAgICAgW2NsYXNzLm10eC10aW1lLWlucHV0LWFjdGl2ZV09XCJjbG9ja1ZpZXcgPT09ICdob3VyJ1wiXG4gICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1pbnB1dC13YXJuaW5nXT1cIiFob3VySW5wdXQudmFsaWRcIlxuICAgICAgICAgICAjaG91cklucHV0PVwibXR4VGltZUlucHV0XCJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXG4gICAgICAgICAgIFt0aW1lTWluXT1cInR3ZWx2ZWhvdXIgPyAxIDogMFwiXG4gICAgICAgICAgIFt0aW1lTWF4XT1cInR3ZWx2ZWhvdXIgPyAxMiA6IDIzXCJcbiAgICAgICAgICAgW3RpbWVWYWx1ZV09XCJob3VyXCJcbiAgICAgICAgICAgKHRpbWVWYWx1ZUNoYW5nZWQpPVwiaGFuZGxlSG91cklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoJ2hvdXInKVwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXR4LXRpbWUtc2VwZXJhdG9yXCI+OjwvZGl2PlxuXG4gICAgPGlucHV0IGNsYXNzPVwibXR4LXRpbWUtaW5wdXRcIlxuICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtaW5wdXQtYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ21pbnV0ZSdcIlxuICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtaW5wdXQtd2FybmluZ109XCIhbWludXRlSW5wdXQudmFsaWRcIlxuICAgICAgICAgICAjbWludXRlSW5wdXQ9XCJtdHhUaW1lSW5wdXRcIlxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcbiAgICAgICAgICAgW3RpbWVNaW5dPVwiMFwiXG4gICAgICAgICAgIFt0aW1lTWF4XT1cIjU5XCJcbiAgICAgICAgICAgW3RpbWVWYWx1ZV09XCJtaW51dGVcIlxuICAgICAgICAgICAodGltZVZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVNaW51dGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgW3RpbWVJbnRlcnZhbF09XCJpbnRlcnZhbFwiXG4gICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygnbWludXRlJylcIiAvPlxuXG4gICAgPGRpdiAqbmdJZj1cInR3ZWx2ZWhvdXJcIiBjbGFzcz1cIm10eC10aW1lLWFtcG1cIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtdHgtdGltZS1hbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1hbXBtLWFjdGl2ZV09XCJBTVBNID09PSAnQU0nXCIgYXJpYS1sYWJlbD1cIkFNXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFtcG1DaGFuZ2UuZW1pdCgnQU0nKVwiPkFNPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXR4LXRpbWUtcG1cIlxuICAgICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtYW1wbS1hY3RpdmVdPVwiQU1QTSA9PT0gJ1BNJ1wiIGFyaWEtbGFiZWw9XCJQTVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhbXBtQ2hhbmdlLmVtaXQoJ1BNJylcIj5QTTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bXR4LWNsb2NrIChzZWxlY3RlZENoYW5nZSk9XCJfdGltZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAoYWN0aXZlRGF0ZUNoYW5nZSk9XCJfb25BY3RpdmVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICBbQU1QTV09XCJBTVBNXCJcbiAgICAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgICAgIFtpbnRlcnZhbF09XCJpbnRlcnZhbFwiXG4gICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjbG9ja1ZpZXdcIlxuICAgICAgICAgICBbdHdlbHZlaG91cl09XCJ0d2VsdmVob3VyXCI+XG48L210eC1jbG9jaz5cblxuPGRpdiBjbGFzcz1cIm10eC10aW1lLWJ1dHRvbi13cmFwcGVyXCI+XG4gIDxidXR0b24gY2xhc3M9XCJtdHgtdGltZS1jYW5jZWwtYnV0dG9uXCIgbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCI+XG4gICAge3sgX2RhdGV0aW1lcGlja2VySW50bC5jYW5jZWxMYWJlbCB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBjbGFzcz1cIm10eC10aW1lLW9rLWJ1dHRvblwiIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVPaygpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibWludXRlSW5wdXREaXJlY3RpdmU/LmludmFsaWQgfHwgaG91cklucHV0RGlyZWN0aXZlPy5pbnZhbGlkXCI+XG4gICAge3sgX2RhdGV0aW1lcGlja2VySW50bC5va0xhYmVsIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
@@ -1,5 +1,4 @@
1
- import { Component, Input, ViewEncapsulation } from '@angular/core';
2
- import { isObservable } from 'rxjs';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
3
2
  import PhotoViewer from 'photoviewer';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@ng-matero/extensions/dialog";
@@ -10,10 +9,13 @@ import * as i5 from "@angular/material/chips";
10
9
  import * as i6 from "@angular/material/tooltip";
11
10
  import * as i7 from "@angular/material/icon";
12
11
  import * as i8 from "@ng-matero/extensions/core";
12
+ import * as i9 from "./grid-pipes";
13
13
  export class MtxGridCell {
14
- constructor(_dialog, _utils) {
14
+ constructor(_dialog, _utils, _differs, _changeDetectorRef) {
15
15
  this._dialog = _dialog;
16
16
  this._utils = _utils;
17
+ this._differs = _differs;
18
+ this._changeDetectorRef = _changeDetectorRef;
17
19
  /** Row data */
18
20
  this.rowData = {};
19
21
  /** Table data */
@@ -22,32 +24,34 @@ export class MtxGridCell {
22
24
  this.summary = false;
23
25
  /** Placeholder for the empty value (`null`, `''`, `[]`) */
24
26
  this.placeholder = '--';
27
+ this.rowDataChange = new EventEmitter();
25
28
  }
26
- get _colValue() {
29
+ get _value() {
27
30
  return this._utils.getCellValue(this.rowData, this.colDef);
28
31
  }
29
- _isEmptyValue(value) {
30
- return value == null || value.toString() === '';
32
+ ngOnInit() {
33
+ this.rowDataDiffer = this._differs.find(this.rowData).create();
31
34
  }
32
- _isContainHTML(value) {
33
- return /<\/?[a-z][\s\S]*>/i.test(value);
35
+ ngDoCheck() {
36
+ const changes = this.rowDataDiffer?.diff(this.rowData);
37
+ if (changes) {
38
+ this._applyChanges(changes);
39
+ }
40
+ }
41
+ _applyChanges(changes) {
42
+ changes.forEachChangedItem(record => {
43
+ this._changeDetectorRef.markForCheck();
44
+ this.rowDataChange.emit(record);
45
+ });
34
46
  }
35
47
  _getText(value) {
36
- return value === undefined ? '' : this._isEmptyValue(value) ? this.placeholder : value;
48
+ return value === undefined ? '' : this._utils.isEmpty(value) ? this.placeholder : value;
37
49
  }
38
50
  _getTooltip(value) {
39
- return this._isEmptyValue(value) ? '' : value;
51
+ return this._utils.isEmpty(value) ? '' : value;
40
52
  }
41
53
  _getFormatterTooltip(value) {
42
- return this._isContainHTML(value) || this._isEmptyValue(value) ? '' : value;
43
- }
44
- _formatSummary(data, colDef) {
45
- if (typeof colDef.summary === 'string') {
46
- return colDef.summary;
47
- }
48
- else if (typeof colDef.summary === 'function') {
49
- return colDef.summary(this._utils.getColData(data, colDef), colDef);
50
- }
54
+ return this._utils.isContainHTML(value) || this._utils.isEmpty(value) ? '' : value;
51
55
  }
52
56
  _onActionClick(event, btn, rowData) {
53
57
  event.preventDefault();
@@ -74,27 +78,6 @@ export class MtxGridCell {
74
78
  btn.click?.(rowData);
75
79
  }
76
80
  }
77
- _getActionTooltip(btn) {
78
- if (typeof btn.tooltip === 'string' || isObservable(btn.tooltip)) {
79
- return {
80
- message: btn.tooltip,
81
- };
82
- }
83
- else {
84
- return btn.tooltip;
85
- }
86
- }
87
- _isActionDisabled(btn, rowData) {
88
- if (typeof btn.disabled === 'boolean') {
89
- return btn.disabled;
90
- }
91
- else if (typeof btn.disabled === 'function') {
92
- return btn.disabled(rowData);
93
- }
94
- else {
95
- return false;
96
- }
97
- }
98
81
  /** Preview enlarged image */
99
82
  _onImagePreview(urlStr) {
100
83
  const imgs = [];
@@ -111,12 +94,12 @@ export class MtxGridCell {
111
94
  const photoviewer = new PhotoViewer(imgs, options);
112
95
  }
113
96
  }
114
- /** @nocollapse */ MtxGridCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MtxGridCell, deps: [{ token: i1.MtxDialog }, { token: i2.MtxGridUtils }], target: i0.ɵɵFactoryTarget.Component });
115
- /** @nocollapse */ MtxGridCell.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: MtxGridCell, selector: "mtx-grid-cell", inputs: { rowData: "rowData", colDef: "colDef", data: "data", summary: "summary", placeholder: "placeholder" }, exportAs: ["mtxGridCell"], ngImport: i0, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(_formatSummary(data, colDef))\"\r\n [innerHTML]=\"_getText(_formatSummary(data, colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_colValue]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_colValue].color]\">\r\n {{colDef.tag[_colValue].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_colValue}}</ng-template>\r\n </ng-container>\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container *ngFor=\"let btn of colDef.buttons;\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <button *ngIf=\"btn.type==='basic'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"_isActionDisabled(btn, rowData)\"\r\n [matTooltip]=\"_getActionTooltip(btn)?.message | toObservable | async\"\r\n [matTooltipClass]=\"_getActionTooltip(btn)?.class\"\r\n [matTooltipHideDelay]=\"_getActionTooltip(btn)?.hideDelay\"\r\n [matTooltipShowDelay]=\"_getActionTooltip(btn)?.showDelay\"\r\n [matTooltipPosition]=\"_getActionTooltip(btn)?.position || 'below'\"\r\n [matTooltipTouchGestures]=\"_getActionTooltip(btn)?.touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n <button *ngIf=\"!btn.type || btn.type==='icon'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-icon-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"_isActionDisabled(btn, rowData)\"\r\n [matTooltip]=\"_getActionTooltip(btn)?.message | toObservable | async\"\r\n [matTooltipClass]=\"_getActionTooltip(btn)?.class\"\r\n [matTooltipHideDelay]=\"_getActionTooltip(btn)?.hideDelay\"\r\n [matTooltipShowDelay]=\"_getActionTooltip(btn)?.showDelay\"\r\n [matTooltipPosition]=\"_getActionTooltip(btn)?.position || 'below'\"\r\n [matTooltipTouchGestures]=\"_getActionTooltip(btn)?.touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_colValue\" target=\"_blank\">{{_colValue}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_colValue\" (click)=\"_onImagePreview(_colValue)\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_colValue)\">{{_getText(_colValue)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_colValue | number: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | number: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_colValue | currency: colDef.typeParameter?.currencyCode :\r\n colDef.typeParameter?.display :\r\n colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | currency: colDef.typeParameter?.currencyCode :\r\n colDef.typeParameter?.display :\r\n colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_colValue | percent: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | percent: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_colValue | date: colDef.typeParameter?.format :\r\n colDef.typeParameter?.timezone :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | date: colDef.typeParameter?.format :\r\n colDef.typeParameter?.timezone :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_colValue)\">{{_getText(_colValue)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:block;width:30px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, mat-chip", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "value"], outputs: ["change"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i8.MtxToObservablePipe, name: "toObservable" }], encapsulation: i0.ViewEncapsulation.None });
97
+ /** @nocollapse */ MtxGridCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MtxGridCell, deps: [{ token: i1.MtxDialog }, { token: i2.MtxGridUtils }, { token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
98
+ /** @nocollapse */ MtxGridCell.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: MtxGridCell, selector: "mtx-grid-cell", inputs: { rowData: "rowData", colDef: "colDef", data: "data", summary: "summary", placeholder: "placeholder" }, outputs: { rowDataChange: "rowDataChange" }, exportAs: ["mtxGridCell"], ngImport: i0, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container *ngFor=\"let btn of colDef.buttons;\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <button *ngIf=\"btn.type==='basic'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"(btn | cellActionDisable: rowData)\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n <button *ngIf=\"!btn.type || btn.type==='icon'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-icon-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"(btn | cellActionDisable: rowData)\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_value\" (click)=\"_onImagePreview(_value)\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:block;width:30px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, mat-chip", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "value"], outputs: ["change"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i8.MtxToObservablePipe, name: "toObservable" }, { kind: "pipe", type: i9.MtxGridCellActionTooltipPipe, name: "cellActionTooltip" }, { kind: "pipe", type: i9.MtxGridCellActionDisablePipe, name: "cellActionDisable" }, { kind: "pipe", type: i9.MtxGridCellSummaryPipe, name: "cellSummary" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
116
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MtxGridCell, decorators: [{
117
100
  type: Component,
118
- args: [{ selector: 'mtx-grid-cell', exportAs: 'mtxGridCell', encapsulation: ViewEncapsulation.None, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(_formatSummary(data, colDef))\"\r\n [innerHTML]=\"_getText(_formatSummary(data, colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_colValue]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_colValue].color]\">\r\n {{colDef.tag[_colValue].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_colValue}}</ng-template>\r\n </ng-container>\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container *ngFor=\"let btn of colDef.buttons;\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <button *ngIf=\"btn.type==='basic'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"_isActionDisabled(btn, rowData)\"\r\n [matTooltip]=\"_getActionTooltip(btn)?.message | toObservable | async\"\r\n [matTooltipClass]=\"_getActionTooltip(btn)?.class\"\r\n [matTooltipHideDelay]=\"_getActionTooltip(btn)?.hideDelay\"\r\n [matTooltipShowDelay]=\"_getActionTooltip(btn)?.showDelay\"\r\n [matTooltipPosition]=\"_getActionTooltip(btn)?.position || 'below'\"\r\n [matTooltipTouchGestures]=\"_getActionTooltip(btn)?.touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n <button *ngIf=\"!btn.type || btn.type==='icon'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-icon-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"_isActionDisabled(btn, rowData)\"\r\n [matTooltip]=\"_getActionTooltip(btn)?.message | toObservable | async\"\r\n [matTooltipClass]=\"_getActionTooltip(btn)?.class\"\r\n [matTooltipHideDelay]=\"_getActionTooltip(btn)?.hideDelay\"\r\n [matTooltipShowDelay]=\"_getActionTooltip(btn)?.showDelay\"\r\n [matTooltipPosition]=\"_getActionTooltip(btn)?.position || 'below'\"\r\n [matTooltipTouchGestures]=\"_getActionTooltip(btn)?.touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_colValue\" target=\"_blank\">{{_colValue}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_colValue\" (click)=\"_onImagePreview(_colValue)\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_colValue)\">{{_getText(_colValue)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_colValue | number: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | number: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_colValue | currency: colDef.typeParameter?.currencyCode :\r\n colDef.typeParameter?.display :\r\n colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | currency: colDef.typeParameter?.currencyCode :\r\n colDef.typeParameter?.display :\r\n colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_colValue | percent: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | percent: colDef.typeParameter?.digitsInfo :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_colValue | date: colDef.typeParameter?.format :\r\n colDef.typeParameter?.timezone :\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_colValue | date: colDef.typeParameter?.format :\r\n colDef.typeParameter?.timezone :\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_colValue)\">{{_getText(_colValue)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:block;width:30px;border-radius:4px;cursor:pointer}\n"] }]
119
- }], ctorParameters: function () { return [{ type: i1.MtxDialog }, { type: i2.MtxGridUtils }]; }, propDecorators: { rowData: [{
101
+ args: [{ selector: 'mtx-grid-cell', exportAs: 'mtxGridCell', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container *ngFor=\"let btn of colDef.buttons;\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <button *ngIf=\"btn.type==='basic'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"(btn | cellActionDisable: rowData)\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n <button *ngIf=\"!btn.type || btn.type==='icon'\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class||'']\"\r\n mat-icon-button [color]=\"btn.color || 'primary'\"\r\n [disabled]=\"(btn | cellActionDisable: rowData)\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_value\" (click)=\"_onImagePreview(_value)\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:block;width:30px;border-radius:4px;cursor:pointer}\n"] }]
102
+ }], ctorParameters: function () { return [{ type: i1.MtxDialog }, { type: i2.MtxGridUtils }, { type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { rowData: [{
120
103
  type: Input
121
104
  }], colDef: [{
122
105
  type: Input
@@ -126,5 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
126
109
  type: Input
127
110
  }], placeholder: [{
128
111
  type: Input
112
+ }], rowDataChange: [{
113
+ type: Output
129
114
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZ3JpZC9jZWxsLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9ncmlkL2NlbGwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXBDLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVN0QyxNQUFNLE9BQU8sV0FBVztJQW1EdEIsWUFBb0IsT0FBa0IsRUFBVSxNQUFvQjtRQUFoRCxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQWxEcEUsZUFBZTtRQUNOLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFLM0IsaUJBQWlCO1FBQ1IsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUUxQiwyQkFBMkI7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUV6QiwyREFBMkQ7UUFDbEQsZ0JBQVcsR0FBVyxJQUFJLENBQUM7SUFxQ21DLENBQUM7SUFuQ3hFLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYTtRQUMxQixPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFD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QUFmLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNdHhEaWFsb2cgfSBmcm9tICdAbmctbWF0ZXJvL2V4dGVuc2lvbnMvZGlhbG9nJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNdHhHcmlkQ29sdW1uLCBNdHhHcmlkQ29sdW1uQnV0dG9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE10eEdyaWRVdGlscyB9IGZyb20gJy4vZ3JpZC11dGlscyc7XG5pbXBvcnQgUGhvdG9WaWV3ZXIgZnJvbSAncGhvdG92aWV3ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdHgtZ3JpZC1jZWxsJyxcbiAgZXhwb3J0QXM6ICdtdHhHcmlkQ2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jZWxsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jZWxsLnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTXR4R3JpZENlbGwge1xuICAvKiogUm93IGRhdGEgKi9cbiAgQElucHV0KCkgcm93RGF0YTogYW55ID0ge307XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9uICovXG4gIEBJbnB1dCgpIGNvbERlZiE6IE10eEdyaWRDb2x1bW47XG5cbiAgLyoqIFRhYmxlIGRhdGEgKi9cbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcblxuICAvKiogV2hldGhlciBzaG93IHN1bW1hcnkgKi9cbiAgQElucHV0KCkgc3VtbWFyeSA9IGZhbHNlO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIGVtcHR5IHZhbHVlIChgbnVsbGAsIGAnJ2AsIGBbXWApICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnLS0nO1xuXG4gIGdldCBfY29sVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3V0aWxzLmdldENlbGxWYWx1ZSh0aGlzLnJvd0RhdGEsIHRoaXMuY29sRGVmKTtcbiAgfVxuXG4gIF9pc0VtcHR5VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLnRvU3RyaW5nKCkgPT09ICcnO1xuICB9XG5cbiAgX2lzQ29udGFpbkhUTUwodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiAvPFxcLz9bYS16XVtcXHNcXFNdKj4vaS50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIF9nZXRUZXh0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcy5faXNFbXB0eVZhbHVlKHZhbHVlKSA/IHRoaXMucGxhY2Vob2xkZXIgOiB2YWx1ZTtcbiAgfVxuXG4gIF9nZXRUb29sdGlwKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5faXNFbXB0eVZhbHVlKHZhbHVlKSA/ICcnIDogdmFsdWU7XG4gIH1cblxuICBfZ2V0Rm9ybWF0dGVyVG9vbHRpcCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29udGFpbkhUTUwodmFsdWUpIHx8IHRoaXMuX2lzRW1wdHlWYWx1ZSh2YWx1ZSkgPyAnJyA6IHZhbHVlO1xuICB9XG5cbiAgX2Zvcm1hdFN1bW1hcnkoZGF0YTogYW55W10sIGNvbERlZjogTXR4R3JpZENvbHVtbikge1xuICAgIGlmICh0eXBlb2YgY29sRGVmLnN1bW1hcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gY29sRGVmLnN1bW1hcnk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29sRGVmLnN1bW1hcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAoY29sRGVmLnN1bW1hcnkgYXMgKGRhdGE6IGFueVtdLCBjb2xEZWY/OiBNdHhHcmlkQ29sdW1uKSA9PiBhbnkpKFxuICAgICAgICB0aGlzLl91dGlscy5nZXRDb2xEYXRhKGRhdGEsIGNvbERlZiksXG4gICAgICAgIGNvbERlZlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaWFsb2c6IE10eERpYWxvZywgcHJpdmF0ZSBfdXRpbHM6IE10eEdyaWRVdGlscykge31cblxuICBfb25BY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYnRuOiBNdHhHcmlkQ29sdW1uQnV0dG9uLCByb3dEYXRhOiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKGJ0bi5wb3ApIHtcbiAgICAgIHRoaXMuX2RpYWxvZy5vcGVuKHtcbiAgICAgICAgdGl0bGU6IGJ0bi5wb3A/LnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogYnRuLnBvcD8uZGVzY3JpcHRpb24sXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogYnRuLnBvcD8ub2tDb2xvciB8fCAncHJpbWFyeScsXG4gICAgICAgICAgICB0ZXh0OiBidG4ucG9wPy5va1RleHQgfHwgJ09LJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJ0bi5jbGljaz8uKHJvd0RhdGEpIHx8IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6IGJ0bi5wb3A/LmNsb3NlQ29sb3IsXG4gICAgICAgICAgICB0ZXh0OiBidG4ucG9wPy5jbG9zZVRleHQgfHwgJ0NMT1NFJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnRuLmNsaWNrPy4ocm93RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgX2dldEFjdGlvblRvb2x0aXAoYnRuOiBNdHhHcmlkQ29sdW1uQnV0dG9uKSB7XG4gICAgaWYgKHR5cGVvZiBidG4udG9vbHRpcCA9PT0gJ3N0cmluZycgfHwgaXNPYnNlcnZhYmxlKGJ0bi50b29sdGlwKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogYnRuLnRvb2x0aXAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnRuLnRvb2x0aXA7XG4gICAgfVxuICB9XG5cbiAgX2lzQWN0aW9uRGlzYWJsZWQoYnRuOiBNdHhHcmlkQ29sdW1uQnV0dG9uLCByb3dEYXRhOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGJ0bi5kaXNhYmxlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gYnRuLmRpc2FibGVkO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJ0bi5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGJ0bi5kaXNhYmxlZChyb3dEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQcmV2aWV3IGVubGFyZ2VkIGltYWdlICovXG4gIF9vbkltYWdlUHJldmlldyh1cmxTdHI6IHN0cmluZykge1xuICAgIGNvbnN0IGltZ3M6IFBob3RvVmlld2VyLkltZ1tdID0gW107XG5cbiAgICB0aGlzLl91dGlscy5zdHIyYXJyKHVybFN0cikuZm9yRWFjaCgodXJsLCBpbmRleCkgPT4ge1xuICAgICAgaW1ncy5wdXNoKHsgdGl0bGU6IGluZGV4ICsgMSArICcnLCBzcmM6IHVybCB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPVxuICAgICAgaW1ncy5sZW5ndGggPiAxXG4gICAgICAgID8gWyd6b29tSW4nLCAnem9vbU91dCcsICdwcmV2JywgJ25leHQnLCAncm90YXRlUmlnaHQnLCAncm90YXRlTGVmdCcsICdhY3R1YWxTaXplJ11cbiAgICAgICAgOiBbJ3pvb21JbicsICd6b29tT3V0JywgJ3JvdGF0ZVJpZ2h0JywgJ3JvdGF0ZUxlZnQnLCAnYWN0dWFsU2l6ZSddO1xuXG4gICAgY29uc3Qgb3B0aW9uczogUGhvdG9WaWV3ZXIuT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiBpbWdzLmxlbmd0aCA+IDEsXG4gICAgICBmb290ZXJUb29sYmFyLFxuICAgIH07XG5cbiAgICBjb25zdCBwaG90b3ZpZXdlciA9IG5ldyBQaG90b1ZpZXdlcihpbWdzLCBvcHRpb25zKTtcbiAgfVxufVxuIiwiPHNwYW4gKm5nSWY9XCJzdW1tYXJ5OyBlbHNlIGN1c3RvbUNlbGxGb3JtYXR0aW5nVHBsXCJcclxuICAgICAgW3RpdGxlXT1cIl9nZXRGb3JtYXR0ZXJUb29sdGlwKF9mb3JtYXRTdW1tYXJ5KGRhdGEsIGNvbERlZikpXCJcclxuICAgICAgW2lubmVySFRNTF09XCJfZ2V0VGV4dChfZm9ybWF0U3VtbWFyeShkYXRhLCBjb2xEZWYpKVwiPlxyXG48L3NwYW4+XHJcblxyXG48IS0tIEN1c3RvbSBmb3JtYXR0aW5nIC0tPlxyXG48bmctdGVtcGxhdGUgI2N1c3RvbUNlbGxGb3JtYXR0aW5nVHBsPlxyXG4gIDxzcGFuICpuZ0lmPVwiY29sRGVmLmZvcm1hdHRlcjsgZWxzZSBkZWZhdWx0Q2VsbEZvcm1hdHRpbmdUcGxcIlxyXG4gICAgICAgIFt0aXRsZV09XCJfZ2V0Rm9ybWF0dGVyVG9vbHRpcChjb2xEZWYuZm9ybWF0dGVyKHJvd0RhdGEsIGNvbERlZikpXCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cIl9nZXRUZXh0KGNvbERlZi5mb3JtYXR0ZXIocm93RGF0YSwgY29sRGVmKSlcIj5cclxuICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERlZmF1bHQgZm9ybWF0dGluZyAtLT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbEZvcm1hdHRpbmdUcGw+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sRGVmLnR5cGVcIj5cclxuICAgIDwhLS0gVGFnIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZydcIj5cclxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggKm5nSWY9XCJjb2xEZWYudGFnICYmIGNvbERlZi50YWdbX2NvbFZhbHVlXTsgZWxzZSB0YWdFbXB0eVRwbFwiPlxyXG4gICAgICAgIDxtYXQtY2hpcCBjb2xvcj1cInByaW1hcnlcIiBbbmdDbGFzc109XCJbJ2JnLScgKyBjb2xEZWYudGFnW19jb2xWYWx1ZV0uY29sb3JdXCI+XHJcbiAgICAgICAgICB7e2NvbERlZi50YWdbX2NvbFZhbHVlXS50ZXh0fX1cclxuICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFnRW1wdHlUcGw+e3tfY29sVmFsdWV9fTwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gQnV0dG9ucyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBjb2xEZWYuYnV0dG9ucztcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJ0bi5paWYgfHwgYnRuLmlpZihyb3dEYXRhKVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi50eXBlPT09J2Jhc2ljJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzc3x8JyddXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfaXNBY3Rpb25EaXNhYmxlZChidG4sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiX2dldEFjdGlvblRvb2x0aXAoYnRuKT8ubWVzc2FnZSB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCJfZ2V0QWN0aW9uVG9vbHRpcChidG4pPy5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIl9nZXRBY3Rpb25Ub29sdGlwKGJ0bik/LmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIl9nZXRBY3Rpb25Ub29sdGlwKGJ0bik/LnNob3dEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiX2dldEFjdGlvblRvb2x0aXAoYnRuKT8ucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCJfZ2V0QWN0aW9uVG9vbHRpcChidG4pPy50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiICpuZ0lmPVwiYnRuLmljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57e2J0bi50ZXh0IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFidG4udHlwZSB8fCBidG4udHlwZT09PSdpY29uJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzc3x8JyddXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9pc0FjdGlvbkRpc2FibGVkKGJ0biwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJfZ2V0QWN0aW9uVG9vbHRpcChidG4pPy5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIl9nZXRBY3Rpb25Ub29sdGlwKGJ0bik/LmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwiX2dldEFjdGlvblRvb2x0aXAoYnRuKT8uaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiX2dldEFjdGlvblRvb2x0aXAoYnRuKT8uc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJfZ2V0QWN0aW9uVG9vbHRpcChidG4pPy5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIl9nZXRBY3Rpb25Ub29sdGlwKGJ0bik/LnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBMaW5rIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCI+XHJcbiAgICAgIDxhIFtocmVmXT1cIl9jb2xWYWx1ZVwiIHRhcmdldD1cIl9ibGFua1wiPnt7X2NvbFZhbHVlfX08L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJtdHgtZ3JpZC1pbWdcIiBbc3JjXT1cIl9jb2xWYWx1ZVwiIChjbGljayk9XCJfb25JbWFnZVByZXZpZXcoX2NvbFZhbHVlKVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEJvb2xlYW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF9jb2xWYWx1ZSlcIj57e19nZXRUZXh0KF9jb2xWYWx1ZSl9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBOdW1iZXIgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX2NvbFZhbHVlIHwgbnVtYmVyOiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbyA6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfY29sVmFsdWUgfCBudW1iZXI6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvIDpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKX19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBDdXJyZW5jeSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF9jb2xWYWx1ZSB8IGN1cnJlbmN5OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uY3VycmVuY3lDb2RlIDpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpc3BsYXkgOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbyA6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfY29sVmFsdWUgfCBjdXJyZW5jeTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmN1cnJlbmN5Q29kZSA6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpc3BsYXkgOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvIDpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKX19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBQZXJjZW50IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3BlcmNlbnQnXCI+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfY29sVmFsdWUgfCBwZXJjZW50OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbyA6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfY29sVmFsdWUgfCBwZXJjZW50OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbyA6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gRGF0ZSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX2NvbFZhbHVlIHwgZGF0ZTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmZvcm1hdCA6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy50aW1lem9uZSA6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfY29sVmFsdWUgfCBkYXRlOiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZm9ybWF0IDpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8udGltZXpvbmUgOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIERlZmF1bHQgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfY29sVmFsdWUpXCI+e3tfZ2V0VGV4dChfY29sVmFsdWUpfX08L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZ3JpZC9jZWxsLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9ncmlkL2NlbGwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7OztBQVV0QyxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDVSxPQUFrQixFQUNsQixNQUFvQixFQUNwQixRQUF5QixFQUN6QixrQkFBcUM7UUFIckMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUEzQi9DLGVBQWU7UUFDTixZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUszQyxpQkFBaUI7UUFDUixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBRTFCLDJCQUEyQjtRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXpCLDJEQUEyRDtRQUNsRCxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUUxQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFhL0MsQ0FBQztJQVRKLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQVNELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMs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RyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO1lBQ2xGLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV2RSxNQUFNLE9BQU8sR0FBd0I7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QixhQUFhO1NBQ2QsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDOzsySEExR1UsV0FBVzsrR0FBWCxXQUFXLDZPQzNCeEIsNG9MQW1IQTsyRkR4RmEsV0FBVztrQkFSdkIsU0FBUzsrQkFDRSxlQUFlLFlBQ2YsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3lMQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEtleVZhbHVlQ2hhbmdlcyxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE10eERpYWxvZyB9IGZyb20gJ0BuZy1tYXRlcm8vZXh0ZW5zaW9ucy9kaWFsb2cnO1xuaW1wb3J0IHsgTXR4R3JpZFV0aWxzIH0gZnJvbSAnLi9ncmlkLXV0aWxzJztcbmltcG9ydCB7IE10eEdyaWRDb2x1bW4sIE10eEdyaWRDb2x1bW5CdXR0b24gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFBob3RvVmlld2VyIGZyb20gJ3Bob3Rvdmlld2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXR4LWdyaWQtY2VsbCcsXG4gIGV4cG9ydEFzOiAnbXR4R3JpZENlbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2VsbC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2VsbC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhHcmlkQ2VsbCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjayB7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICBASW5wdXQoKSByb3dEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9uICovXG4gIEBJbnB1dCgpIGNvbERlZiE6IE10eEdyaWRDb2x1bW47XG5cbiAgLyoqIFRhYmxlIGRhdGEgKi9cbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcblxuICAvKiogV2hldGhlciBzaG93IHN1bW1hcnkgKi9cbiAgQElucHV0KCkgc3VtbWFyeSA9IGZhbHNlO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIGVtcHR5IHZhbHVlIChgbnVsbGAsIGAnJ2AsIGBbXWApICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnLS0nO1xuXG4gIEBPdXRwdXQoKSByb3dEYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSByb3dEYXRhRGlmZmVyPzogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBhbnk+O1xuXG4gIGdldCBfdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3V0aWxzLmdldENlbGxWYWx1ZSh0aGlzLnJvd0RhdGEsIHRoaXMuY29sRGVmKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RpYWxvZzogTXR4RGlhbG9nLFxuICAgIHByaXZhdGUgX3V0aWxzOiBNdHhHcmlkVXRpbHMsXG4gICAgcHJpdmF0ZSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3dEYXRhRGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMucm93RGF0YSkuY3JlYXRlKCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMucm93RGF0YURpZmZlcj8uZGlmZih0aGlzLnJvd0RhdGEpO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICB0aGlzLl9hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlDaGFuZ2VzKGNoYW5nZXM6IEtleVZhbHVlQ2hhbmdlczxzdHJpbmcsIGFueT4pIHtcbiAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShyZWNvcmQgPT4ge1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnJvd0RhdGFDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgIH0pO1xuICB9XG5cbiAgX2dldFRleHQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzLl91dGlscy5pc0VtcHR5KHZhbHVlKSA/IHRoaXMucGxhY2Vob2xkZXIgOiB2YWx1ZTtcbiAgfVxuXG4gIF9nZXRUb29sdGlwKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fdXRpbHMuaXNFbXB0eSh2YWx1ZSkgPyAnJyA6IHZhbHVlO1xuICB9XG5cbiAgX2dldEZvcm1hdHRlclRvb2x0aXAodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl91dGlscy5pc0NvbnRhaW5IVE1MKHZhbHVlKSB8fCB0aGlzLl91dGlscy5pc0VtcHR5KHZhbHVlKSA/ICcnIDogdmFsdWU7XG4gIH1cblxuICBfb25BY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYnRuOiBNdHhHcmlkQ29sdW1uQnV0dG9uLCByb3dEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChidG4ucG9wKSB7XG4gICAgICB0aGlzLl9kaWFsb2cub3Blbih7XG4gICAgICAgIHRpdGxlOiBidG4ucG9wPy50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGJ0bi5wb3A/LmRlc2NyaXB0aW9uLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6IGJ0bi5wb3A/Lm9rQ29sb3IgfHwgJ3ByaW1hcnknLFxuICAgICAgICAgICAgdGV4dDogYnRuLnBvcD8ub2tUZXh0IHx8ICdPSycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBidG4uY2xpY2s/Lihyb3dEYXRhKSB8fCB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiBidG4ucG9wPy5jbG9zZUNvbG9yLFxuICAgICAgICAgICAgdGV4dDogYnRuLnBvcD8uY2xvc2VUZXh0IHx8ICdDTE9TRScsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ0bi5jbGljaz8uKHJvd0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQcmV2aWV3IGVubGFyZ2VkIGltYWdlICovXG4gIF9vbkltYWdlUHJldmlldyh1cmxTdHI6IHN0cmluZykge1xuICAgIGNvbnN0IGltZ3M6IFBob3RvVmlld2VyLkltZ1tdID0gW107XG5cbiAgICB0aGlzLl91dGlscy5zdHIyYXJyKHVybFN0cikuZm9yRWFjaCgodXJsLCBpbmRleCkgPT4ge1xuICAgICAgaW1ncy5wdXNoKHsgdGl0bGU6IGluZGV4ICsgMSArICcnLCBzcmM6IHVybCB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPVxuICAgICAgaW1ncy5sZW5ndGggPiAxXG4gICAgICAgID8gWyd6b29tSW4nLCAnem9vbU91dCcsICdwcmV2JywgJ25leHQnLCAncm90YXRlUmlnaHQnLCAncm90YXRlTGVmdCcsICdhY3R1YWxTaXplJ11cbiAgICAgICAgOiBbJ3pvb21JbicsICd6b29tT3V0JywgJ3JvdGF0ZVJpZ2h0JywgJ3JvdGF0ZUxlZnQnLCAnYWN0dWFsU2l6ZSddO1xuXG4gICAgY29uc3Qgb3B0aW9uczogUGhvdG9WaWV3ZXIuT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiBpbWdzLmxlbmd0aCA+IDEsXG4gICAgICBmb290ZXJUb29sYmFyLFxuICAgIH07XG5cbiAgICBjb25zdCBwaG90b3ZpZXdlciA9IG5ldyBQaG90b1ZpZXdlcihpbWdzLCBvcHRpb25zKTtcbiAgfVxufVxuIiwiPHNwYW4gKm5nSWY9XCJzdW1tYXJ5OyBlbHNlIGN1c3RvbUNlbGxGb3JtYXR0aW5nVHBsXCJcclxuICAgICAgW3RpdGxlXT1cIl9nZXRGb3JtYXR0ZXJUb29sdGlwKChkYXRhIHwgY2VsbFN1bW1hcnk6IGNvbERlZikpXCJcclxuICAgICAgW2lubmVySFRNTF09XCJfZ2V0VGV4dCgoZGF0YSB8IGNlbGxTdW1tYXJ5OiBjb2xEZWYpKVwiPlxyXG48L3NwYW4+XHJcblxyXG48IS0tIEN1c3RvbSBmb3JtYXR0aW5nIC0tPlxyXG48bmctdGVtcGxhdGUgI2N1c3RvbUNlbGxGb3JtYXR0aW5nVHBsPlxyXG4gIDxzcGFuICpuZ0lmPVwiY29sRGVmLmZvcm1hdHRlcjsgZWxzZSBkZWZhdWx0Q2VsbEZvcm1hdHRpbmdUcGxcIlxyXG4gICAgICAgIFt0aXRsZV09XCJfZ2V0Rm9ybWF0dGVyVG9vbHRpcChjb2xEZWYuZm9ybWF0dGVyKHJvd0RhdGEsIGNvbERlZikpXCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cIl9nZXRUZXh0KGNvbERlZi5mb3JtYXR0ZXIocm93RGF0YSwgY29sRGVmKSlcIj5cclxuICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERlZmF1bHQgZm9ybWF0dGluZyAtLT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbEZvcm1hdHRpbmdUcGw+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sRGVmLnR5cGVcIj5cclxuICAgIDwhLS0gVGFnIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZydcIj5cclxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggKm5nSWY9XCJjb2xEZWYudGFnICYmIGNvbERlZi50YWdbX3ZhbHVlXTsgZWxzZSB0YWdFbXB0eVRwbFwiPlxyXG4gICAgICAgIDxtYXQtY2hpcCBjb2xvcj1cInByaW1hcnlcIiBbbmdDbGFzc109XCJbJ2JnLScgKyBjb2xEZWYudGFnW192YWx1ZV0uY29sb3JdXCI+XHJcbiAgICAgICAgICB7e2NvbERlZi50YWdbX3ZhbHVlXS50ZXh0fX1cclxuICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFnRW1wdHlUcGw+e3tfdmFsdWV9fTwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gQnV0dG9ucyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBjb2xEZWYuYnV0dG9ucztcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJ0bi5paWYgfHwgYnRuLmlpZihyb3dEYXRhKVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi50eXBlPT09J2Jhc2ljJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzc3x8JyddXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uIHx8ICdiZWxvdydcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFRvdWNoR2VzdHVyZXNdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiICpuZ0lmPVwiYnRuLmljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57e2J0bi50ZXh0IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFidG4udHlwZSB8fCBidG4udHlwZT09PSdpY29uJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzc3x8JyddXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uRGlzYWJsZTogcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLm1lc3NhZ2UgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5zaG93RGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBMaW5rIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCI+XHJcbiAgICAgIDxhIFtocmVmXT1cIl92YWx1ZVwiIHRhcmdldD1cIl9ibGFua1wiPnt7X3ZhbHVlfX08L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJtdHgtZ3JpZC1pbWdcIiBbc3JjXT1cIl92YWx1ZVwiIChjbGljayk9XCJfb25JbWFnZVByZXZpZXcoX3ZhbHVlKVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEJvb2xlYW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSlcIj57e19nZXRUZXh0KF92YWx1ZSl9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBOdW1iZXIgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgbnVtYmVyOiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbzpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSlcIj5cclxuICAgICAgICB7e19nZXRUZXh0KF92YWx1ZSB8IG51bWJlcjogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gQ3VycmVuY3kgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfdmFsdWUgfCBjdXJyZW5jeTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmN1cnJlbmN5Q29kZTpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpc3BsYXk6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKVwiPlxyXG4gICAgICAgIHt7X2dldFRleHQoX3ZhbHVlIHwgY3VycmVuY3k6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5jdXJyZW5jeUNvZGU6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpc3BsYXk6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gUGVyY2VudCAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwZXJjZW50J1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgcGVyY2VudDogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfdmFsdWUgfCBwZXJjZW50OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbzpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKX19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfdmFsdWUgfCBkYXRlOiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZm9ybWF0OlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8udGltZXpvbmU6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfdmFsdWUgfCBkYXRlOiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZm9ybWF0OlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy50aW1lem9uZTpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKX19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBEZWZhdWx0IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlKVwiPnt7X2dldFRleHQoX3ZhbHVlKX19PC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==