@dereekb/dbx-form 9.24.36 → 9.24.38

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.
@@ -147,6 +147,10 @@ export declare class DbxCalendarScheduleSelectionStore extends ComponentStore<Ca
147
147
  readonly startBeingUsedFromFilter$: Observable<Maybe<boolean>>;
148
148
  readonly dateRange$: Observable<DateRange>;
149
149
  readonly allowedDaysOfWeek$: Observable<Set<DayOfWeek>>;
150
+ readonly isInAllowedDaysOfWeekFunction$: Observable<DecisionFunction<Date | DayOfWeek> & {
151
+ readonly _readValue: (input: Date | DayOfWeek) => DayOfWeek;
152
+ readonly _set: Set<DayOfWeek>;
153
+ }>;
150
154
  readonly scheduleDays$: Observable<Set<DateScheduleDayCode>>;
151
155
  readonly currentTimezone$: Observable<Maybe<TimezoneString>>;
152
156
  readonly effectiveTimezone$: Observable<Maybe<TimezoneString>>;
@@ -3,7 +3,7 @@ import { Component, Inject, Input, ViewChild } from '@angular/core';
3
3
  import { DbxCalendarScheduleSelectionStore } from './calendar.schedule.selection.store';
4
4
  import { DbxCalendarStore } from '@dereekb/dbx-web/calendar';
5
5
  import { FormGroup, FormControl } from '@angular/forms';
6
- import { switchMap, throttleTime, distinctUntilChanged, filter, BehaviorSubject, startWith, of, map, shareReplay } from 'rxjs';
6
+ import { switchMap, throttleTime, distinctUntilChanged, filter, BehaviorSubject, startWith, of, map, shareReplay, combineLatest } from 'rxjs';
7
7
  import { isSameDateDay } from '@dereekb/date';
8
8
  import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
9
9
  import { MatDateRangePicker } from '@angular/material/datepicker';
@@ -81,9 +81,9 @@ export class DbxScheduleSelectionCalendarDateRangeComponent {
81
81
  }), shareReplay(1));
82
82
  this.pickerOpened$ = this._pickerOpened.asObservable();
83
83
  this.defaultDatePickerFilter = () => true;
84
- this.datePickerFilter$ = this.dbxCalendarScheduleSelectionStore.isEnabledFilterDayFunction$.pipe(map((isEnabled) => {
84
+ this.datePickerFilter$ = combineLatest([this.dbxCalendarScheduleSelectionStore.isEnabledFilterDayFunction$, this.dbxCalendarScheduleSelectionStore.isInAllowedDaysOfWeekFunction$]).pipe(map(([isEnabled, isAllowedDayOfWeek]) => {
85
85
  const fn = (date) => {
86
- const result = date ? isEnabled(date) : true;
86
+ const result = date ? isAllowedDayOfWeek(date) && isEnabled(date) : true;
87
87
  return result;
88
88
  };
89
89
  return fn;
@@ -185,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
185
185
  }], required: [{
186
186
  type: Input
187
187
  }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzSSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBOEIsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRyxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFXaEYsTUFBTSxPQUFPLDhDQUE4QztJQTBHekQsWUFBcUIsZ0JBQWtDLEVBQVcsaUNB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S0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVOLGFBQWE7c0JBRFosS0FBSztnQkE4SUYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Vic2NyaXB0aW9uT2JqZWN0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlJztcbmltcG9ydCB7IERieENhbGVuZGFyU3RvcmUgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViL2NhbGVuZGFyJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgQmVoYXZpb3JTdWJqZWN0LCBzdGFydFdpdGgsIE9ic2VydmFibGUsIG9mLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc1NhbWVEYXRlRGF5IH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucywgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZuLCBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcblxuaW50ZXJmYWNlIFJhbmdlVmFsdWUge1xuICBzdGFydD86IE1heWJlPERhdGU+O1xuICBlbmQ/OiBNYXliZTxEYXRlPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5yYW5nZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSByZXF1aXJlZCQgPSB0aGlzLl9yZXF1aXJlZC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgdGltZXpvbmUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudFRpbWV6b25lJDtcblxuICBASW5wdXQoKVxuICBvcGVuUGlja2VyT25UZXh0Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gIHBpY2tlciE6IE1hdERhdGVSYW5nZVBpY2tlcjxEYXRlPjtcblxuICBASW5wdXQoKVxuICBsYWJlbD86IE1heWJlPHN0cmluZz4gPSAnRW50ZXIgYSBkYXRlIHJhbmdlJztcblxuICBASW5wdXQoKVxuICBoaW50PzogTWF5YmU8c3RyaW5nPjtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+KSB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICB0aGlzLnJhbmdlLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYW5nZS5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBzaG93Q3VzdG9taXplID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcGlja2VyT3BlbmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3N5bmNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHJlYWRvbmx5IHJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlciA9IHtcbiAgICBpc0Vycm9yU3RhdGU6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsLCBmb3JtKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQpKSB8fCAoY29udHJvbC50b3VjaGVkICYmIHRoaXMucmFuZ2UuaW52YWxpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IG1pbkRhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWluRGF0ZSQ7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWF4RGF0ZSQ7XG4gIHJlYWRvbmx5IHRpbWV6b25lUmVsZXZlbnREYXRlJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnREYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKChjdXJyZW50RGF0ZVJhbmdlKSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudERhdGVSYW5nZSA/IGN1cnJlbnREYXRlUmFuZ2Uuc3RhcnQgPz8gY3VycmVudERhdGVSYW5nZS5lbmQgOiB1bmRlZmluZWQgPz8gbmV3IERhdGUoKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5pc0N1c3RvbWl6ZWQkO1xuICByZWFkb25seSBjdXJyZW50RXJyb3JNZXNzYWdlJCA9IHRoaXMucmFuZ2Uuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4geCA9PT0gJ0lOVkFMSUQnIHx8IHggPT09ICdWQUxJRCcpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHggPT09ICdJTlZBTElEJykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucmFuZ2UuY29udHJvbHM7XG5cbiAgICAgICAgaWYgKHRoaXMucmFuZ2UuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0RhdGUgcmFuZ2UgaXMgcmVxdWlyZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXRTdGFydERhdGVJbnZhbGlkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0ludmFsaWQgc3RhcnQgZGF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnU3RhcnQgZGF0ZSBpcyB0b28gZWFybHknO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWF4JykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ1N0YXJ0IGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKGVuZC5oYXNFcnJvcignbWF0U3RhcnREYXRlSW52YWxpZCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdJbnZhbGlkIGVuZCBkYXRlJztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNYXgnKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXJyb3JNZXNzYWdlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyT3BlbmVkJCA9IHRoaXMuX3BpY2tlck9wZW5lZC5hc09ic2VydmFibGUoKTtcblxuICByZWFkb25seSBkZWZhdWx0RGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPERhdGU+ID0gKCkgPT4gdHJ1ZTtcbiAgcmVhZG9ubHkgZGF0ZVBpY2tlckZpbHRlciQ6IE9ic2VydmFibGU8RGF0ZUZpbHRlckZuPERhdGU+PiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmlzRW5hYmxlZEZpbHRlckRheUZ1bmN0aW9uJC5waXBlKFxuICAgIG1hcCgoaXNFbmFibGVkKSA9PiB7XG4gICAgICBjb25zdCBmbiA9IChkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRlID8gaXNFbmFibGVkKGRhdGUpIDogdHJ1ZTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGRieENhbGVuZGFyU3RvcmU6IERieENhbGVuZGFyU3RvcmUsIHJlYWRvbmx5IGRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZTogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLCBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUykgcmVhZG9ubHkgbWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnM6IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N5bmNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudElucHV0UmFuZ2UkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5yYW5nZS5zZXRWYWx1ZSh7XG4gICAgICAgIHN0YXJ0OiB4Py5pbnB1dFN0YXJ0ID8/IG51bGwsXG4gICAgICAgIGVuZDogeD8uaW5wdXRFbmQgPz8gbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl92YWx1ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLl9waWNrZXJPcGVuZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKG9wZW5lZCkgPT4ge1xuICAgICAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8UmFuZ2VWYWx1ZT47XG5cbiAgICAgICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgICAgICBvYnMgPSBvZih7fSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9icyA9IHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucmFuZ2UudmFsdWUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb2JzO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCh4KSA9PiBCb29sZWFuKHguc3RhcnQgJiYgeC5lbmQpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGVEYXkoYS5zdGFydCwgYi5zdGFydCkgJiYgaXNTYW1lRGF0ZURheShhLmVuZCwgYi5lbmQpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKDEwMCwgdW5kZWZpbmVkLCB7IHRyYWlsaW5nOiB0cnVlIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnN0YXJ0ICYmIHguZW5kKSB7XG4gICAgICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0SW5wdXRSYW5nZSh7IGlucHV0U3RhcnQ6IHguc3RhcnQsIGlucHV0RW5kOiB4LmVuZCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAvLyBhZGQgYSByZXF1aXJlZCB2YWxpZGF0b3Igd2hlbiBuZWVkZWRcbiAgICB0aGlzLl9yZXF1aXJlZFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLl9yZXF1aXJlZC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB4XG4gICAgICAgID8gW1xuICAgICAgICAgICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2Uuc3RhcnQgfHwgIXJhbmdlLmVuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIDogW107XG5cbiAgICAgIHRoaXMucmFuZ2Uuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcXVpcmVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcGlja2VyT3BlbmVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcmVxdWlyZWRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3N5bmNTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3ZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQudmFsdWU7XG4gIH1cblxuICBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZC5uZXh0KHJlcXVpcmVkKTtcbiAgfVxuXG4gIGNsaWNrZWREYXRlUmFuZ2VJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5vcGVuUGlja2VyT25UZXh0Q2xpY2spIHtcbiAgICAgIHRoaXMucGlja2VyLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwaWNrZXJPcGVuZWQoKSB7XG4gICAgdGhpcy5fcGlja2VyT3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwaWNrZXJDbG9zZWQoKSB7XG4gICAgdGhpcy5fcGlja2VyT3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZmllbGRcIj5cbiAgPG1hdC1sYWJlbCAqbmdJZj1cImxhYmVsXCI+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgPGRpdiBjbGFzcz1cImRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZS1maWVsZC1jb250ZW50XCI+XG4gICAgPCEtLSBQcmltYXJ5IENvbnRlbnQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRieC1mbGV4XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0N1c3RvbWl6ZSAmJiAoaXNDdXN0b21pemVkJCB8IGFzeW5jKVwiIGNsYXNzPVwiZGF0ZS1yYW5nZS1maWVsZC1jdXN0b21pemVkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGJ4LWFjY2VudC1iZyBkYXRlLXJhbmdlLWZpZWxkLWN1c3RvbWl6ZWQtdGV4dFwiPkN1c3RvbTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItYnV0dG9uLWhpZ2hsaWdodFwiIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IChjbGljayk9XCJjbGlja2VkRGF0ZVJhbmdlSW5wdXQoKVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZCQgfCBhc3luY1wiIFtkYXRlRmlsdGVyXT1cIihkYXRlUGlja2VyRmlsdGVyJCB8IGFzeW5jKSA/PyBkZWZhdWx0RGF0ZVBpY2tlckZpbHRlclwiIFtmb3JtR3JvdXBdPVwicmFuZ2VcIiBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCI+XG4gICAgICAgIDxpbnB1dCBbZXJyb3JTdGF0ZU1hdGNoZXJdPVwiZXJyb3JTdGF0ZU1hdGNoZXJcIiBtYXRTdGFydERhdGUgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIiBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIiAvPlxuICAgICAgICA8aW5wdXQgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCIgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgLz5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8c3BhbiAqbmdJZj1cInRpbWV6b25lJCB8IGFzeW5jXCIgY2xhc3M9XCJkYngtZmxleC1iYXIgZGJ4LWZhaW50IGRieC1ub3dyYXAgZGJ4LWljb24tc3BhY2VyXCI+e3sgdGltZXpvbmUkIHwgYXN5bmMgfCB0aW1lem9uZUFiYnJldmlhdGlvbjogKHRpbWV6b25lUmVsZXZlbnREYXRlJCB8IGFzeW5jKSB9fTwvc3Bhbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93Q3VzdG9taXplXCI+XG4gICAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY3VzdG9taXplQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyIChvcGVuZWQpPVwicGlja2VyT3BlbmVkKClcIiAoY2xvc2VkKT1cInBpY2tlckNsb3NlZCgpXCI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBDdXN0b20gQ29udGVudCAtLT5cbiAgICA8ZGl2PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG1hdC1lcnJvciAqbmdJZj1cImN1cnJlbnRFcnJvck1lc3NhZ2UkIHwgYXN5bmNcIj57eyBjdXJyZW50RXJyb3JNZXNzYWdlJCB8IGFzeW5jIH19PC9tYXQtZXJyb3I+XG4gIDxtYXQtaGludD57eyBoaW50IH19PC9tYXQtaGludD5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUosT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQThCLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUcsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7O0FBV2hGLE1BQU0sT0FBTyw4Q0FBOEM7SUF5R3pELFlBQXFCLGdCQUFrQyxFQUFXLGlDQUFvRSxFQUFtRCwwQkFBc0Q7UUFBMU4scUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFXLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBbUM7UUFBbUQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQXhHdk8sY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRS9DLGNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLGNBQVMsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsZ0JBQWdCLENBQUM7UUFHN0UsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBTXRDLFVBQUssR0FBbUIsb0JBQW9CLENBQUM7UUFlN0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFZCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXBELGlCQUFZLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUVwQyxVQUFLLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDN0IsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFjLElBQUksQ0FBQztZQUN6QyxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQWMsSUFBSSxDQUFDO1NBQ3hDLENBQUMsQ0FBQztRQUVNLHNCQUFpQixHQUFzQjtZQUM5QyxZQUFZLEVBQUUsQ0FBQyxPQUErQixFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN0RCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzNHO3FCQUFNO29CQUNMLE9BQU8sS0FBSyxDQUFDO2lCQUNkO1lBQ0gsQ0FBQztTQUNGLENBQUM7UUFFTyxhQUFRLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQztRQUMzRCxhQUFRLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUM1RixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3ZCLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JHLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sa0JBQWEsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsYUFBYSxDQUFDO1FBQ3JFLHlCQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDM0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixJQUFJLG1CQUF1QyxDQUFDO1lBRTVDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFFM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDbkMsbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUNoRCxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQztpQkFDNUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7b0JBQzdDLG1CQUFtQixHQUFHLHlCQUF5QixDQUFDO2lCQUNqRDtxQkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtvQkFDN0MsbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUM5QyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7b0JBQzNDLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDO2lCQUMvQztxQkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtvQkFDM0MsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUM7aUJBQzlDO2FBQ0Y7WUFFRCxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sa0JBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxELDRCQUF1QixHQUF1QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDekQsc0JBQWlCLEdBQW1DLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMU4sR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO2dCQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6RSxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRWdQLENBQUM7SUF2Rm5QLElBQ0ksUUFBUSxDQUFDLFFBQXdCO1FBQ25DLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFrRkQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSTtnQkFDNUIsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSTthQUN6QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhO2FBQzdDLElBQUksQ0FDSCxvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQixJQUFJLEdBQTJCLENBQUM7WUFFaEMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNkO2lCQUFNO2dCQUNMLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNqRTtZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlGLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQ2pEO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNoRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxVQUFVLEdBQUcsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDO29CQUNFLENBQUMsT0FBd0IsRUFBRSxFQUFFO3dCQUMzQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUU1QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7NEJBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7eUJBQzNCO3dCQUVELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7aUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVQLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFFBQWlCO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs0SUE1TFUsOENBQThDLG1HQXlHdUYsOEJBQThCO2dJQXpHbkssOENBQThDLDBWQ3JCM0QsazREQThCQTs0RkRUYSw4Q0FBOEM7a0JBSjFELFNBQVM7K0JBQ0UsNENBQTRDOzswQkE0R21GLE1BQU07MkJBQUMsOEJBQThCOzRDQWxHOUsscUJBQXFCO3NCQURwQixLQUFLO2dCQUlOLE1BQU07c0JBREwsU0FBUzt1QkFBQyxRQUFRO2dCQUluQixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlGLFFBQVE7c0JBRFgsS0FBSztnQkFVTixhQUFhO3NCQURaLEtBQUs7Z0JBNklGLFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbk9iamVjdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5zdG9yZSc7XG5pbXBvcnQgeyBEYnhDYWxlbmRhclN0b3JlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYi9jYWxlbmRhcic7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIEJlaGF2aW9yU3ViamVjdCwgc3RhcnRXaXRoLCBPYnNlcnZhYmxlLCBvZiwgbWFwLCBzaGFyZVJlcGxheSwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNTYW1lRGF0ZURheSB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnMsIE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiwgTWF0RGF0ZVJhbmdlUGlja2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5cbmludGVyZmFjZSBSYW5nZVZhbHVlIHtcbiAgc3RhcnQ/OiBNYXliZTxEYXRlPjtcbiAgZW5kPzogTWF5YmU8RGF0ZT47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24ucmFuZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlUmFuZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3JlcXVpcmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgcmVxdWlyZWQkID0gdGhpcy5fcmVxdWlyZWQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHRpbWV6b25lJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnRUaW1lem9uZSQ7XG5cbiAgQElucHV0KClcbiAgb3BlblBpY2tlck9uVGV4dENsaWNrOiBib29sZWFuID0gdHJ1ZTtcblxuICBAVmlld0NoaWxkKCdwaWNrZXInKVxuICBwaWNrZXIhOiBNYXREYXRlUmFuZ2VQaWNrZXI8RGF0ZT47XG5cbiAgQElucHV0KClcbiAgbGFiZWw/OiBNYXliZTxzdHJpbmc+ID0gJ0VudGVyIGEgZGF0ZSByYW5nZSc7XG5cbiAgQElucHV0KClcbiAgaGludD86IE1heWJlPHN0cmluZz47XG5cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBNYXliZTxib29sZWFuPikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5yYW5nZS5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmFuZ2UuZW5hYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc2hvd0N1c3RvbWl6ZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BpY2tlck9wZW5lZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgX3JlcXVpcmVkU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9zeW5jU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF92YWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICByZWFkb25seSByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKVxuICB9KTtcblxuICByZWFkb25seSBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIgPSB7XG4gICAgaXNFcnJvclN0YXRlOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCwgZm9ybSkgPT4ge1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSkgfHwgKGNvbnRyb2wudG91Y2hlZCAmJiB0aGlzLnJhbmdlLmludmFsaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBtaW5EYXRlJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLm1pbkRhdGUkO1xuICByZWFkb25seSBtYXhEYXRlJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLm1heERhdGUkO1xuICByZWFkb25seSB0aW1lem9uZVJlbGV2ZW50RGF0ZSQgPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5jdXJyZW50RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoY3VycmVudERhdGVSYW5nZSkgPT4ge1xuICAgICAgcmV0dXJuIGN1cnJlbnREYXRlUmFuZ2UgPyBjdXJyZW50RGF0ZVJhbmdlLnN0YXJ0ID8/IGN1cnJlbnREYXRlUmFuZ2UuZW5kIDogdW5kZWZpbmVkID8/IG5ldyBEYXRlKCk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0N1c3RvbWl6ZWQkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuaXNDdXN0b21pemVkJDtcbiAgcmVhZG9ubHkgY3VycmVudEVycm9yTWVzc2FnZSQgPSB0aGlzLnJhbmdlLnN0YXR1c0NoYW5nZXMucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHggPT09ICdJTlZBTElEJyB8fCB4ID09PSAnVkFMSUQnKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGxldCBjdXJyZW50RXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4ID09PSAnSU5WQUxJRCcpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLnJhbmdlLmNvbnRyb2xzO1xuXG4gICAgICAgIGlmICh0aGlzLnJhbmdlLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdEYXRlIHJhbmdlIGlzIHJlcXVpcmVkJztcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydC5oYXNFcnJvcignbWF0U3RhcnREYXRlSW52YWxpZCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdJbnZhbGlkIHN0YXJ0IGRhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWluJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ1N0YXJ0IGRhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydC5oYXNFcnJvcignbWF0RGF0ZXBpY2tlck1heCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdTdGFydCBkYXRlIGlzIHRvbyBsYXRlJztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdFN0YXJ0RGF0ZUludmFsaWQnKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnSW52YWxpZCBlbmQgZGF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZW5kLmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWluJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0VuZCBkYXRlIGlzIHRvbyBlYXJseSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZW5kLmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWF4JykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0VuZCBkYXRlIGlzIHRvbyBsYXRlJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudEVycm9yTWVzc2FnZTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpY2tlck9wZW5lZCQgPSB0aGlzLl9waWNrZXJPcGVuZWQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdERhdGVQaWNrZXJGaWx0ZXI6IERhdGVGaWx0ZXJGbjxEYXRlPiA9ICgpID0+IHRydWU7XG4gIHJlYWRvbmx5IGRhdGVQaWNrZXJGaWx0ZXIkOiBPYnNlcnZhYmxlPERhdGVGaWx0ZXJGbjxEYXRlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5pc0VuYWJsZWRGaWx0ZXJEYXlGdW5jdGlvbiQsIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmlzSW5BbGxvd2VkRGF5c09mV2Vla0Z1bmN0aW9uJF0pLnBpcGUoXG4gICAgbWFwKChbaXNFbmFibGVkLCBpc0FsbG93ZWREYXlPZldlZWtdKSA9PiB7XG4gICAgICBjb25zdCBmbiA9IChkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRlID8gaXNBbGxvd2VkRGF5T2ZXZWVrKGRhdGUpICYmIGlzRW5hYmxlZChkYXRlKSA6IHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZGJ4Q2FsZW5kYXJTdG9yZTogRGJ4Q2FsZW5kYXJTdG9yZSwgcmVhZG9ubHkgZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlOiBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUsIEBJbmplY3QoTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TKSByZWFkb25seSBtYXRGb3JtRmllbGREZWZhdWx0T3B0aW9uczogTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnMpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3luY1N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5jdXJyZW50SW5wdXRSYW5nZSQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLnJhbmdlLnNldFZhbHVlKHtcbiAgICAgICAgc3RhcnQ6IHg/LmlucHV0U3RhcnQgPz8gbnVsbCxcbiAgICAgICAgZW5kOiB4Py5pbnB1dEVuZCA/PyBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuX3BpY2tlck9wZW5lZFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgob3BlbmVkKSA9PiB7XG4gICAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxSYW5nZVZhbHVlPjtcblxuICAgICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICAgIG9icyA9IG9mKHt9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzID0gdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5yYW5nZS52YWx1ZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnM7XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIoKHgpID0+IEJvb2xlYW4oeC5zdGFydCAmJiB4LmVuZCkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZURheShhLnN0YXJ0LCBiLnN0YXJ0KSAmJiBpc1NhbWVEYXRlRGF5KGEuZW5kLCBiLmVuZCkpLFxuICAgICAgICB0aHJvdHRsZVRpbWUoMTAwLCB1bmRlZmluZWQsIHsgdHJhaWxpbmc6IHRydWUgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgaWYgKHguc3RhcnQgJiYgeC5lbmQpIHtcbiAgICAgICAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRJbnB1dFJhbmdlKHsgaW5wdXRTdGFydDogeC5zdGFydCwgaW5wdXRFbmQ6IHguZW5kIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIGFkZCBhIHJlcXVpcmVkIHZhbGlkYXRvciB3aGVuIG5lZWRlZFxuICAgIHRoaXMuX3JlcXVpcmVkU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuX3JlcXVpcmVkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS5zdGFydCB8fCAhcmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXTtcblxuICAgICAgdGhpcy5yYW5nZS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVxdWlyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9waWNrZXJPcGVuZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9yZXF1aXJlZFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fc3luY1N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fdmFsdWVTdWIuZGVzdHJveSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZC52YWx1ZTtcbiAgfVxuXG4gIHNldCByZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkLm5leHQocmVxdWlyZWQpO1xuICB9XG5cbiAgY2xpY2tlZERhdGVSYW5nZUlucHV0KCkge1xuICAgIGlmICh0aGlzLm9wZW5QaWNrZXJPblRleHRDbGljaykge1xuICAgICAgdGhpcy5waWNrZXIub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIHBpY2tlck9wZW5lZCgpIHtcbiAgICB0aGlzLl9waWNrZXJPcGVuZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHBpY2tlckNsb3NlZCgpIHtcbiAgICB0aGlzLl9waWNrZXJPcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZS1maWVsZFwiPlxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlLWZpZWxkLWNvbnRlbnRcIj5cbiAgICA8IS0tIFByaW1hcnkgQ29udGVudCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZsZXhcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93Q3VzdG9taXplICYmIChpc0N1c3RvbWl6ZWQkIHwgYXN5bmMpXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpZWxkLWN1c3RvbWl6ZWRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYngtYWNjZW50LWJnIGRhdGUtcmFuZ2UtZmllbGQtY3VzdG9taXplZC10ZXh0XCI+Q3VzdG9tPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgY2xhc3M9XCJtYXQtZGF0ZXBpY2tlci1idXR0b24taGlnaGxpZ2h0XCIgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgKGNsaWNrKT1cImNsaWNrZWREYXRlUmFuZ2VJbnB1dCgpXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkJCB8IGFzeW5jXCIgW2RhdGVGaWx0ZXJdPVwiKGRhdGVQaWNrZXJGaWx0ZXIkIHwgYXN5bmMpID8/IGRlZmF1bHREYXRlUGlja2VyRmlsdGVyXCIgW2Zvcm1Hcm91cF09XCJyYW5nZVwiIFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIj5cbiAgICAgICAgPGlucHV0IFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvclN0YXRlTWF0Y2hlclwiIG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIC8+XG4gICAgICAgIDxpbnB1dCBbZXJyb3JTdGF0ZU1hdGNoZXJdPVwiZXJyb3JTdGF0ZU1hdGNoZXJcIiBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiAvPlxuICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgIDxzcGFuICpuZ0lmPVwidGltZXpvbmUkIHwgYXN5bmNcIiBjbGFzcz1cImRieC1mbGV4LWJhciBkYngtZmFpbnQgZGJ4LW5vd3JhcCBkYngtaWNvbi1zcGFjZXJcIj57eyB0aW1lem9uZSQgfCBhc3luYyB8IHRpbWV6b25lQWJicmV2aWF0aW9uOiAodGltZXpvbmVSZWxldmVudERhdGUkIHwgYXN5bmMpIH19PC9zcGFuPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDdXN0b21pemVcIj5cbiAgICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjdXN0b21pemVCdXR0b25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIgKG9wZW5lZCk9XCJwaWNrZXJPcGVuZWQoKVwiIChjbG9zZWQpPVwicGlja2VyQ2xvc2VkKClcIj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEN1c3RvbSBDb250ZW50IC0tPlxuICAgIDxkaXY+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWVycm9yICpuZ0lmPVwiY3VycmVudEVycm9yTWVzc2FnZSQgfCBhc3luY1wiPnt7IGN1cnJlbnRFcnJvck1lc3NhZ2UkIHwgYXN5bmMgfX08L21hdC1lcnJvcj5cbiAgPG1hdC1oaW50Pnt7IGhpbnQgfX08L21hdC1oaW50PlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { dateBlockDayOfWeekFactory, dateBlockTimingDateFactory, dateScheduleDateFilter, copyDateScheduleDateFilterConfig, DateScheduleDayCode, dateScheduleEncodedWeek, dateTimingRelativeIndexFactory, expandDateScheduleDayCodes, expandDateScheduleDayCodesToDayOfWeekSet, findMaxDate, findMinDate, isDateInDateRangeFunction, isDateWithinDateBlockRangeFunction, isSameDate, isSameDateDay, isSameDateRange, isSameDateScheduleRange, dateTimingRelativeIndexArrayFactory, isInfiniteDateRange, copyHoursAndMinutesFromDate, dateTimezoneUtcNormal, expandDateScheduleRange, formatToISO8601DayString, dateScheduleDayCodesAreSetsEquivalent, simplifyDateScheduleDayCodes, fullWeekDayScheduleDayCodes, dateBlockTimingStartDateFactory } from '@dereekb/date';
3
3
  import { distinctUntilHasDifferentValues, filterMaybe } from '@dereekb/rxjs';
4
- import { iterableToArray, addToSet, toggleInSet, isIndexNumberInIndexRangeFunction, minAndMaxNumber, range, unique, mergeArrays, removeFromSet, mapValuesToSet } from '@dereekb/util';
4
+ import { iterableToArray, addToSet, toggleInSet, isIndexNumberInIndexRangeFunction, minAndMaxNumber, range, unique, mergeArrays, removeFromSet, mapValuesToSet, isInAllowedDaysOfWeekSet } from '@dereekb/util';
5
5
  import { ComponentStore } from '@ngrx/component-store';
6
6
  import { startOfDay, endOfDay, isBefore } from 'date-fns';
7
7
  import { distinctUntilChanged, map, shareReplay, switchMap, tap, first, combineLatestWith, of } from 'rxjs';
@@ -81,6 +81,7 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
81
81
  map(calendarScheduleStartBeingUsedFromFilter), distinctUntilChanged(), shareReplay(1));
82
82
  this.dateRange$ = this.currentDateRange$.pipe(filterMaybe(), shareReplay(1));
83
83
  this.allowedDaysOfWeek$ = this.state$.pipe(map((x) => x.allowedDaysOfWeek), distinctUntilHasDifferentValues(), shareReplay(1));
84
+ this.isInAllowedDaysOfWeekFunction$ = this.allowedDaysOfWeek$.pipe(map((x) => isInAllowedDaysOfWeekSet(x)), shareReplay(1));
84
85
  this.scheduleDays$ = this.state$.pipe(map((x) => x.effectiveScheduleDays), distinctUntilHasDifferentValues(), shareReplay(1));
85
86
  this.currentTimezone$ = this.state$.pipe(map((x) => x.timezone), distinctUntilChanged(), shareReplay(1));
86
87
  this.effectiveTimezone$ = this.state$.pipe(map((x) => (!calendarScheduleStartBeingUsedFromFilter(x) && x.timezone ? x.timezone : undefined)), distinctUntilChanged(), shareReplay(1));
@@ -527,7 +528,6 @@ export function computeScheduleSelectionValue(state) {
527
528
  export function computeScheduleSelectionRangeAndExclusion(state) {
528
529
  const { start: currentStart, isEnabledDay, isEnabledFilterDay } = state;
529
530
  const dateFactory = dateBlockTimingStartDateFactory({ start: currentStart }, { assertTimingMatchesTimezone: false, useSystemTimezone: true });
530
- // const dateFactory = dateBlockTimingStartDateFactory(changeTimingToSystemTimezone({ start: currentStart }), { useSystemTimezone: true });
531
531
  const dateBlockRange = computeCalendarScheduleSelectionDateBlockRange(state);
532
532
  if (dateBlockRange == null) {
533
533
  return null; // returns null if no items are selected.
@@ -596,4 +596,4 @@ export function computeCalendarScheduleSelectionDateBlockRange(state) {
596
596
  return undefined;
597
597
  }
598
598
  }
599
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFFckIsdUJBQXVCLEVBR3ZCLHdCQUF3QixFQUV4QixxQ0FBcUMsRUFFckMsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFHaEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQTRELGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFZLGVBQWUsRUFBZ0MsS0FBSyxFQUFzQixNQUFNLEVBQUUsV0FBVyxFQUFnQixhQUFhLEVBQXVDLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDblgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUs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QixRQUFRLEdBQUcsU0FBUyxDQUFDO1FBRXJCLDhJQUE4STtRQUM5SSxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07YUFDUDtTQUNGO0tBQ0Y7SUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDeEM7U0FBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIERhdGVCbG9ja0luZGV4LFxuICBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnksXG4gIERhdGVPckRhdGVCbG9ja0luZGV4LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIsXG4gIGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXlDb2RlLFxuICBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSxcbiAgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNTYW1lRGF0ZSxcbiAgaXNTYW1lRGF0ZURheSxcbiAgaXNTYW1lRGF0ZVJhbmdlLFxuICBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUsXG4gIGRhdGVUaW1lem9uZVV0Y05vcm1hbCxcbiAgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsXG4gIGV4cGFuZERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlQmxvY2ssXG4gIERhdGVCbG9ja0R1cmF0aW9uU3BhbixcbiAgZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNBcmVTZXRzRXF1aXZhbGVudCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNTZXRGcm9tRGF5c09mV2VlayxcbiAgc2ltcGxpZnlEYXRlU2NoZWR1bGVEYXlDb2RlcyxcbiAgZnVsbFdlZWtEYXlTY2hlZHVsZURheUNvZGVzLFxuICBkYXRlQmxvY2tUaW1pbmdTdGFydERhdGVGYWN0b3J5LFxuICBndWVzc0N1cnJlbnRUaW1lem9uZSxcbiAgRGF0ZUJsb2NrVGltaW5nU3RhcnRcbn0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzLCBmaWx0ZXJNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgTWF5YmUsIFRpbWV6b25lU3RyaW5nLCBEZWNpc2lvbkZ1bmN0aW9uLCBJdGVyYWJsZU9yVmFsdWUsIGl0ZXJhYmxlVG9BcnJheSwgYWRkVG9TZXQsIHRvZ2dsZUluU2V0LCBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24sIE1heWJlTWFwLCBtaW5BbmRNYXhOdW1iZXIsIHNldHNBcmVFcXVpdmFsZW50LCBEYXlPZldlZWssIHJhbmdlLCBBbGxPck5vbmVTZWxlY3Rpb24sIHVuaXF1ZSwgbWVyZ2VBcnJheXMsIEFycmF5T3JWYWx1ZSwgcmVtb3ZlRnJvbVNldCwgSVNPODYwMURheVN0cmluZywgZmlsdGVyVmFsdWVzVG9TZXQsIG1hcFZhbHVlc1RvU2V0LCBhc0RlY2lzaW9uRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIGVuZE9mRGF5LCBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgZmlyc3QsIGNvbWJpbmVMYXRlc3RXaXRoLCBvZiwgc2NoZWR1bGVkLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5LCBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWUsIGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBJbnB1dCBTdGFydCBEYXRlXG4gICAqL1xuICBpbnB1dFN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogSW5wdXQgRW5kIERhdGVcbiAgICovXG4gIGlucHV0RW5kOiBEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlID0gUGFydGlhbDxNYXliZU1hcDxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgZXh0ZW5kcyBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIFJlYWRvbmx5IHN0YXRlIG9mIHRoZSB2aWV3LlxuICAgKlxuICAgKiBEb2VzIG5vdCBhZmZlY3Qgc3RhdGUgY2hhbmdlcyBkaXJlY3RseSwgYnV0IGluc3RlYWQgYWN0cyBhcyBhIGZsYWcgZm9yIHRoZSBwYXJlbnQgdmlldyB0byBzZXQgYW5kIHRoZSBjb25zdW1pbmcgdmlld3MgdG8gdXBkYXRlIG9uLlxuICAgKi9cbiAgaXNWaWV3UmVhZG9ubHk/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFNldCBvZiB0aGUgZGF5cyBvZiB3ZWVrIHRoYXQgYXJlIGFsbG93ZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIGRlZmF1bHRTY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGRheXMgb2YgdGhlIHNjaGVkdWxlIHRvIG9ubHkgYWxsb3cgc2VsZWN0aW5nIGRheXMgaW4gdGhlIHNjaGVkdWxlLlxuICAgKlxuICAgKiBJZiBmaWx0ZXIuc3RhcnQgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIHRpbWV6b25lIGluIHRoaXMgbm9ybWFsIGlzIGlnbm9yZWQsIGlmIG9uZSBpcyBwcmVzZW50LiBDb252ZXJ0IHRvIHRoZSBzeXN0ZW0gdGltZXpvbmUgZmlyc3QuXG4gICAqL1xuICBmaWx0ZXI/OiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZXhjbHVzaW9ucyB0aGF0IG1heSBub3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbHRlci5cbiAgICovXG4gIGlucHV0RXhjbHVzaW9ucz86IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGNvbXB1dGVkIGV4Y2x1c2lvbnMgZ2l2ZW4gdGhlIGlucHV0IGV4Y2x1c2lvbnMuXG4gICAqL1xuICBjb21wdXRlZEV4Y2x1c2lvbnM/OiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcbiAgLyoqXG4gICAqIFRoZSBtaW4vbWF4IGRhdGUgcmFuZ2UuIFVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBtaW4vbWF4IHZhbHVlLiBXb3JrcyB3aXRoIHRoZSBmaWx0ZXIuIFRoZSBncmVhdGVyL2xlc3NlciBvZiB0aGUgc3RhcnQvZW5kIGRhdGVzIGFyZSB1c2VkIGlmIGJvdGggYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgbWluTWF4RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFN0YXJ0IGRhdGUuIElzIHVwZGF0ZWQgYXMgdGhlIGlucHV0U3RhcnQgaXMgbW9kaWZpZWQgb3IgZmlsdGVyIGlzIHByb3ZpZGVkIHRoYXQgcHJvdmlkZXMgdGhlIHN0YXJ0IGRhdGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRvZGF5IGFuZCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHN0YXJ0OiBEYXRlQmxvY2tUaW1pbmdTdGFydFsnc3RhcnQnXTtcbiAgLyoqXG4gICAqIFRpbWV6b25lIHRvIHVzZS4gT25seSBpbmZsdWVuY2VzIHRoZSBvdXRwdXQgc3RhcnQgZGF0ZS5cbiAgICovXG4gIHRpbWV6b25lPzogTWF5YmU8VGltZXpvbmVTdHJpbmc+O1xuICAvKipcbiAgICogQ3VycmVudCB0aW1lem9uZSBub3JtYWwgd2l0aCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHRpbWV6b25lTm9ybWFsPzogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+O1xuICAvKipcbiAgICogRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5XG4gICAqL1xuICBpbmRleEZhY3Rvcnk6IERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeTtcbiAgLyoqXG4gICAqIEFycmF5IG9mIG1hbnVhbGx5IHNlbGVjdGVkIGRhdGVzIHdpdGhpbiB0aGUgcGlja2VkIHJhbmdlLiBUaGlzIGlzIE5PVCB0aGUgc2V0IG9mIGFsbCBzZWxlY3RlZCBpbmRleGVzIGluIHRlcm1zIG9mIG91dHB1dC5cbiAgICpcbiAgICogVmFsdWVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgXCJpbnB1dFwiIHJhbmdlIGFyZSBjb25zaWRlcmVkIHRvZ2dsZWQgb24sIHdoaWxlIHRob3NlXG4gICAqIHRoYXQgYXJlIHNlbGVjdGVkIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIGNvbnNpZGVyZWQgdG9nZ2xlZCBvZmYuXG4gICAqXG4gICAqIElmIGRhdGVzIGFyZSBzZWxlY3RlZCwgYW5kIHRoZW4gYSByYW5nZSBpcyBzZWxlY3RlZCwgdGhlbiB0aG9zZSBkYXRlcyB3aXRoaW4gdGhlIHJhbmdlIHRoYXQgZmFsbFxuICAgKiB3aXRoaW4gdGhlIHJhbmdlIGFyZSBjbGVhcmVkIGZyb20gc2VsZWN0aW9uLlxuICAgKlxuICAgKiBUaGVzZSBpbmRleGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgZGF0ZS5cbiAgICovXG4gIHRvZ2dsZWRJbmRleGVzOiBTZXQ8RGF0ZUJsb2NrSW5kZXg+O1xuICAvKipcbiAgICogRGF5cyBvZiB0aGUgc2NoZWR1bGUgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBwaWNrZWQuIElmIG5vdCBkZWZpbmVkLCBkZWZhdWx0cyB0byBkZWZhdWx0U2NoZWR1bGVEYXlzLlxuICAgKi9cbiAgc2NoZWR1bGVEYXlzPzogTWF5YmU8U2V0PERhdGVTY2hlZHVsZURheUNvZGU+PjtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IERhdGVTY2hlZHVsZURheUNvZGUgdmFsdWUuXG4gICAqL1xuICBlZmZlY3RpdmVTY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIFNldCBvZiB0aGUgZGF5cyBvZiB3ZWVrIHRoYXQgYXJlIGFsbG93ZWQuIERlcml2ZWQgZnJvbSB0aGUgY3VycmVudCBzY2hlZHVsZSBkYXlzIHZhbHVlLlxuICAgKi9cbiAgYWxsb3dlZERheXNPZldlZWs6IFNldDxEYXlPZldlZWs+O1xuICAvKipcbiAgICpcbiAgICovXG4gIGluZGV4RGF5T2ZXZWVrOiBEYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5O1xuICAvKipcbiAgICogRGVjaXNpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBpcyBlbmFibGVkIGdpdmVuIHRoZSBjdXJyZW50IGZpbHRlci5cbiAgICovXG4gIGlzRW5hYmxlZEZpbHRlckRheTogRGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0aGUgY3VycmVudCBmaWx0ZXIgaW50byBhY2NvdW50LlxuICAgKi9cbiAgaXNFbmFibGVkRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgLyoqXG4gICAqIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkgZm9yIHRoZSB2aWV3LlxuICAgKi9cbiAgY2VsbENvbnRlbnRGYWN0b3J5OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5O1xuICAvKipcbiAgICogQ3VycmVudCBzZWxlY3Rpb24gdmFsdWUuXG4gICAqL1xuICBjdXJyZW50U2VsZWN0aW9uVmFsdWU/OiBNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHRoZSBmaWx0ZXIgYXMgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2UgaW5zdGVhZCBvZiBvcHRpbWl6aW5nIGZvciB0aGUgY3VycmVudCBpbmRleC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyPzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBzZWxlY3Rpb24gc3RhdGUgd2hlbiB0aGUgY2FsZW5kYXIgaXMgcmVzZXQuXG4gICAqL1xuICBpbml0aWFsU2VsZWN0aW9uU3RhdGU/OiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSgpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCBkZWZhdWx0U2NoZWR1bGVEYXlzID0gbmV3IFNldChbRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKTtcbiAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0KGRlZmF1bHRTY2hlZHVsZURheXMpO1xuICBjb25zdCBzdGFydCA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG4gIGNvbnN0IGluZGV4RmFjdG9yeSA9IGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSh7IHN0YXJ0IH0pO1xuICBjb25zdCBpbmRleERheU9mV2VlayA9IGRhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnkoc3RhcnQpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQsXG4gICAgaW5kZXhGYWN0b3J5LFxuICAgIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KCksXG4gICAgZGVmYXVsdFNjaGVkdWxlRGF5cyxcbiAgICBlZmZlY3RpdmVTY2hlZHVsZURheXM6IGRlZmF1bHRTY2hlZHVsZURheXMsXG4gICAgYWxsb3dlZERheXNPZldlZWssXG4gICAgaW5kZXhEYXlPZldlZWssXG4gICAgaXNFbmFibGVkRmlsdGVyRGF5OiAoKSA9PiB0cnVlLFxuICAgIGlzRW5hYmxlZERheTogKCkgPT4gZmFsc2UsXG4gICAgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI6IHRydWUsXG4gICAgY2VsbENvbnRlbnRGYWN0b3J5OiBkZWZhdWx0Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1pbkRhdGUoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogTWF5YmU8RGF0ZT4ge1xuICByZXR1cm4gZmluZE1heERhdGUoW3guZmlsdGVyPy5zdGFydCwgeC5taW5NYXhEYXRlUmFuZ2U/LnN0YXJ0XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWF4RGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWluRGF0ZShbeC5maWx0ZXI/LmVuZCwgeC5taW5NYXhEYXRlUmFuZ2U/LmVuZF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBQYXJ0aWFsPERhdGVSYW5nZT4ge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBjYWxlbmRhclNjaGVkdWxlTWluRGF0ZSh4KSB8fCB1bmRlZmluZWQsXG4gICAgZW5kOiBjYWxlbmRhclNjaGVkdWxlTWF4RGF0ZSh4KSB8fCB1bmRlZmluZWRcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ2NvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyJz4pIHtcbiAgcmV0dXJuIHguY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgJiYgeC5maWx0ZXI/LnN0YXJ0ICE9IG51bGw7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoaW5pdGlhbENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSgpKTtcbiAgfVxuXG4gIC8vIE1BUks6XG4gIHJlYWRvbmx5IHRvZ2dsZVNlbGVjdGlvbiA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMubmV4dFRvZ2dsZVNlbGVjdGlvbiQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIGZpbHRlck1heWJlKCksXG4gICAgICAgICAgdGFwKCh4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbERhdGVzKHgpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICAvLyBNQVJLOiBBY2Nlc3NvcnNcbiAgcmVhZG9ubHkgZmlsdGVyJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmZpbHRlciksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbk1heERhdGVSYW5nZSQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcChjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZVJhbmdlKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IG1pbkRhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5zdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgcmVhZG9ubHkgbWF4RGF0ZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmVuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ICE9IG51bGwgJiYgeC5zdGFydCAhPSBudWxsICYmIHguZW5kICE9IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFN0YXJ0JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0U3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRFbmQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaW5wdXRFbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudElucHV0UmFuZ2UkOiBPYnNlcnZhYmxlPE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSkgPT4gKHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlKGEuaW5wdXRTdGFydCwgYi5pbnB1dFN0YXJ0KSAmJiBpc1NhbWVEYXRlKGEuaW5wdXRFbmQsIGIuaW5wdXRFbmQpKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4LmlucHV0U3RhcnQgJiYgeC5pbnB1dEVuZCkge1xuICAgICAgICByZXR1cm4geCBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRSYW5nZSQ6IE9ic2VydmFibGU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlPiA9IHRoaXMuY3VycmVudElucHV0UmFuZ2UkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBzZWxlY3Rpb24gdmFsdWUuIFRoaXMgaXMgdGhlIHNldCBvZiBtYW51YWxseSB0b2dnZWQgb2ZmIGRhdGVzLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdXBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlcyQ6IE9ic2VydmFibGU8U2V0PERhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50b2dnbGVkSW5kZXhlcyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZEZpbHRlckRheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWRGaWx0ZXJEYXkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0VuYWJsZWREYXlGdW5jdGlvbiQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNFbmFibGVkRGF5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGVSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcChjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZVJhbmdlKGEsIGIpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyJDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgLy9cbiAgICBtYXAoY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZSQ6IE9ic2VydmFibGU8RGF0ZVJhbmdlPiA9IHRoaXMuY3VycmVudERhdGVSYW5nZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgYWxsb3dlZERheXNPZldlZWskOiBPYnNlcnZhYmxlPFNldDxEYXlPZldlZWs+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmFsbG93ZWREYXlzT2ZXZWVrKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzY2hlZHVsZURheXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5lZmZlY3RpdmVTY2hlZHVsZURheXMpLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRUaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRpbWV6b25lKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZWZmZWN0aXZlVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHgpICYmIHgudGltZXpvbmUgPyB4LnRpbWV6b25lIDogdW5kZWZpbmVkKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVRpbWV6b25lTm9ybWFsJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoIWNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIoeCkgJiYgeC50aW1lem9uZU5vcm1hbCA/IHgudGltZXpvbmVOb3JtYWwgOiB1bmRlZmluZWQpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVTdGFydCQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5JCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlU3RhcnQkLnBpcGUoXG4gICAgbWFwKChzdGFydCkgPT4gKHN0YXJ0ID8gZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnkoeyBzdGFydCB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUJsb2NrRHVyYXRpb25TcGFuJDogT2JzZXJ2YWJsZTxEYXRlQmxvY2tEdXJhdGlvblNwYW48RGF0ZUJsb2NrPltdPiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSh7IC4uLngsIGR1cmF0aW9uOiAxIH0pIDogW10pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlU2VsZWN0ZWRJbmRleGVzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUJsb2NrRHVyYXRpb25TcGFuJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbmV3IFNldCh4Lm1hcCgoeSkgPT4geS5pKSkpLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlU2VsZWN0ZWREYXRlcyQ6IE9ic2VydmFibGU8U2V0PElTTzg2MDFEYXlTdHJpbmc+PiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChkYXRlRmFjdG9yeSkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGVGYWN0b3J5ID8gdGhpcy5zZWxlY3Rpb25WYWx1ZVNlbGVjdGVkSW5kZXhlcyQucGlwZShtYXAoKHgpID0+IG1hcFZhbHVlc1RvU2V0KHgsICh5KSA9PiBmb3JtYXRUb0lTTzg2MDFEYXlTdHJpbmcoZGF0ZUZhY3RvcnkoeSkpKSkpIDogb2YobmV3IFNldDxJU084NjAxRGF5U3RyaW5nPigpKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5lZmZlY3RpdmVUaW1lem9uZU5vcm1hbCQpLFxuICAgIG1hcCgoW3gsIHRpbWV6b25lTm9ybWFsXSkgPT4ge1xuICAgICAgaWYgKHggJiYgdGltZXpvbmVOb3JtYWwpIHtcbiAgICAgICAgeCA9IHtcbiAgICAgICAgICBkYXRlU2NoZWR1bGVSYW5nZToge1xuICAgICAgICAgICAgLi4ueC5kYXRlU2NoZWR1bGVSYW5nZSxcbiAgICAgICAgICAgIHN0YXJ0OiB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKHguZGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKHguZGF0ZVNjaGVkdWxlUmFuZ2UuZW5kKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmVEYXRlQmxvY2tEdXJhdGlvblNwYW4kOiBPYnNlcnZhYmxlPERhdGVCbG9ja0R1cmF0aW9uU3BhbjxEYXRlQmxvY2s+W10+ID0gdGhpcy5zZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+IGV4cGFuZERhdGVTY2hlZHVsZVJhbmdlKHsgLi4ueCwgZHVyYXRpb246IDEgfSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbmV4dFRvZ2dsZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj4gPSB0aGlzLmhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+PjtcblxuICAgICAgaWYgKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+ICh4ID8gJ25vbmUnIDogJ2FsbCcpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+ICh4ID8gJ25vbmUnIDogdW5kZWZpbmVkKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGVTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5kYXRlU2NoZWR1bGVSYW5nZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQgPSB0aGlzLmN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBjZWxsQ29udGVudEZhY3RvcnkkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2VsbENvbnRlbnRGYWN0b3J5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNDdXN0b21pemVkJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRvZ2dsZWRJbmRleGVzLnNpemUgPiAwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNWaWV3UmVhZG9ubHkkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNWaWV3UmVhZG9ubHkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1pbk1heERhdGVSYW5nZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2UpO1xuICByZWFkb25seSBzZXREZWZhdWx0V2VlayA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2UpO1xuICByZWFkb25seSBzZXRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoRmlsdGVyKTtcbiAgcmVhZG9ubHkgc2V0RXhjbHVzaW9ucyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKTtcbiAgcmVhZG9ubHkgc2V0Q29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpO1xuICByZWFkb25seSBjbGVhckZpbHRlciA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgdW5kZWZpbmVkKSk7XG5cbiAgcmVhZG9ubHkgc2V0VGltZXpvbmUgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoVGltZXpvbmVWYWx1ZSk7XG4gIHJlYWRvbmx5IHNldElucHV0UmFuZ2UgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKTtcblxuICAvLyBOT1RFOiBTZWxlY3RlZCBkYXRlcyBhcmUgTk9UIHNlbGVjdGVkIGluZGV4ZXMuIFRoZXkgYXJlIHRoZSBpbnRlcm5hbCBzZWxlY3RlZCBkYXRlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBzZWxlY3Rpb24uXG4gIHJlYWRvbmx5IHRvZ2dsZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB0b2dnbGU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyB0b2dnbGUgfSkpO1xuICByZWFkb25seSBhZGRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgYWRkOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgYWRkIH0pKTtcbiAgcmVhZG9ubHkgcmVtb3ZlU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJlbW92ZTogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHJlbW92ZSB9KSk7XG4gIHJlYWRvbmx5IHNldFNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZXQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZXQgfSkpO1xuXG4gIC8vIE5PVEU6IFNlbGVjdGVkIGluZGV4ZXMgYXJlIHRoZSB0eXBpY2FsL2V4cGVjdGVkIGluZGV4ZXMgdGhhdCBhcmUgc2VsZWN0ZWQgb3Igbm90LlxuICByZWFkb25seSBzZXRTZWxlY3RlZEluZGV4ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZXQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZXQsIGludmVydFNldEJlaGF2aW9yOiB0cnVlIH0pKTtcblxuICByZWFkb25seSBzZWxlY3RBbGxEYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNlbGVjdEFsbDogQWxsT3JOb25lU2VsZWN0aW9uID0gJ2FsbCcpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZWxlY3RBbGwgfSkpO1xuICByZWFkb25seSBzZXRJbml0aWFsU2VsZWN0aW9uU3RhdGUgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKTtcblxuICByZWFkb25seSBzZXREZWZhdWx0U2NoZWR1bGVEYXlzID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREZWZhdWx0U2NoZWR1bGVEYXlzKTtcbiAgcmVhZG9ubHkgc2V0U2NoZWR1bGVEYXlzID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMpO1xuICByZWFkb25seSBzZXRBbGxvd0FsbFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIFtEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtEQVksIERhdGVTY2hlZHVsZURheUNvZGUuV0VFS0VORF0pKTtcblxuICByZWFkb25seSBzZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdmFsdWU6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPikgPT4gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZSwgdmFsdWUpKTtcbiAgcmVhZG9ubHkgc2V0Q2VsbENvbnRlbnRGYWN0b3J5ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5KSA9PiAoeyAuLi5zdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5IH0pKTtcblxuICAvKipcbiAgICogVXNlZCBieSB0aGUgcGFyZW50IHZpZXcgdG8gcHJvcG9nYXRlIGEgcmVhZG9ubHkgc3RhdGUuXG4gICAqXG4gICAqIFNob3VsZCB0eXBpY2FsbHkgbm90IGJlIHVzZWQgYnkgdGhlIHVzZXIgZGlyZWN0bHkgd2l0aCB0aGUgaW50ZW50aW9uIG9mIHRoZSBwYXJlbnQgc3luY2hyb25pemluZyB0byB0aGlzIHN0YXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0Vmlld1JlYWRvbmx5U3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBpc1ZpZXdSZWFkb25seTogYm9vbGVhbikgPT4gKHsgLi4uc3RhdGUsIGlzVmlld1JlYWRvbmx5IH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGU6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHRvZ2dsZWRJbmRleGVzIH0gPSBzdGF0ZTtcblxuICBpZiAodG9nZ2xlZEluZGV4ZXMuc2l6ZSA9PT0gMCAmJiBpbml0aWFsU2VsZWN0aW9uU3RhdGUgPT09ICdhbGwnKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsOiBpbml0aWFsU2VsZWN0aW9uU3RhdGUgfSk7XG4gIH1cblxuICByZXR1cm4geyAuLi5zdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcihjdXJyZW50U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI6IE1heWJlPGJvb2xlYW4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbGV0IHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgPSB7IC4uLmN1cnJlbnRTdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgfTtcblxuICBpZiAoQm9vbGVhbihjdXJyZW50U3RhdGUuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpICE9PSBCb29sZWFuKGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7fSk7IC8vIHJlY2FsY3VsYXRlIGlmIGNoYW5nZSBvY2N1cnMgYXMgaXQgd2lsbCBhZmZlY3QgdGhlIG91dHB1dCB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRXhjbHVzaW9ucyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbnB1dEV4Y2x1c2lvbnM6IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbGV0IGNvbXB1dGVkRXhjbHVzaW9uczogTWF5YmU8RGF0ZUJsb2NrSW5kZXhbXT47XG5cbiAgaWYgKGlucHV0RXhjbHVzaW9ucykge1xuICAgIGNvbnN0IHsgaW5kZXhGYWN0b3J5IH0gPSBzdGF0ZTtcbiAgICBjb25zdCBpbmRleEFycmF5RmFjdG9yeSA9IGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5KGluZGV4RmFjdG9yeSk7XG4gICAgY29tcHV0ZWRFeGNsdXNpb25zID0gaW5kZXhBcnJheUZhY3RvcnkoaW5wdXRFeGNsdXNpb25zKTtcbiAgfVxuXG4gIHN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRFeGNsdXNpb25zLCBjb21wdXRlZEV4Y2x1c2lvbnMgfTtcbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgc3RhdGUuZmlsdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aE1pbk1heERhdGVSYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBtaW5NYXhEYXRlUmFuZ2U6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBzdGF0ZSA9IHsgLi4uc3RhdGUgfTtcblxuICBpZiAobWluTWF4RGF0ZVJhbmdlICE9IG51bGwgJiYgIWlzSW5maW5pdGVEYXRlUmFuZ2UobWluTWF4RGF0ZVJhbmdlKSkge1xuICAgIHN0YXRlLm1pbk1heERhdGVSYW5nZSA9IHtcbiAgICAgIHN0YXJ0OiBtaW5NYXhEYXRlUmFuZ2Uuc3RhcnQgIT0gbnVsbCA/IHN0YXJ0T2ZEYXkobWluTWF4RGF0ZVJhbmdlLnN0YXJ0KSA6IHVuZGVmaW5lZCxcbiAgICAgIGVuZDogbWluTWF4RGF0ZVJhbmdlLmVuZCAhPSBudWxsID8gZW5kT2ZEYXkobWluTWF4RGF0ZVJhbmdlLmVuZCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBzdGF0ZS5taW5NYXhEYXRlUmFuZ2U7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBzdGF0ZS5maWx0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0RmlsdGVyOiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgY29tcHV0ZWRFeGNsdXNpb25zOiBleGNsdXNpb25zLCBtaW5NYXhEYXRlUmFuZ2UgfSA9IHN0YXRlO1xuXG4gIGxldCBpc0VuYWJsZWRGaWx0ZXJEYXk6IE1heWJlPERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9ICgpID0+IHRydWU7XG4gIGxldCBmaWx0ZXI6IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+ID0gbnVsbDtcblxuICAvLyBjcmVhdGUgdGhlIGZpbHRlciB1c2luZyBpbnB1dEZpbHRlciwgZXhjbHVzaW9ucywgYW5kIG1pbk1heERhdGVSYW5nZVxuICBpZiAoaW5wdXRGaWx0ZXIgfHwgZXhjbHVzaW9ucz8ubGVuZ3RoIHx8IG1pbk1heERhdGVSYW5nZSkge1xuICAgIGxldCBlbmFibGVkRmlsdGVyOiBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnO1xuXG4gICAgaWYgKGlucHV0RmlsdGVyKSB7XG4gICAgICBmaWx0ZXIgPSBjb3B5RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZyhpbnB1dEZpbHRlcik7IC8vIGNvcHkgZmlsdGVyXG5cbiAgICAgIGlmIChleGNsdXNpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgZW5hYmxlZEZpbHRlciA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgZXg6IHVuaXF1ZShtZXJnZUFycmF5cyhbZmlsdGVyLmV4LCBleGNsdXNpb25zXSkpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVkRmlsdGVyID0gZmlsdGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbmFibGVkRmlsdGVyID0ge1xuICAgICAgICB3OiAnODknLFxuICAgICAgICBleDogZXhjbHVzaW9ucyBhcyBudW1iZXJbXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgICBlbmFibGVkRmlsdGVyLm1pbk1heERhdGVSYW5nZSA9IG1pbk1heERhdGVSYW5nZTtcbiAgICAgIGVuYWJsZWRGaWx0ZXIuc2V0U3RhcnRBc01pbkRhdGUgPSBmaWx0ZXI/LnN0YXJ0ID8gdHJ1ZSA6IGZhbHNlOyAvLyBJZiBhIHN0YXJ0IGRhdGUgaXMgc2V0LCB0aGVuIGl0IGJlY29tZXMgdGhlIGZsb29yLlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBpbnB1dCBmaWx0ZXIgaGFzIGEgc3RhcnQgZGF0ZSwgdXNlIHRoYXQgYXMgdGhlIHJlbGF0aXZlIHN0YXJ0IHRvIGVuc3VyZSBpbmRleGVzIGFyZSBjb21wYXJlZCB0aGUgc2FtZSxcbiAgICAgKiBvdGhlcndpc2UgdXNlIHRoZSBzdGF0ZSdzIHN0YXJ0LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhlIGluZGV4IGNhbGN1bGF0aW9ucy5cbiAgICAgKi9cbiAgICBlbmFibGVkRmlsdGVyLnN0YXJ0ID0gaW5wdXRGaWx0ZXI/LnN0YXJ0ID8/IHN0YXRlLnN0YXJ0O1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmaWx0ZXJcbiAgICBpc0VuYWJsZWRGaWx0ZXJEYXkgPSBkYXRlU2NoZWR1bGVEYXRlRmlsdGVyKGVuYWJsZWRGaWx0ZXIpO1xuICB9XG5cbiAgc3RhdGUgPSB7IC4uLnN0YXRlLCBmaWx0ZXIsIGlzRW5hYmxlZEZpbHRlckRheSB9O1xuXG4gIC8vIEZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUsIHVzZSB0aGUgZmlsdGVyJ3Mgc3RhcnQgZGF0ZSBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgaWYgYXBwbGljYWJsZS5cbiAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuc3RhcnQpIHtcbiAgICBjb25zdCBzdGFydCA9IGZpbHRlci5zdGFydDtcbiAgICBzdGF0ZS5zdGFydCA9IHN0YXJ0O1xuICAgIHN0YXRlLmluZGV4RmFjdG9yeSA9IGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSh7IHN0YXJ0IH0pO1xuICAgIHN0YXRlLmluZGV4RGF5T2ZXZWVrID0gZGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeShzdGFydCk7XG4gIH1cblxuICAvLyBhdHRlbXB0IHRvIHJlLWFwcGx5IHRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSBvbmNlIGZpbHRlciBpcyBhcHBsaWVkXG4gIGlmIChzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZShzdGF0ZSwgc3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlKTtcbiAgfVxuXG4gIC8vIHJlLWNhbGN1bGF0ZSB0aGUgc2VsZWN0aW9uIGdpdmVuIHRoZSBmaWx0ZXJcbiAgY29uc3QgeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9ID0gc3RhdGU7XG5cbiAgaWYgKGlucHV0U3RhcnQgJiYgaW5wdXRFbmQpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZShzdGF0ZSwgeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aFRpbWV6b25lVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgdGltZXpvbmU6IE1heWJlPFRpbWV6b25lU3RyaW5nPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgY3VycmVudFNlbGVjdGlvblZhbHVlIH0gPSBzdGF0ZTtcblxuICBjb25zdCB0aW1lem9uZU5vcm1hbCA9IHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHRpbWV6b25lTm9ybWFsICYmIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSkge1xuICAgIC8vIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIHZhbHVlIHRvIHJlZmxlY3QgdGhlIHRpbWV6b25lIGNoYW5nZXMuXG4gICAgY29uc3QgeyBkYXRlU2NoZWR1bGVSYW5nZTogY3VycmVudERhdGVTY2hlZHVsZVJhbmdlIH0gPSBjdXJyZW50U2VsZWN0aW9uVmFsdWU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgZW5kID0gdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UuZW5kKTtcblxuICAgIGNvbnN0IG5ld1JhbmdlOiBEYXRlU2NoZWR1bGVSYW5nZSA9IHtcbiAgICAgIC4uLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZS5kYXRlU2NoZWR1bGVSYW5nZSxcbiAgICAgIHN0YXJ0LFxuICAgICAgZW5kXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhEYXRlU2NoZWR1bGVSYW5nZVZhbHVlKHsgLi4uc3RhdGUsIHRpbWV6b25lLCB0aW1lem9uZU5vcm1hbCB9LCBuZXdSYW5nZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIHRpbWV6b25lLCB0aW1lem9uZU5vcm1hbCB9OyAvLyBubyBjaGFuZ2UgaW4gdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgdGltZXpvbmVOb3JtYWwsIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSB9ID0gc3RhdGU7XG4gIGNvbnN0IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZSA9IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT8uZGF0ZVNjaGVkdWxlUmFuZ2U7IC8vIGN1cnJlbnQgcmFuZ2UgaXMgYWx3YXlzIGluIHN5c3RlbSB0aW1lXG5cbiAgaWYgKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHN0YXRlKSAmJiB0aW1lem9uZU5vcm1hbCkge1xuICAgIC8vIFdoZW4gdXNpbmcgdGltZXpvbmVzLCBhbHdheXMgcmV0dXJuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkYXkuIElucHV0cyBhcmUgY29udmVydGVkIHRvIHRoZSBzeXN0ZW0gdGltZSBhbmQgdXNlZCBhcyB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgICAvLyBPdXRwdXRzIHJlbWFpbiBhY2N1cmF0ZS5cblxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIGNoYW5nZSA9IHtcbiAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICBzdGFydDogc3RhcnRPZkRheSh0aW1lem9uZU5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGNoYW5nZS5zdGFydCkpLFxuICAgICAgICBlbmQ6IHN0YXJ0T2ZEYXkodGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShjaGFuZ2UuZW5kKSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNTYW1lVmFsdWUgPSBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UsIGNoYW5nZSk7XG5cbiAgaWYgKGlzU2FtZVZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9IGVsc2Uge1xuICAgIGlmIChjaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbmV4dFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dFN0YXJ0OiBjaGFuZ2Uuc3RhcnQsIGlucHV0RW5kOiBjaGFuZ2UuZW5kLCB0b2dnbGVkSW5kZXhlczogbmV3IFNldChjaGFuZ2UuZXgpIH07XG4gICAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpLCBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2RlcyhjaGFuZ2UudyB8fCAnODknKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IC8vIGNsZWFyIHNlbGVjdGlvbiwgcmV0YWluIGRpc2FibGVkIGRheXNcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREZWZhdWx0U2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBkZWZhdWx0U2NoZWR1bGVEYXlzOiBjdXJyZW50RGVmYXVsdFNjaGVkdWxlRGF5cyB9ID0gc3RhdGU7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSA/PyBmdWxsV2Vla0RheVNjaGVkdWxlRGF5Q29kZXMoKSk7XG5cbiAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoZGVmYXVsdFNjaGVkdWxlRGF5cywgY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlOyAvLyBubyBjaGFuZ2VcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBkZWZhdWx0U2NoZWR1bGVEYXlzIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBzY2hlZHVsZURheXM6IGN1cnJlbnRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBzY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSA/PyBbXSk7XG5cbiAgbGV0IG5ld1NjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+IHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudFNjaGVkdWxlRGF5cyAhPSBudWxsICYmIGNoYW5nZSAhPSBudWxsKSB7XG4gICAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoc2NoZWR1bGVEYXlzLCBjdXJyZW50U2NoZWR1bGVEYXlzKSkge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gdW5kZWZpbmVkOyAvL25vIGNoYW5nZVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY2hlZHVsZURheXMgPSBzY2hlZHVsZURheXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1cnJlbnRTY2hlZHVsZURheXMgIT09IGNoYW5nZSkge1xuICAgIG5ld1NjaGVkdWxlRGF5cyA9IGNoYW5nZSA/IHNjaGVkdWxlRGF5cyA6IG51bGw7IC8vIHNldCB0aGUgbmV3IG9uZSwgb3IgY2xlYXIgaXRcbiAgfVxuXG4gIGlmIChuZXdTY2hlZHVsZURheXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBzY2hlZHVsZURheXM6IG5ld1NjaGVkdWxlRGF5cyA/PyB1bmRlZmluZWQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhwcmV2aW91c1N0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgcHJldmlvdXNTY2hlZHVsZURheXMgPSBwcmV2aW91c1N0YXRlLmVmZmVjdGl2ZVNjaGVkdWxlRGF5cztcbiAgY29uc3QgbmV4dFNjaGVkdWxlRGF5cyA9IG5leHRTdGF0ZS5zY2hlZHVsZURheXMgPz8gbmV4dFN0YXRlLmRlZmF1bHRTY2hlZHVsZURheXM7XG5cbiAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQobmV4dFNjaGVkdWxlRGF5cywgcHJldmlvdXNTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTsgLy8gdGhlIGRlZmF1bHQgb3IgaW5wdXQgc2NoZWR1bGUgY2hhbmdlZCBidXQgdGhlIHNjaGVkdWxlIGlzIHN0aWxsIHRoZSBzYW1lLCBzbyBubyBuZWVkIGZvciBhbiB1cGRhdGUuXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWZmZWN0aXZlU2NoZWR1bGVEYXlzID0gbmV3IFNldChzaW1wbGlmeURhdGVTY2hlZHVsZURheUNvZGVzKG5leHRTY2hlZHVsZURheXMpKTtcbiAgICBjb25zdCBhbGxvd2VkRGF5c09mV2VlayA9IGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQobmV4dFNjaGVkdWxlRGF5cyk7XG5cbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoe1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgLy8gdXBkYXRlIHRoZSBlZmZlY3RpdmUgc2NoZWR1bGUgZGF5cyBhbmQgYWxsb3dlZCBkYXlzIG9mIHdlZWtcbiAgICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyxcbiAgICAgIGFsbG93ZWREYXlzT2ZXZWVrXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGVEYXRlc0NoYW5nZSB7XG4gIHJlc2V0PzogdHJ1ZTtcbiAgdG9nZ2xlPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgYWRkPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgcmVtb3ZlPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2V0PzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2VsZWN0QWxsPzogQWxsT3JOb25lU2VsZWN0aW9uO1xuICAvKipcbiAgICogSW52ZXJ0cyB0aGUgc2V0IGRhdGUgY2hhbmdpbmcgYmVoYXZpb3Igc28gdGhhdCB0aGUgc2V0IGlucHV0IGlzIHRyZWF0ZWQgYXMgaXRlbXMgdGhhdCBzaG91bGQgYmUgcmV0YWluZWQgaW5zdGVhZCBvZiBleGNsdWRlZC5cbiAgICpcbiAgICogSWdub3JlZCB3aGVuIHNldCBpcyBub3QgdXNlZC4gSWdub3JlZCBmb3Igc2VsZWN0QWxsLlxuICAgKi9cbiAgaW52ZXJ0U2V0QmVoYXZpb3I/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGluZGV4RGF5T2ZXZWVrLCBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgbWluTWF4RGF0ZVJhbmdlLCBmaWx0ZXIgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfSA9IGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2Uoc3RhdGUpO1xuICBsZXQgaW5wdXRTdGFydCA9IGN1cnJlbnRJbnB1dFN0YXJ0O1xuICBsZXQgaW5wdXRFbmQgPSBjdXJyZW50SW5wdXRFbmQ7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzZXQgb2YgaW5kZXhlcyB0aGF0IGFyZSBpbnRlcm5hbGx5IFwic2VsZWN0ZWRcIiBzbyB0aGF0IHRoZXkgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGlucHV0U3RhcnQvaW5wdXRFbmQgZGF0ZSByYW5nZS5cbiAgICpcbiAgICogRG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgaW5kZXhlcyB0aGF0IGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIGxldCB0b2dnbGVkSW5kZXhlczogU2V0PERhdGVCbG9ja0luZGV4PjtcblxuICBmdW5jdGlvbiBhc0luZGV4ZXMoaW5kZXhlczogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pik6IERhdGVCbG9ja0luZGV4W10ge1xuICAgIHJldHVybiBpdGVyYWJsZVRvQXJyYXkoaW5kZXhlcykubWFwKGluZGV4RmFjdG9yeSk7XG4gIH1cblxuICBpZiAoY2hhbmdlLnJlc2V0IHx8IGNoYW5nZS5zZWxlY3RBbGwgIT0gbnVsbCB8fCBjaGFuZ2Uuc2V0ICE9IG51bGwpIHtcbiAgICBsZXQgc2V0OiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9IGNoYW5nZS5zZXQgPz8gW107XG4gICAgY29uc3Qgc2VsZWN0QWxsOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+ID0gY2hhbmdlLnJlc2V0ID09PSB0cnVlID8gc3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlIDogY2hhbmdlLnNlbGVjdEFsbDtcblxuICAgIHN3aXRjaCAoc2VsZWN0QWxsKSB7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICBpZiAobWluRGF0ZSAhPSBudWxsICYmIG1heERhdGUgIT0gbnVsbCkge1xuICAgICAgICAgIGlucHV0U3RhcnQgPSBtaW5EYXRlO1xuICAgICAgICAgIGlucHV0RW5kID0gbWF4RGF0ZTtcbiAgICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBpbnB1dFN0YXJ0ID0gbnVsbDtcbiAgICAgICAgaW5wdXRFbmQgPSBudWxsO1xuICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KGFzSW5kZXhlcyhzZXQpKTtcblxuICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IgJiYgbWluRGF0ZSAmJiBtYXhEYXRlICYmICFzZWxlY3RBbGwpIHtcbiAgICAgIGNvbnN0IG1pbkluZGV4ID0gaW5kZXhGYWN0b3J5KG1pbkRhdGUpO1xuICAgICAgY29uc3QgbWF4SW5kZXggPSBpbmRleEZhY3RvcnkobWF4RGF0ZSk7XG5cbiAgICAgIGlucHV0U3RhcnQgPSBtaW5EYXRlO1xuICAgICAgaW5wdXRFbmQgPSBtYXhEYXRlO1xuICAgICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KHJhbmdlKG1pbkluZGV4LCBtYXhJbmRleCArIDEpLmZpbHRlcigoeCkgPT4gIXRvZ2dsZWRJbmRleGVzLmhhcyh4KSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQoc3RhdGUudG9nZ2xlZEluZGV4ZXMpO1xuXG4gICAgaWYgKGNoYW5nZS50b2dnbGUpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRUb1RvZ2dsZSA9IGFzSW5kZXhlcyhjaGFuZ2UudG9nZ2xlKS5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICAgICAgdG9nZ2xlSW5TZXQodG9nZ2xlZEluZGV4ZXMsIGFsbG93ZWRUb1RvZ2dsZSk7XG4gICAgfVxuXG4gICAgbGV0IGFkZFRvRXhjbHVzaW9uOiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PjtcbiAgICBsZXQgcmVtb3ZlRnJvbUV4Y2x1c2lvbjogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj47XG5cbiAgICBpZiAoY2hhbmdlLmFkZCkge1xuICAgICAgaWYgKGNoYW5nZS5pbnZlcnRTZXRCZWhhdmlvcikge1xuICAgICAgICBhZGRUb0V4Y2x1c2lvbiA9IGNoYW5nZS5hZGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVGcm9tRXhjbHVzaW9uID0gY2hhbmdlLmFkZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLnJlbW92ZSkge1xuICAgICAgaWYgKGNoYW5nZS5pbnZlcnRTZXRCZWhhdmlvcikge1xuICAgICAgICByZW1vdmVGcm9tRXhjbHVzaW9uID0gY2hhbmdlLnJlbW92ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZFRvRXhjbHVzaW9uID0gY2hhbmdlLnJlbW92ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkVG9FeGNsdXNpb24pIHtcbiAgICAgIHJlbW92ZUZyb21TZXQodG9nZ2xlZEluZGV4ZXMsIGFzSW5kZXhlcyhhZGRUb0V4Y2x1c2lvbikpO1xuICAgIH1cblxuICAgIGlmIChyZW1vdmVGcm9tRXhjbHVzaW9uKSB7XG4gICAgICBhZGRUb1NldCh0b2dnbGVkSW5kZXhlcywgYXNJbmRleGVzKHJlbW92ZUZyb21FeGNsdXNpb24pKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgdG9nZ2xlZEluZGV4ZXMgfTtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG5cbiAgLy8gUmVjYWxjdWxhdGUgdGhlIHJhbmdlIGFuZCBzaW1wbGlmaWVkIHRvIGV4Y2x1c2lvbnNcbiAgY29uc3QgcmFuZ2VBbmRFeGNsdXNpb24gPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihuZXh0U3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbikge1xuICAgIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSh7IC4uLm5leHRTdGF0ZSwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQocmFuZ2VBbmRFeGNsdXNpb24uZXhjbHVkZWQpLCBpbnB1dFN0YXJ0OiByYW5nZUFuZEV4Y2x1c2lvbi5zdGFydCwgaW5wdXRFbmQ6IHJhbmdlQW5kRXhjbHVzaW9uLmVuZCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBzZWxlY3RlZCBkYXlzXG4gICAgcmV0dXJuIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5zdGF0ZSwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoKSwgaW5wdXRTdGFydDogbnVsbCwgaW5wdXRFbmQ6IG51bGwgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGlucHV0U3RhcnQ6IGN1cnJlbnRJbnB1dFN0YXJ0LCBpbnB1dEVuZDogY3VycmVudElucHV0RW5kLCBpbmRleEZhY3RvcnksIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG4gIGNvbnN0IHsgc3RhcnQ6IG1pbkRhdGUsIGVuZDogbWF4RGF0ZSB9OiBQYXJ0aWFsPERhdGVSYW5nZT4gPSBtaW5NYXhEYXRlUmFuZ2UgPz8ge307XG5cbiAgY29uc3QgaW5wdXRTdGFydDogRGF0ZSA9IHN0YXJ0T2ZEYXkoY2hhbmdlLmlucHV0U3RhcnQpO1xuICBjb25zdCBpbnB1dEVuZDogRGF0ZSA9IGVuZE9mRGF5KGNoYW5nZS5pbnB1dEVuZCk7XG5cbiAgY29uc3QgaXNWYWxpZFJhbmdlID0gbWluRGF0ZSAhPSBudWxsIHx8IG1heERhdGUgIT0gbnVsbCA/IGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24oeyBzdGFydDogbWluRGF0ZSA/PyB1bmRlZmluZWQsIGVuZDogbWF4RGF0ZSA/PyB1bmRlZmluZWQgfSkgOiAoKSA9PiB0cnVlO1xuXG4gIGlmICghaXNWYWxpZFJhbmdlKGlucHV0U3RhcnQpIHx8ICFpc1ZhbGlkUmFuZ2UoaW5wdXRFbmQpIHx8IChpc1NhbWVEYXRlRGF5KGlucHV0U3RhcnQsIGN1cnJlbnRJbnB1dFN0YXJ0KSAmJiBpc1NhbWVEYXRlRGF5KGlucHV0RW5kLCBjdXJyZW50SW5wdXRFbmQpKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gaWYgbm8gY2hhbmdlLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gIH1cblxuICAvLyByZXRhaW4gYWxsIGluZGV4ZXMgdGhhdCBhcmUgd2l0aGluIHRoZSBuZXcgcmFuZ2VcbiAgY29uc3QgbWluSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCk7XG4gIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKSArIDE7XG5cbiAgY29uc3QgY3VycmVudEluZGV4ZXM6IERhdGVCbG9ja0luZGV4W10gPSBBcnJheS5mcm9tKHN0YXRlLnRvZ2dsZWRJbmRleGVzKTtcbiAgY29uc3QgaXNJbkN1cnJlbnRSYW5nZSA9IGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbih7IG1pbkluZGV4LCBtYXhJbmRleCB9KTtcbiAgY29uc3QgZXhjbHVkZWRJbmRleGVzSW5OZXdSYW5nZSA9IGN1cnJlbnRJbmRleGVzLmZpbHRlcihpc0luQ3VycmVudFJhbmdlKTtcbiAgY29uc3QgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHsgLi4uc3RhdGUsIHRvZ2dsZWRJbmRleGVzLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9O1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIG5leHRTdGF0ZS5jdXJyZW50U2VsZWN0aW9uVmFsdWUgPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShuZXh0U3RhdGUpO1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+IHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgaW5kZXhEYXlPZldlZWsgfSA9IHN0YXRlO1xuICBsZXQgaXNJblN0YXJ0QW5kRW5kUmFuZ2U6IElzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb247XG5cbiAgaWYgKGlucHV0U3RhcnQgJiYgaW5wdXRFbmQpIHtcbiAgICBpc0luU3RhcnRBbmRFbmRSYW5nZSA9IGlzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb24oeyBzdGFydDogc3RhdGUuc3RhcnQsIHJhbmdlOiB7IHN0YXJ0OiBpbnB1dFN0YXJ0LCBlbmQ6IGlucHV0RW5kIH0gfSk7XG4gIH0gZWxzZSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSAoKSA9PiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoaW5wdXQ6IERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0KSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXQpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGluZGV4RGF5T2ZXZWVrKGluZGV4KTtcblxuICAgIGNvbnN0IGlzSW5TZWxlY3RlZFJhbmdlID0gaXNJblN0YXJ0QW5kRW5kUmFuZ2UoaW5kZXgpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBzdGF0ZS50b2dnbGVkSW5kZXhlcy5oYXMoaW5kZXgpO1xuICAgIGNvbnN0IGlzQWxsb3dlZERheU9mV2VlayA9IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhkYXlPZldlZWspO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gaXNBbGxvd2VkRGF5T2ZXZWVrICYmICgoaXNJblNlbGVjdGVkUmFuZ2UgJiYgIWlzU2VsZWN0ZWQpIHx8IChpc1NlbGVjdGVkICYmICFpc0luU2VsZWN0ZWRSYW5nZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPiB7XG4gIGNvbnN0IHsgaW5kZXhGYWN0b3J5LCBhbGxvd2VkRGF5c09mV2VlaywgZWZmZWN0aXZlU2NoZWR1bGVEYXlzLCBpbmRleERheU9mV2VlaywgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGZpbHRlciB9ID0gc3RhdGU7XG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IHN0YXJ0OiByYW5nZVN0YXJ0LCBlbmQ6IHJhbmdlRW5kLCBleGNsdWRlZDogYWxsRXhjbHVkZWQsIGRhdGVCbG9ja1JhbmdlIH0gPSByYW5nZUFuZEV4Y2x1c2lvbjtcbiAgbGV0IGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2U6IERhdGVCbG9ja0luZGV4W10gPSBbXTtcbiAgbGV0IGluZGV4T2Zmc2V0ID0gZGF0ZUJsb2NrUmFuZ2UuaTtcblxuICBsZXQgc3RhcnQgPSByYW5nZVN0YXJ0O1xuICBsZXQgZW5kID0gcmFuZ2VFbmQ7XG5cbiAgLy8gSWYgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgaXMgdHJ1ZSwgdGhlbiB3ZSBuZWVkIHRvIG9mZnNldCB0aGUgdmFsdWVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoYXQgc3RhcnQuXG4gIGlmIChjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiBmaWx0ZXI/LnN0YXJ0KSB7XG4gICAgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7XG5cbiAgICBpZiAoZmlsdGVyPy5lbmQpIHtcbiAgICAgIGVuZCA9IGNvcHlIb3Vyc0FuZE1pbnV0ZXNGcm9tRGF0ZShlbmQsIGZpbHRlci5lbmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQgPSBpbmRleEZhY3RvcnkocmFuZ2VTdGFydCkgLSBpbmRleEZhY3Rvcnkoc3RhcnQpO1xuICAgIGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UgPSByYW5nZSgwLCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0KTtcbiAgICBpbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0IC0gZmlsdGVyU3RhcnRJbmRleE9mZnNldDtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVkID0gY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXJcbiAgICA/IGFsbEV4Y2x1ZGVkLmZpbHRlcigoeCkgPT4ge1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoeCkpOyAvLyA/Pz9cbiAgICAgICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgICAgIH0pXG4gICAgOiBhbGxFeGNsdWRlZDtcblxuICBjb25zdCBvZmZzZXRFeGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXSA9IGV4Y2x1ZGVkLm1hcCgoeCkgPT4geCAtIGluZGV4T2Zmc2V0KTsgLy8gc2V0IHRvIHRoZSBwcm9wZXIgb2Zmc2V0XG5cbiAgY29uc3QgZXggPSBbLi4uZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZSwgLi4ub2Zmc2V0RXhjbHVkZWRdO1xuXG4gIGNvbnN0IHc6IERhdGVTY2hlZHVsZUVuY29kZWRXZWVrID0gZGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWsoZWZmZWN0aXZlU2NoZWR1bGVEYXlzKTtcbiAgY29uc3QgZDogRGF0ZUJsb2NrSW5kZXhbXSA9IFtdOyAvLyBcImluY2x1ZGVkXCIgYmxvY2tzIGFyZSBuZXZlciB1c2VkL2NhbGN1bGF0ZWQuXG5cbiAgLy8gQWx3YXlzIGVuc3VyZSB0aGUgZW5kIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBzdGFydC5cbiAgaWYgKGlzQmVmb3JlKGVuZCwgc3RhcnQpKSB7XG4gICAgZW5kID0gc3RhcnQ7IC8vIGVuZCBpcyBzdGFydFxuICB9XG5cbiAgY29uc3QgZGF0ZVNjaGVkdWxlUmFuZ2U6IERhdGVTY2hlZHVsZVJhbmdlID0ge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICB3LFxuICAgIGQsXG4gICAgZXhcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGRhdGVTY2hlZHVsZVJhbmdlLFxuICAgIG1pbk1heFJhbmdlOiB7IHN0YXJ0LCBlbmQgfVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiBleHRlbmRzIERhdGVSYW5nZSB7XG4gIGRhdGVCbG9ja1JhbmdlOiBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZTtcbiAgZXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uPiB7XG4gIGNvbnN0IHsgc3RhcnQ6IGN1cnJlbnRTdGFydCwgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUJsb2NrVGltaW5nU3RhcnREYXRlRmFjdG9yeSh7IHN0YXJ0OiBjdXJyZW50U3RhcnQgfSwgeyBhc3NlcnRUaW1pbmdNYXRjaGVzVGltZXpvbmU6IGZhbHNlLCB1c2VTeXN0ZW1UaW1lem9uZTogdHJ1ZSB9KTtcbiAgLy8gY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQmxvY2tUaW1pbmdTdGFydERhdGVGYWN0b3J5KGNoYW5nZVRpbWluZ1RvU3lzdGVtVGltZXpvbmUoeyBzdGFydDogY3VycmVudFN0YXJ0IH0pLCB7IHVzZVN5c3RlbVRpbWV6b25lOiB0cnVlIH0pO1xuICBjb25zdCBkYXRlQmxvY2tSYW5nZSA9IGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGUpO1xuXG4gIGlmIChkYXRlQmxvY2tSYW5nZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIHJldHVybnMgbnVsbCBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLmkpO1xuICBjb25zdCBlbmQgPSBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS50byk7XG5cbiAgY29uc3QgZXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W10gPSByYW5nZShkYXRlQmxvY2tSYW5nZS5pLCBkYXRlQmxvY2tSYW5nZS50byArIDEpLmZpbHRlcigoeCkgPT4ge1xuICAgIGNvbnN0IGlzRXhjbHVkZWRJbmRleCA9ICFpc0VuYWJsZWREYXkoeCkgfHwgIWlzRW5hYmxlZEZpbHRlckRheSh4KTtcbiAgICByZXR1cm4gaXNFeGNsdWRlZEluZGV4O1xuICB9KTtcblxuICBjb25zdCByZXN1bHQ6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiA9IHtcbiAgICBkYXRlQmxvY2tSYW5nZSxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhjbHVkZWRcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3Rvcnkoc3RhdGUpO1xuICBjb25zdCBkYXRlQmxvY2tSYW5nZSA9IGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGUpO1xuICBjb25zdCBkYXRlUmFuZ2U6IE1heWJlPERhdGVSYW5nZT4gPSBkYXRlQmxvY2tSYW5nZSAhPSBudWxsID8geyBzdGFydDogZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UuaSksIGVuZDogZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UudG8gYXMgbnVtYmVyKSB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gZGF0ZVJhbmdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZUJsb2NrUmFuZ2VXaXRoUmFuZ2U+IHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgaW5kZXhEYXlPZldlZWssIGlzRW5hYmxlZERheSwgaXNFbmFibGVkRmlsdGVyRGF5IH0gPSBzdGF0ZTtcbiAgY29uc3QgZW5hYmxlZEV4Y2x1c2lvbkluZGV4ZXMgPSBBcnJheS5mcm9tKHN0YXRlLnRvZ2dsZWRJbmRleGVzKS5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICBjb25zdCBtaW5BbmRNYXhTZWxlY3RlZFZhbHVlcyA9IG1pbkFuZE1heE51bWJlcihlbmFibGVkRXhjbHVzaW9uSW5kZXhlcyk7XG5cbiAgbGV0IHN0YXJ0UmFuZ2U6IE1heWJlPERhdGVCbG9ja0luZGV4PjtcbiAgbGV0IGVuZFJhbmdlOiBNYXliZTxEYXRlQmxvY2tJbmRleD47XG5cbiAgaWYgKG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzKSB7XG4gICAgc3RhcnRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1pbjtcbiAgICBlbmRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1heDtcbiAgfVxuXG4gIGlmIChpbnB1dFN0YXJ0ICE9IG51bGwgJiYgaW5wdXRFbmQgIT0gbnVsbCkge1xuICAgIGNvbnN0IGlucHV0U3RhcnRJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KTtcbiAgICBjb25zdCBpbnB1dEVuZEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKTtcblxuICAgIHN0YXJ0UmFuZ2UgPSBzdGFydFJhbmdlICE9IG51bGwgPyBNYXRoLm1pbihpbnB1dFN0YXJ0SW5kZXgsIHN0YXJ0UmFuZ2UpIDogaW5wdXRTdGFydEluZGV4O1xuICAgIGVuZFJhbmdlID0gZW5kUmFuZ2UgIT0gbnVsbCA/IE1hdGgubWF4KGlucHV0RW5kSW5kZXgsIGVuZFJhbmdlKSA6IGlucHV0RW5kSW5kZXg7XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICBjb25zdCBzY2FuU3RhcnRJbmRleCA9IHN0YXJ0UmFuZ2U7XG4gICAgY29uc3Qgc2NhbkVuZEluZGV4ID0gZW5kUmFuZ2U7XG5cbiAgICAvLyBjbGVhciBzdGFydCBhbmQgZW5kXG4gICAgc3RhcnRSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICBlbmRSYW5nZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIHRoZSBtaW4gaXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGluZGV4LCB0aGVuIHdlIGFyZSBpbiB0aGUgcmFuZ2UgYW5kIG5lZWQgdG8gaXRlcmF0ZSBkYXRlcyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGlzIG5vdCBzZWxlY3RlZC9leGNsdWRlZC5cbiAgICBmb3IgKGxldCBpID0gc2NhblN0YXJ0SW5kZXg7IGkgPD0gc2NhbkVuZEluZGV4OyBpICs9IDEpIHtcbiAgICAgIGlmIChpc0VuYWJsZWRGaWx0ZXJEYXkoaSkgJiYgaXNFbmFibGVkRGF5KGkpKSB7XG4gICAgICAgIHN0YXJ0UmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzYW1lIHdpdGggdGhlIG1heFxuICAgIGZvciAobGV0IGkgPSBzY2FuRW5kSW5kZXg7IGkgPj0gc2NhblN0YXJ0SW5kZXg7IGkgLT0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgZW5kUmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICByZXR1cm4geyBpOiBzdGFydFJhbmdlLCB0bzogZW5kUmFuZ2UgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFFckIsdUJBQXVCLEVBR3ZCLHdCQUF3QixFQUV4QixxQ0FBcUMsRUFFckMsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFHaEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQTRELGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFZLGVBQWUsRUFBZ0MsS0FBSyxFQUFzQixNQUFNLEVBQUUsV0FBVyxFQUFnQixhQUFhLEVBQXVDLGNBQWMsRUFBc0Isd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN1ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFB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SSxVQUFVLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDMUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUU5QixzQkFBc0I7UUFDdEIsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixRQUFRLEdBQUcsU0FBUyxDQUFDO1FBRXJCLDhJQUE4STtRQUM5SSxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07YUFDUDtTQUNGO0tBQ0Y7SUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDeEM7U0FBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIERhdGVCbG9ja0luZGV4LFxuICBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnksXG4gIERhdGVPckRhdGVCbG9ja0luZGV4LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIsXG4gIGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXlDb2RlLFxuICBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSxcbiAgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNTYW1lRGF0ZSxcbiAgaXNTYW1lRGF0ZURheSxcbiAgaXNTYW1lRGF0ZVJhbmdlLFxuICBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUsXG4gIGRhdGVUaW1lem9uZVV0Y05vcm1hbCxcbiAgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsXG4gIGV4cGFuZERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlQmxvY2ssXG4gIERhdGVCbG9ja0R1cmF0aW9uU3BhbixcbiAgZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNBcmVTZXRzRXF1aXZhbGVudCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNTZXRGcm9tRGF5c09mV2VlayxcbiAgc2ltcGxpZnlEYXRlU2NoZWR1bGVEYXlDb2RlcyxcbiAgZnVsbFdlZWtEYXlTY2hlZHVsZURheUNvZGVzLFxuICBkYXRlQmxvY2tUaW1pbmdTdGFydERhdGVGYWN0b3J5LFxuICBndWVzc0N1cnJlbnRUaW1lem9uZSxcbiAgRGF0ZUJsb2NrVGltaW5nU3RhcnRcbn0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzLCBmaWx0ZXJNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgTWF5YmUsIFRpbWV6b25lU3RyaW5nLCBEZWNpc2lvbkZ1bmN0aW9uLCBJdGVyYWJsZU9yVmFsdWUsIGl0ZXJhYmxlVG9BcnJheSwgYWRkVG9TZXQsIHRvZ2dsZUluU2V0LCBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24sIE1heWJlTWFwLCBtaW5BbmRNYXhOdW1iZXIsIHNldHNBcmVFcXVpdmFsZW50LCBEYXlPZldlZWssIHJhbmdlLCBBbGxPck5vbmVTZWxlY3Rpb24sIHVuaXF1ZSwgbWVyZ2VBcnJheXMsIEFycmF5T3JWYWx1ZSwgcmVtb3ZlRnJvbVNldCwgSVNPODYwMURheVN0cmluZywgZmlsdGVyVmFsdWVzVG9TZXQsIG1hcFZhbHVlc1RvU2V0LCBhc0RlY2lzaW9uRnVuY3Rpb24sIGlzSW5BbGxvd2VkRGF5c09mV2Vla1NldCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgc3RhcnRPZkRheSwgZW5kT2ZEYXksIGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBmaXJzdCwgY29tYmluZUxhdGVzdFdpdGgsIG9mLCBzY2hlZHVsZWQsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnksIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZSwgZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIElucHV0IFN0YXJ0IERhdGVcbiAgICovXG4gIGlucHV0U3RhcnQ6IERhdGU7XG4gIC8qKlxuICAgKiBJbnB1dCBFbmQgRGF0ZVxuICAgKi9cbiAgaW5wdXRFbmQ6IERhdGU7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UgPSBQYXJ0aWFsPE1heWJlTWFwPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSBleHRlbmRzIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2Uge1xuICAvKipcbiAgICogUmVhZG9ubHkgc3RhdGUgb2YgdGhlIHZpZXcuXG4gICAqXG4gICAqIERvZXMgbm90IGFmZmVjdCBzdGF0ZSBjaGFuZ2VzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCBhY3RzIGFzIGEgZmxhZyBmb3IgdGhlIHBhcmVudCB2aWV3IHRvIHNldCBhbmQgdGhlIGNvbnN1bWluZyB2aWV3cyB0byB1cGRhdGUgb24uXG4gICAqL1xuICBpc1ZpZXdSZWFkb25seT86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgZGVmYXVsdFNjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogRmlsdGVycyB0aGUgZGF5cyBvZiB0aGUgc2NoZWR1bGUgdG8gb25seSBhbGxvdyBzZWxlY3RpbmcgZGF5cyBpbiB0aGUgc2NoZWR1bGUuXG4gICAqXG4gICAqIElmIGZpbHRlci5zdGFydCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgdGltZXpvbmUgaW4gdGhpcyBub3JtYWwgaXMgaWdub3JlZCwgaWYgb25lIGlzIHByZXNlbnQuIENvbnZlcnQgdG8gdGhlIHN5c3RlbSB0aW1lem9uZSBmaXJzdC5cbiAgICovXG4gIGZpbHRlcj86IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+O1xuICAvKipcbiAgICogQWRkaXRpb25hbCBleGNsdXNpb25zIHRoYXQgbWF5IG5vdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgZmlsdGVyLlxuICAgKi9cbiAgaW5wdXRFeGNsdXNpb25zPzogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj47XG4gIC8qKlxuICAgKiBUaGUgY29tcHV0ZWQgZXhjbHVzaW9ucyBnaXZlbiB0aGUgaW5wdXQgZXhjbHVzaW9ucy5cbiAgICovXG4gIGNvbXB1dGVkRXhjbHVzaW9ucz86IE1heWJlPERhdGVCbG9ja0luZGV4W10+O1xuICAvKipcbiAgICogVGhlIG1pbi9tYXggZGF0ZSByYW5nZS4gVXNlZCBmb3IgcmVzdHJpY3RpbmcgdGhlIG1pbi9tYXggdmFsdWUuIFdvcmtzIHdpdGggdGhlIGZpbHRlci4gVGhlIGdyZWF0ZXIvbGVzc2VyIG9mIHRoZSBzdGFydC9lbmQgZGF0ZXMgYXJlIHVzZWQgaWYgYm90aCBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICBtaW5NYXhEYXRlUmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xuICAvKipcbiAgICogU3RhcnQgZGF0ZS4gSXMgdXBkYXRlZCBhcyB0aGUgaW5wdXRTdGFydCBpcyBtb2RpZmllZCBvciBmaWx0ZXIgaXMgcHJvdmlkZWQgdGhhdCBwcm92aWRlcyB0aGUgc3RhcnQgZGF0ZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdG9kYXkgYW5kIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgc3RhcnQ6IERhdGVCbG9ja1RpbWluZ1N0YXJ0WydzdGFydCddO1xuICAvKipcbiAgICogVGltZXpvbmUgdG8gdXNlLiBPbmx5IGluZmx1ZW5jZXMgdGhlIG91dHB1dCBzdGFydCBkYXRlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxUaW1lem9uZVN0cmluZz47XG4gIC8qKlxuICAgKiBDdXJyZW50IHRpbWV6b25lIG5vcm1hbCB3aXRoIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgdGltZXpvbmVOb3JtYWw/OiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT47XG4gIC8qKlxuICAgKiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlcbiAgICovXG4gIGluZGV4RmFjdG9yeTogRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5O1xuICAvKipcbiAgICogQXJyYXkgb2YgbWFudWFsbHkgc2VsZWN0ZWQgZGF0ZXMgd2l0aGluIHRoZSBwaWNrZWQgcmFuZ2UuIFRoaXMgaXMgTk9UIHRoZSBzZXQgb2YgYWxsIHNlbGVjdGVkIGluZGV4ZXMgaW4gdGVybXMgb2Ygb3V0cHV0LlxuICAgKlxuICAgKiBWYWx1ZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHRoZSBcImlucHV0XCIgcmFuZ2UgYXJlIGNvbnNpZGVyZWQgdG9nZ2xlZCBvbiwgd2hpbGUgdGhvc2VcbiAgICogdGhhdCBhcmUgc2VsZWN0ZWQgd2l0aGluIHRoZSByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9mZi5cbiAgICpcbiAgICogSWYgZGF0ZXMgYXJlIHNlbGVjdGVkLCBhbmQgdGhlbiBhIHJhbmdlIGlzIHNlbGVjdGVkLCB0aGVuIHRob3NlIGRhdGVzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBmYWxsXG4gICAqIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQgZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFRoZXNlIGluZGV4ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBkYXRlLlxuICAgKi9cbiAgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQmxvY2tJbmRleD47XG4gIC8qKlxuICAgKiBEYXlzIG9mIHRoZSBzY2hlZHVsZSB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBpY2tlZC4gSWYgbm90IGRlZmluZWQsIGRlZmF1bHRzIHRvIGRlZmF1bHRTY2hlZHVsZURheXMuXG4gICAqL1xuICBzY2hlZHVsZURheXM/OiBNYXliZTxTZXQ8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgRGF0ZVNjaGVkdWxlRGF5Q29kZSB2YWx1ZS5cbiAgICovXG4gIGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZC4gRGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IHNjaGVkdWxlIGRheXMgdmFsdWUuXG4gICAqL1xuICBhbGxvd2VkRGF5c09mV2VlazogU2V0PERheU9mV2Vlaz47XG4gIC8qKlxuICAgKlxuICAgKi9cbiAgaW5kZXhEYXlPZldlZWs6IERhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnk7XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQgZ2l2ZW4gdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgaXNFbmFibGVkRmlsdGVyRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgLyoqXG4gICAqIERlY2lzaW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBjdXJyZW50IGZpbHRlciBpbnRvIGFjY291bnQuXG4gICAqL1xuICBpc0VuYWJsZWREYXk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICAvKipcbiAgICogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSBmb3IgdGhlIHZpZXcuXG4gICAqL1xuICBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBDdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS5cbiAgICovXG4gIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT86IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGZpbHRlciBhcyB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBpbnN0ZWFkIG9mIG9wdGltaXppbmcgZm9yIHRoZSBjdXJyZW50IGluZGV4LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSB3aGVuIHRoZSBjYWxlbmRhciBpcyByZXNldC5cbiAgICovXG4gIGluaXRpYWxTZWxlY3Rpb25TdGF0ZT86IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KFtEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtEQVksIERhdGVTY2hlZHVsZURheUNvZGUuV0VFS0VORF0pO1xuICBjb25zdCBhbGxvd2VkRGF5c09mV2VlayA9IGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQoZGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgpKTtcbiAgY29uc3QgaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gIGNvbnN0IGluZGV4RGF5T2ZXZWVrID0gZGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeShzdGFydCk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydCxcbiAgICBpbmRleEZhY3RvcnksXG4gICAgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoKSxcbiAgICBkZWZhdWx0U2NoZWR1bGVEYXlzLFxuICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogZGVmYXVsdFNjaGVkdWxlRGF5cyxcbiAgICBhbGxvd2VkRGF5c09mV2VlayxcbiAgICBpbmRleERheU9mV2VlayxcbiAgICBpc0VuYWJsZWRGaWx0ZXJEYXk6ICgpID0+IHRydWUsXG4gICAgaXNFbmFibGVkRGF5OiAoKSA9PiBmYWxzZSxcbiAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogdHJ1ZSxcbiAgICBjZWxsQ29udGVudEZhY3Rvcnk6IGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluRGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWF4RGF0ZShbeC5maWx0ZXI/LnN0YXJ0LCB4Lm1pbk1heERhdGVSYW5nZT8uc3RhcnRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNaW5EYXRlKFt4LmZpbHRlcj8uZW5kLCB4Lm1pbk1heERhdGVSYW5nZT8uZW5kXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IFBhcnRpYWw8RGF0ZVJhbmdlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHgpIHx8IHVuZGVmaW5lZCxcbiAgICBlbmQ6IGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHgpIHx8IHVuZGVmaW5lZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcih4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXInPikge1xuICByZXR1cm4geC5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiB4LmZpbHRlcj8uc3RhcnQgIT0gbnVsbDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSBleHRlbmRzIENvbXBvbmVudFN0b3JlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCkpO1xuICB9XG5cbiAgLy8gTUFSSzpcbiAgcmVhZG9ubHkgdG9nZ2xlU2VsZWN0aW9uID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5uZXh0VG9nZ2xlU2VsZWN0aW9uJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgZmlsdGVyTWF5YmUoKSxcbiAgICAgICAgICB0YXAoKHgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsRGF0ZXMoeCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICByZWFkb25seSBmaWx0ZXIkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZmlsdGVyKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluTWF4RGF0ZVJhbmdlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2UpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgbWluRGF0ZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICByZWFkb25seSBtYXhEYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHggIT0gbnVsbCAmJiB4LnN0YXJ0ICE9IG51bGwgJiYgeC5lbmQgIT0gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0U3RhcnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaW5wdXRTdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dEVuZCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dEVuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50SW5wdXRSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KSA9PiAoeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGUoYS5pbnB1dFN0YXJ0LCBiLmlucHV0U3RhcnQpICYmIGlzU2FtZURhdGUoYS5pbnB1dEVuZCwgYi5pbnB1dEVuZCkpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHguaW5wdXRTdGFydCAmJiB4LmlucHV0RW5kKSB7XG4gICAgICAgIHJldHVybiB4IGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50SW5wdXRSYW5nZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS4gVGhpcyBpcyB0aGUgc2V0IG9mIG1hbnVhbGx5IHRvZ2dlZCBvZmYgZGF0ZXMuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RlZERhdGVzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRvZ2dsZWRJbmRleGVzKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRmlsdGVyRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzRW5hYmxlZEZpbHRlckRheSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZERheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWREYXkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlUmFuZ2UoYSwgYikpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICAvL1xuICAgIG1hcChjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxEYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50RGF0ZVJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBhbGxvd2VkRGF5c09mV2VlayQ6IE9ic2VydmFibGU8U2V0PERheU9mV2Vlaz4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguYWxsb3dlZERheXNPZldlZWspLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5BbGxvd2VkRGF5c09mV2Vla0Z1bmN0aW9uJCA9IHRoaXMuYWxsb3dlZERheXNPZldlZWskLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc0luQWxsb3dlZERheXNPZldlZWtTZXQoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2NoZWR1bGVEYXlzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZWZmZWN0aXZlU2NoZWR1bGVEYXlzKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50VGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50aW1lem9uZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICghY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcih4KSAmJiB4LnRpbWV6b25lID8geC50aW1lem9uZSA6IHVuZGVmaW5lZCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlZmZlY3RpdmVUaW1lem9uZU5vcm1hbCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHgpICYmIHgudGltZXpvbmVOb3JtYWwgPyB4LnRpbWV6b25lTm9ybWFsIDogdW5kZWZpbmVkKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jdXJyZW50U2VsZWN0aW9uVmFsdWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlU3RhcnQkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5kYXRlU2NoZWR1bGVSYW5nZS5zdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVEYXRlQmxvY2tUaW1pbmdEYXRlRmFjdG9yeSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVN0YXJ0JC5waXBlKFxuICAgIG1hcCgoc3RhcnQpID0+IChzdGFydCA/IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHsgc3RhcnQgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja0R1cmF0aW9uU3BhbiQ6IE9ic2VydmFibGU8RGF0ZUJsb2NrRHVyYXRpb25TcGFuPERhdGVCbG9jaz5bXT4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gZXhwYW5kRGF0ZVNjaGVkdWxlUmFuZ2UoeyAuLi54LCBkdXJhdGlvbjogMSB9KSA6IFtdKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkSW5kZXhlcyQ6IE9ic2VydmFibGU8U2V0PERhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja0R1cmF0aW9uU3BhbiQucGlwZShcbiAgICBtYXAoKHgpID0+IG5ldyBTZXQoeC5tYXAoKHkpID0+IHkuaSkpKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkRGF0ZXMkOiBPYnNlcnZhYmxlPFNldDxJU084NjAxRGF5U3RyaW5nPj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZGF0ZUZhY3RvcnkpID0+IHtcbiAgICAgIHJldHVybiBkYXRlRmFjdG9yeSA/IHRoaXMuc2VsZWN0aW9uVmFsdWVTZWxlY3RlZEluZGV4ZXMkLnBpcGUobWFwKCh4KSA9PiBtYXBWYWx1ZXNUb1NldCh4LCAoeSkgPT4gZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nKGRhdGVGYWN0b3J5KHkpKSkpKSA6IG9mKG5ldyBTZXQ8SVNPODYwMURheVN0cmluZz4oKSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuZWZmZWN0aXZlVGltZXpvbmVOb3JtYWwkKSxcbiAgICBtYXAoKFt4LCB0aW1lem9uZU5vcm1hbF0pID0+IHtcbiAgICAgIGlmICh4ICYmIHRpbWV6b25lTm9ybWFsKSB7XG4gICAgICAgIHggPSB7XG4gICAgICAgICAgZGF0ZVNjaGVkdWxlUmFuZ2U6IHtcbiAgICAgICAgICAgIC4uLnguZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICAgICAgICBzdGFydDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgIGVuZDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLmVuZClcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lRGF0ZUJsb2NrRHVyYXRpb25TcGFuJDogT2JzZXJ2YWJsZTxEYXRlQmxvY2tEdXJhdGlvblNwYW48RGF0ZUJsb2NrPltdPiA9IHRoaXMuc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSh7IC4uLngsIGR1cmF0aW9uOiAxIH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG5leHRUb2dnbGVTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4+ID0gdGhpcy5oYXNDb25maWd1cmVkTWluTWF4UmFuZ2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpID0+IHtcbiAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj47XG5cbiAgICAgIGlmIChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6ICdhbGwnKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6IHVuZGVmaW5lZCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVTY2hlZHVsZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY2VsbENvbnRlbnRGYWN0b3J5JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNlbGxDb250ZW50RmFjdG9yeSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50b2dnbGVkSW5kZXhlcy5zaXplID4gMCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzVmlld1JlYWRvbmx5JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzVmlld1JlYWRvbmx5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICByZWFkb25seSBzZXRNaW5NYXhEYXRlUmFuZ2UgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKTtcbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFdlZWsgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKTtcbiAgcmVhZG9ubHkgc2V0RmlsdGVyID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEZpbHRlcik7XG4gIHJlYWRvbmx5IHNldEV4Y2x1c2lvbnMgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoRXhjbHVzaW9ucyk7XG4gIHJlYWRvbmx5IHNldENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKTtcbiAgcmVhZG9ubHkgY2xlYXJGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHVuZGVmaW5lZCkpO1xuXG4gIHJlYWRvbmx5IHNldFRpbWV6b25lID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aFRpbWV6b25lVmFsdWUpO1xuICByZWFkb25seSBzZXRJbnB1dFJhbmdlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZSk7XG5cbiAgLy8gTk9URTogU2VsZWN0ZWQgZGF0ZXMgYXJlIE5PVCBzZWxlY3RlZCBpbmRleGVzLiBUaGV5IGFyZSB0aGUgaW50ZXJuYWwgc2VsZWN0ZWQgZGF0ZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VsZWN0aW9uLlxuICByZWFkb25seSB0b2dnbGVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdG9nZ2xlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgdG9nZ2xlIH0pKTtcbiAgcmVhZG9ubHkgYWRkU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGFkZDogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IGFkZCB9KSk7XG4gIHJlYWRvbmx5IHJlbW92ZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByZW1vdmU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyByZW1vdmUgfSkpO1xuICByZWFkb25seSBzZXRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0IH0pKTtcblxuICAvLyBOT1RFOiBTZWxlY3RlZCBpbmRleGVzIGFyZSB0aGUgdHlwaWNhbC9leHBlY3RlZCBpbmRleGVzIHRoYXQgYXJlIHNlbGVjdGVkIG9yIG5vdC5cbiAgcmVhZG9ubHkgc2V0U2VsZWN0ZWRJbmRleGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0LCBpbnZlcnRTZXRCZWhhdmlvcjogdHJ1ZSB9KSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0QWxsRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZWxlY3RBbGw6IEFsbE9yTm9uZVNlbGVjdGlvbiA9ICdhbGwnKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG5cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIHJlYWRvbmx5IHNldFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKTtcbiAgcmVhZG9ubHkgc2V0QWxsb3dBbGxTY2hlZHVsZURheXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCBbRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKSk7XG5cbiAgcmVhZG9ubHkgc2V0RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHZhbHVlOiBNYXliZTxEYXRlU2NoZWR1bGVSYW5nZT4pID0+IHVwZGF0ZVN0YXRlV2l0aERhdGVTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGUsIHZhbHVlKSk7XG4gIHJlYWRvbmx5IHNldENlbGxDb250ZW50RmFjdG9yeSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSkgPT4gKHsgLi4uc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeSB9KSk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgdGhlIHBhcmVudCB2aWV3IHRvIHByb3BvZ2F0ZSBhIHJlYWRvbmx5IHN0YXRlLlxuICAgKlxuICAgKiBTaG91bGQgdHlwaWNhbGx5IG5vdCBiZSB1c2VkIGJ5IHRoZSB1c2VyIGRpcmVjdGx5IHdpdGggdGhlIGludGVudGlvbiBvZiB0aGUgcGFyZW50IHN5bmNocm9uaXppbmcgdG8gdGhpcyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldFZpZXdSZWFkb25seVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgaXNWaWV3UmVhZG9ubHk6IGJvb2xlYW4pID0+ICh7IC4uLnN0YXRlLCBpc1ZpZXdSZWFkb25seSB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyB0b2dnbGVkSW5kZXhlcyB9ID0gc3RhdGU7XG5cbiAgaWYgKHRvZ2dsZWRJbmRleGVzLnNpemUgPT09IDAgJiYgaW5pdGlhbFNlbGVjdGlvblN0YXRlID09PSAnYWxsJykge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNlbGVjdEFsbDogaW5pdGlhbFNlbGVjdGlvblN0YXRlIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uc3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIoY3VycmVudFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiBNYXliZTxib29sZWFuPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5jdXJyZW50U3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIH07XG5cbiAgaWYgKEJvb2xlYW4oY3VycmVudFN0YXRlLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSAhPT0gQm9vbGVhbihjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwge30pOyAvLyByZWNhbGN1bGF0ZSBpZiBjaGFuZ2Ugb2NjdXJzIGFzIGl0IHdpbGwgYWZmZWN0IHRoZSBvdXRwdXQgdmFsdWVcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRFeGNsdXNpb25zOiBNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBjb21wdXRlZEV4Y2x1c2lvbnM6IE1heWJlPERhdGVCbG9ja0luZGV4W10+O1xuXG4gIGlmIChpbnB1dEV4Y2x1c2lvbnMpIHtcbiAgICBjb25zdCB7IGluZGV4RmFjdG9yeSB9ID0gc3RhdGU7XG4gICAgY29uc3QgaW5kZXhBcnJheUZhY3RvcnkgPSBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEFycmF5RmFjdG9yeShpbmRleEZhY3RvcnkpO1xuICAgIGNvbXB1dGVkRXhjbHVzaW9ucyA9IGluZGV4QXJyYXlGYWN0b3J5KGlucHV0RXhjbHVzaW9ucyk7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0RXhjbHVzaW9ucywgY29tcHV0ZWRFeGNsdXNpb25zIH07XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgbWluTWF4RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgc3RhdGUgPSB7IC4uLnN0YXRlIH07XG5cbiAgaWYgKG1pbk1heERhdGVSYW5nZSAhPSBudWxsICYmICFpc0luZmluaXRlRGF0ZVJhbmdlKG1pbk1heERhdGVSYW5nZSkpIHtcbiAgICBzdGF0ZS5taW5NYXhEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydDogbWluTWF4RGF0ZVJhbmdlLnN0YXJ0ICE9IG51bGwgPyBzdGFydE9mRGF5KG1pbk1heERhdGVSYW5nZS5zdGFydCkgOiB1bmRlZmluZWQsXG4gICAgICBlbmQ6IG1pbk1heERhdGVSYW5nZS5lbmQgIT0gbnVsbCA/IGVuZE9mRGF5KG1pbk1heERhdGVSYW5nZS5lbmQpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgc3RhdGUubWluTWF4RGF0ZVJhbmdlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgc3RhdGUuZmlsdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbnB1dEZpbHRlcjogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGNvbXB1dGVkRXhjbHVzaW9uczogZXhjbHVzaW9ucywgbWluTWF4RGF0ZVJhbmdlIH0gPSBzdGF0ZTtcblxuICBsZXQgaXNFbmFibGVkRmlsdGVyRGF5OiBNYXliZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSAoKSA9PiB0cnVlO1xuICBsZXQgZmlsdGVyOiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPiA9IG51bGw7XG5cbiAgLy8gY3JlYXRlIHRoZSBmaWx0ZXIgdXNpbmcgaW5wdXRGaWx0ZXIsIGV4Y2x1c2lvbnMsIGFuZCBtaW5NYXhEYXRlUmFuZ2VcbiAgaWYgKGlucHV0RmlsdGVyIHx8IGV4Y2x1c2lvbnM/Lmxlbmd0aCB8fCBtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICBsZXQgZW5hYmxlZEZpbHRlcjogRGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZztcblxuICAgIGlmIChpbnB1dEZpbHRlcikge1xuICAgICAgZmlsdGVyID0gY29weURhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWcoaW5wdXRGaWx0ZXIpOyAvLyBjb3B5IGZpbHRlclxuXG4gICAgICBpZiAoZXhjbHVzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIGV4OiB1bmlxdWUobWVyZ2VBcnJheXMoW2ZpbHRlci5leCwgZXhjbHVzaW9uc10pKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlZEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW5hYmxlZEZpbHRlciA9IHtcbiAgICAgICAgdzogJzg5JyxcbiAgICAgICAgZXg6IGV4Y2x1c2lvbnMgYXMgbnVtYmVyW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1pbk1heERhdGVSYW5nZSkge1xuICAgICAgZW5hYmxlZEZpbHRlci5taW5NYXhEYXRlUmFuZ2UgPSBtaW5NYXhEYXRlUmFuZ2U7XG4gICAgICBlbmFibGVkRmlsdGVyLnNldFN0YXJ0QXNNaW5EYXRlID0gZmlsdGVyPy5zdGFydCA/IHRydWUgOiBmYWxzZTsgLy8gSWYgYSBzdGFydCBkYXRlIGlzIHNldCwgdGhlbiBpdCBiZWNvbWVzIHRoZSBmbG9vci5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaW5wdXQgZmlsdGVyIGhhcyBhIHN0YXJ0IGRhdGUsIHVzZSB0aGF0IGFzIHRoZSByZWxhdGl2ZSBzdGFydCB0byBlbnN1cmUgaW5kZXhlcyBhcmUgY29tcGFyZWQgdGhlIHNhbWUsXG4gICAgICogb3RoZXJ3aXNlIHVzZSB0aGUgc3RhdGUncyBzdGFydC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHRoZSBpbmRleCBjYWxjdWxhdGlvbnMuXG4gICAgICovXG4gICAgZW5hYmxlZEZpbHRlci5zdGFydCA9IGlucHV0RmlsdGVyPy5zdGFydCA/PyBzdGF0ZS5zdGFydDtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZmlsdGVyXG4gICAgaXNFbmFibGVkRmlsdGVyRGF5ID0gZGF0ZVNjaGVkdWxlRGF0ZUZpbHRlcihlbmFibGVkRmlsdGVyKTtcbiAgfVxuXG4gIHN0YXRlID0geyAuLi5zdGF0ZSwgZmlsdGVyLCBpc0VuYWJsZWRGaWx0ZXJEYXkgfTtcblxuICAvLyBGb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFib3ZlLCB1c2UgdGhlIGZpbHRlcidzIHN0YXJ0IGRhdGUgYXMgdGhlIHJlbGF0aXZlIHN0YXJ0IGlmIGFwcGxpY2FibGUuXG4gIGlmIChmaWx0ZXIgJiYgZmlsdGVyLnN0YXJ0KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7XG4gICAgc3RhdGUuc3RhcnQgPSBzdGFydDtcbiAgICBzdGF0ZS5pbmRleEZhY3RvcnkgPSBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnkoeyBzdGFydCB9KTtcbiAgICBzdGF0ZS5pbmRleERheU9mV2VlayA9IGRhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnkoc3RhcnQpO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byByZS1hcHBseSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gc3RhdGUgb25jZSBmaWx0ZXIgaXMgYXBwbGllZFxuICBpZiAoc3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGUsIHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG4gIH1cblxuICAvLyByZS1jYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiBnaXZlbiB0aGUgZmlsdGVyXG4gIGNvbnN0IHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSA9IHN0YXRlO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2Uoc3RhdGUsIHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhUaW1lem9uZVZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIHRpbWV6b25lOiBNYXliZTxUaW1lem9uZVN0cmluZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSB9ID0gc3RhdGU7XG5cbiAgY29uc3QgdGltZXpvbmVOb3JtYWwgPSB0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmICh0aW1lem9uZU5vcm1hbCAmJiBjdXJyZW50U2VsZWN0aW9uVmFsdWUpIHtcbiAgICAvLyB1cGRhdGUgdGhlIHNlbGVjdGlvbiB2YWx1ZSB0byByZWZsZWN0IHRoZSB0aW1lem9uZSBjaGFuZ2VzLlxuICAgIGNvbnN0IHsgZGF0ZVNjaGVkdWxlUmFuZ2U6IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZSB9ID0gY3VycmVudFNlbGVjdGlvblZhbHVlO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IHRpbWV6b25lTm9ybWFsLnRhcmdldERhdGVUb1N5c3RlbURhdGUoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLmVuZCk7XG5cbiAgICBjb25zdCBuZXdSYW5nZTogRGF0ZVNjaGVkdWxlUmFuZ2UgPSB7XG4gICAgICAuLi5jdXJyZW50U2VsZWN0aW9uVmFsdWUuZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSh7IC4uLnN0YXRlLCB0aW1lem9uZSwgdGltZXpvbmVOb3JtYWwgfSwgbmV3UmFuZ2UpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCB0aW1lem9uZSwgdGltZXpvbmVOb3JtYWwgfTsgLy8gbm8gY2hhbmdlIGluIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aERhdGVTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBNYXliZTxEYXRlU2NoZWR1bGVSYW5nZT4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHRpbWV6b25lTm9ybWFsLCBjdXJyZW50U2VsZWN0aW9uVmFsdWUgfSA9IHN0YXRlO1xuICBjb25zdCBjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UgPSBjdXJyZW50U2VsZWN0aW9uVmFsdWU/LmRhdGVTY2hlZHVsZVJhbmdlOyAvLyBjdXJyZW50IHJhbmdlIGlzIGFsd2F5cyBpbiBzeXN0ZW0gdGltZVxuXG4gIGlmICghY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcihzdGF0ZSkgJiYgdGltZXpvbmVOb3JtYWwpIHtcbiAgICAvLyBXaGVuIHVzaW5nIHRpbWV6b25lcywgYWx3YXlzIHJldHVybiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGF5LiBJbnB1dHMgYXJlIGNvbnZlcnRlZCB0byB0aGUgc3lzdGVtIHRpbWUgYW5kIHVzZWQgYXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXkuXG4gICAgLy8gT3V0cHV0cyByZW1haW4gYWNjdXJhdGUuXG5cbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICBjaGFuZ2UgPSB7XG4gICAgICAgIC4uLmNoYW5nZSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0T2ZEYXkodGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShjaGFuZ2Uuc3RhcnQpKSxcbiAgICAgICAgZW5kOiBzdGFydE9mRGF5KHRpbWV6b25lTm9ybWFsLnN5c3RlbURhdGVUb1RhcmdldERhdGUoY2hhbmdlLmVuZCkpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzU2FtZVZhbHVlID0gaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLCBjaGFuZ2UpO1xuXG4gIGlmIChpc1NhbWVWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbmdlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydDogY2hhbmdlLnN0YXJ0LCBpbnB1dEVuZDogY2hhbmdlLmVuZCwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoY2hhbmdlLmV4KSB9O1xuICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKSwgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMoY2hhbmdlLncgfHwgJzg5JykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGUpOyAvLyBjbGVhciBzZWxlY3Rpb24sIHJldGFpbiBkaXNhYmxlZCBkYXlzXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGVmYXVsdFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgZGVmYXVsdFNjaGVkdWxlRGF5czogY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBkZWZhdWx0U2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gZnVsbFdlZWtEYXlTY2hlZHVsZURheUNvZGVzKCkpO1xuXG4gIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KGRlZmF1bHRTY2hlZHVsZURheXMsIGN1cnJlbnREZWZhdWx0U2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gbm8gY2hhbmdlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgZGVmYXVsdFNjaGVkdWxlRGF5cyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgc2NoZWR1bGVEYXlzOiBjdXJyZW50U2NoZWR1bGVEYXlzIH0gPSBzdGF0ZTtcbiAgY29uc3Qgc2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gW10pO1xuXG4gIGxldCBuZXdTY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPiB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRTY2hlZHVsZURheXMgIT0gbnVsbCAmJiBjaGFuZ2UgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KHNjaGVkdWxlRGF5cywgY3VycmVudFNjaGVkdWxlRGF5cykpIHtcbiAgICAgIG5ld1NjaGVkdWxlRGF5cyA9IHVuZGVmaW5lZDsgLy9ubyBjaGFuZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gc2NoZWR1bGVEYXlzO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjdXJyZW50U2NoZWR1bGVEYXlzICE9PSBjaGFuZ2UpIHtcbiAgICBuZXdTY2hlZHVsZURheXMgPSBjaGFuZ2UgPyBzY2hlZHVsZURheXMgOiBudWxsOyAvLyBzZXQgdGhlIG5ldyBvbmUsIG9yIGNsZWFyIGl0XG4gIH1cblxuICBpZiAobmV3U2NoZWR1bGVEYXlzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgc2NoZWR1bGVEYXlzOiBuZXdTY2hlZHVsZURheXMgPz8gdW5kZWZpbmVkIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZVVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMocHJldmlvdXNTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHByZXZpb3VzU2NoZWR1bGVEYXlzID0gcHJldmlvdXNTdGF0ZS5lZmZlY3RpdmVTY2hlZHVsZURheXM7XG4gIGNvbnN0IG5leHRTY2hlZHVsZURheXMgPSBuZXh0U3RhdGUuc2NoZWR1bGVEYXlzID8/IG5leHRTdGF0ZS5kZWZhdWx0U2NoZWR1bGVEYXlzO1xuXG4gIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KG5leHRTY2hlZHVsZURheXMsIHByZXZpb3VzU2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7IC8vIHRoZSBkZWZhdWx0IG9yIGlucHV0IHNjaGVkdWxlIGNoYW5nZWQgYnV0IHRoZSBzY2hlZHVsZSBpcyBzdGlsbCB0aGUgc2FtZSwgc28gbm8gbmVlZCBmb3IgYW4gdXBkYXRlLlxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoc2ltcGxpZnlEYXRlU2NoZWR1bGVEYXlDb2RlcyhuZXh0U2NoZWR1bGVEYXlzKSk7XG4gICAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0KG5leHRTY2hlZHVsZURheXMpO1xuXG4gICAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIC8vIHVwZGF0ZSB0aGUgZWZmZWN0aXZlIHNjaGVkdWxlIGRheXMgYW5kIGFsbG93ZWQgZGF5cyBvZiB3ZWVrXG4gICAgICBlZmZlY3RpdmVTY2hlZHVsZURheXMsXG4gICAgICBhbGxvd2VkRGF5c09mV2Vla1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2Uge1xuICByZXNldD86IHRydWU7XG4gIHRvZ2dsZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIGFkZD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHJlbW92ZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHNldD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHNlbGVjdEFsbD86IEFsbE9yTm9uZVNlbGVjdGlvbjtcbiAgLyoqXG4gICAqIEludmVydHMgdGhlIHNldCBkYXRlIGNoYW5naW5nIGJlaGF2aW9yIHNvIHRoYXQgdGhlIHNldCBpbnB1dCBpcyB0cmVhdGVkIGFzIGl0ZW1zIHRoYXQgc2hvdWxkIGJlIHJldGFpbmVkIGluc3RlYWQgb2YgZXhjbHVkZWQuXG4gICAqXG4gICAqIElnbm9yZWQgd2hlbiBzZXQgaXMgbm90IHVzZWQuIElnbm9yZWQgZm9yIHNlbGVjdEFsbC5cbiAgICovXG4gIGludmVydFNldEJlaGF2aW9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbmRleERheU9mV2VlaywgaW5wdXRTdGFydDogY3VycmVudElucHV0U3RhcnQsIGlucHV0RW5kOiBjdXJyZW50SW5wdXRFbmQsIG1pbk1heERhdGVSYW5nZSwgZmlsdGVyIH0gPSBzdGF0ZTtcbiAgY29uc3QgeyBzdGFydDogbWluRGF0ZSwgZW5kOiBtYXhEYXRlIH0gPSBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHN0YXRlKTtcbiAgbGV0IGlucHV0U3RhcnQgPSBjdXJyZW50SW5wdXRTdGFydDtcbiAgbGV0IGlucHV0RW5kID0gY3VycmVudElucHV0RW5kO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgc2V0IG9mIGluZGV4ZXMgdGhhdCBhcmUgaW50ZXJuYWxseSBcInNlbGVjdGVkXCIgc28gdGhhdCB0aGV5IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBpbnB1dFN0YXJ0L2lucHV0RW5kIGRhdGUgcmFuZ2UuXG4gICAqXG4gICAqIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIGluZGV4ZXMgdGhhdCBhcmUgc2VsZWN0ZWQuXG4gICAqL1xuICBsZXQgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQmxvY2tJbmRleD47XG5cbiAgZnVuY3Rpb24gYXNJbmRleGVzKGluZGV4ZXM6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pOiBEYXRlQmxvY2tJbmRleFtdIHtcbiAgICByZXR1cm4gaXRlcmFibGVUb0FycmF5KGluZGV4ZXMpLm1hcChpbmRleEZhY3RvcnkpO1xuICB9XG5cbiAgaWYgKGNoYW5nZS5yZXNldCB8fCBjaGFuZ2Uuc2VsZWN0QWxsICE9IG51bGwgfHwgY2hhbmdlLnNldCAhPSBudWxsKSB7XG4gICAgbGV0IHNldDogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSBjaGFuZ2Uuc2V0ID8/IFtdO1xuICAgIGNvbnN0IHNlbGVjdEFsbDogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPiA9IGNoYW5nZS5yZXNldCA9PT0gdHJ1ZSA/IHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSA6IGNoYW5nZS5zZWxlY3RBbGw7XG5cbiAgICBzd2l0Y2ggKHNlbGVjdEFsbCkge1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgaWYgKG1pbkRhdGUgIT0gbnVsbCAmJiBtYXhEYXRlICE9IG51bGwpIHtcbiAgICAgICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZTtcbiAgICAgICAgICBpbnB1dEVuZCA9IG1heERhdGU7XG4gICAgICAgICAgc2V0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgaW5wdXRTdGFydCA9IG51bGw7XG4gICAgICAgIGlucHV0RW5kID0gbnVsbDtcbiAgICAgICAgc2V0ID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChhc0luZGV4ZXMoc2V0KSk7XG5cbiAgICBpZiAoY2hhbmdlLmludmVydFNldEJlaGF2aW9yICYmIG1pbkRhdGUgJiYgbWF4RGF0ZSAmJiAhc2VsZWN0QWxsKSB7XG4gICAgICBjb25zdCBtaW5JbmRleCA9IGluZGV4RmFjdG9yeShtaW5EYXRlKTtcbiAgICAgIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KG1heERhdGUpO1xuXG4gICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZTtcbiAgICAgIGlucHV0RW5kID0gbWF4RGF0ZTtcbiAgICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChyYW5nZShtaW5JbmRleCwgbWF4SW5kZXggKyAxKS5maWx0ZXIoKHgpID0+ICF0b2dnbGVkSW5kZXhlcy5oYXMoeCkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KHN0YXRlLnRvZ2dsZWRJbmRleGVzKTtcblxuICAgIGlmIChjaGFuZ2UudG9nZ2xlKSB7XG4gICAgICBjb25zdCBhbGxvd2VkVG9Ub2dnbGUgPSBhc0luZGV4ZXMoY2hhbmdlLnRvZ2dsZSkuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgICAgIHRvZ2dsZUluU2V0KHRvZ2dsZWRJbmRleGVzLCBhbGxvd2VkVG9Ub2dnbGUpO1xuICAgIH1cblxuICAgIGxldCBhZGRUb0V4Y2x1c2lvbjogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj47XG4gICAgbGV0IHJlbW92ZUZyb21FeGNsdXNpb246IE1heWJlPEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+O1xuXG4gICAgaWYgKGNoYW5nZS5hZGQpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgYWRkVG9FeGNsdXNpb24gPSBjaGFuZ2UuYWRkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5hZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5yZW1vdmUpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRUb0V4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZFRvRXhjbHVzaW9uKSB7XG4gICAgICByZW1vdmVGcm9tU2V0KHRvZ2dsZWRJbmRleGVzLCBhc0luZGV4ZXMoYWRkVG9FeGNsdXNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAocmVtb3ZlRnJvbUV4Y2x1c2lvbikge1xuICAgICAgYWRkVG9TZXQodG9nZ2xlZEluZGV4ZXMsIGFzSW5kZXhlcyhyZW1vdmVGcm9tRXhjbHVzaW9uKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIHRvZ2dsZWRJbmRleGVzIH07XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuXG4gIC8vIFJlY2FsY3VsYXRlIHRoZSByYW5nZSBhbmQgc2ltcGxpZmllZCB0byBleGNsdXNpb25zXG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24obmV4dFN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24pIHtcbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5uZXh0U3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KHJhbmdlQW5kRXhjbHVzaW9uLmV4Y2x1ZGVkKSwgaW5wdXRTdGFydDogcmFuZ2VBbmRFeGNsdXNpb24uc3RhcnQsIGlucHV0RW5kOiByYW5nZUFuZEV4Y2x1c2lvbi5lbmQgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gc2VsZWN0ZWQgZGF5c1xuICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHsgLi4uc3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KCksIGlucHV0U3RhcnQ6IG51bGwsIGlucHV0RW5kOiBudWxsIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgaW5kZXhGYWN0b3J5LCBtaW5NYXhEYXRlUmFuZ2UgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfTogUGFydGlhbDxEYXRlUmFuZ2U+ID0gbWluTWF4RGF0ZVJhbmdlID8/IHt9O1xuXG4gIGNvbnN0IGlucHV0U3RhcnQ6IERhdGUgPSBzdGFydE9mRGF5KGNoYW5nZS5pbnB1dFN0YXJ0KTtcbiAgY29uc3QgaW5wdXRFbmQ6IERhdGUgPSBlbmRPZkRheShjaGFuZ2UuaW5wdXRFbmQpO1xuXG4gIGNvbnN0IGlzVmFsaWRSYW5nZSA9IG1pbkRhdGUgIT0gbnVsbCB8fCBtYXhEYXRlICE9IG51bGwgPyBpc0RhdGVJbkRhdGVSYW5nZUZ1bmN0aW9uKHsgc3RhcnQ6IG1pbkRhdGUgPz8gdW5kZWZpbmVkLCBlbmQ6IG1heERhdGUgPz8gdW5kZWZpbmVkIH0pIDogKCkgPT4gdHJ1ZTtcblxuICBpZiAoIWlzVmFsaWRSYW5nZShpbnB1dFN0YXJ0KSB8fCAhaXNWYWxpZFJhbmdlKGlucHV0RW5kKSB8fCAoaXNTYW1lRGF0ZURheShpbnB1dFN0YXJ0LCBjdXJyZW50SW5wdXRTdGFydCkgJiYgaXNTYW1lRGF0ZURheShpbnB1dEVuZCwgY3VycmVudElucHV0RW5kKSkpIHtcbiAgICByZXR1cm4gc3RhdGU7IC8vIGlmIG5vIGNoYW5nZSwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICB9XG5cbiAgLy8gcmV0YWluIGFsbCBpbmRleGVzIHRoYXQgYXJlIHdpdGhpbiB0aGUgbmV3IHJhbmdlXG4gIGNvbnN0IG1pbkluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICBjb25zdCBtYXhJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dEVuZCkgKyAxO1xuXG4gIGNvbnN0IGN1cnJlbnRJbmRleGVzOiBEYXRlQmxvY2tJbmRleFtdID0gQXJyYXkuZnJvbShzdGF0ZS50b2dnbGVkSW5kZXhlcyk7XG4gIGNvbnN0IGlzSW5DdXJyZW50UmFuZ2UgPSBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24oeyBtaW5JbmRleCwgbWF4SW5kZXggfSk7XG4gIGNvbnN0IGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UgPSBjdXJyZW50SW5kZXhlcy5maWx0ZXIoaXNJbkN1cnJlbnRSYW5nZSk7XG4gIGNvbnN0IHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChleGNsdWRlZEluZGV4ZXNJbk5ld1JhbmdlKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCB0b2dnbGVkSW5kZXhlcywgaW5wdXRTdGFydCwgaW5wdXRFbmQgfTtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICBuZXh0U3RhdGUuY3VycmVudFNlbGVjdGlvblZhbHVlID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUobmV4dFN0YXRlKTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PiB7XG4gIGNvbnN0IHsgYWxsb3dlZERheXNPZldlZWssIGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrIH0gPSBzdGF0ZTtcbiAgbGV0IGlzSW5TdGFydEFuZEVuZFJhbmdlOiBJc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSBpc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uKHsgc3RhcnQ6IHN0YXRlLnN0YXJ0LCByYW5nZTogeyBzdGFydDogaW5wdXRTdGFydCwgZW5kOiBpbnB1dEVuZCB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlzSW5TdGFydEFuZEVuZFJhbmdlID0gKCkgPT4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKGlucHV0OiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0KTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBpbmRleERheU9mV2VlayhpbmRleCk7XG5cbiAgICBjb25zdCBpc0luU2VsZWN0ZWRSYW5nZSA9IGlzSW5TdGFydEFuZEVuZFJhbmdlKGluZGV4KTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gc3RhdGUudG9nZ2xlZEluZGV4ZXMuaGFzKGluZGV4KTtcbiAgICBjb25zdCBpc0FsbG93ZWREYXlPZldlZWsgPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoZGF5T2ZXZWVrKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGlzQWxsb3dlZERheU9mV2VlayAmJiAoKGlzSW5TZWxlY3RlZFJhbmdlICYmICFpc1NlbGVjdGVkKSB8fCAoaXNTZWxlY3RlZCAmJiAhaXNJblNlbGVjdGVkUmFuZ2UpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT4ge1xuICBjb25zdCB7IGluZGV4RmFjdG9yeSwgYWxsb3dlZERheXNPZldlZWssIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cywgaW5kZXhEYXlPZldlZWssIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyLCBmaWx0ZXIgfSA9IHN0YXRlO1xuICBjb25zdCByYW5nZUFuZEV4Y2x1c2lvbiA9IGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKHN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBzdGFydDogcmFuZ2VTdGFydCwgZW5kOiByYW5nZUVuZCwgZXhjbHVkZWQ6IGFsbEV4Y2x1ZGVkLCBkYXRlQmxvY2tSYW5nZSB9ID0gcmFuZ2VBbmRFeGNsdXNpb247XG4gIGxldCBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlOiBEYXRlQmxvY2tJbmRleFtdID0gW107XG4gIGxldCBpbmRleE9mZnNldCA9IGRhdGVCbG9ja1JhbmdlLmk7XG5cbiAgbGV0IHN0YXJ0ID0gcmFuZ2VTdGFydDtcbiAgbGV0IGVuZCA9IHJhbmdlRW5kO1xuXG4gIC8vIElmIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIGlzIHRydWUsIHRoZW4gd2UgbmVlZCB0byBvZmZzZXQgdGhlIHZhbHVlcyB0byBiZSByZWxhdGl2ZSB0byB0aGF0IHN0YXJ0LlxuICBpZiAoY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgJiYgZmlsdGVyPy5zdGFydCkge1xuICAgIHN0YXJ0ID0gZmlsdGVyLnN0YXJ0O1xuXG4gICAgaWYgKGZpbHRlcj8uZW5kKSB7XG4gICAgICBlbmQgPSBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUoZW5kLCBmaWx0ZXIuZW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0ID0gaW5kZXhGYWN0b3J5KHJhbmdlU3RhcnQpIC0gaW5kZXhGYWN0b3J5KHN0YXJ0KTtcbiAgICBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlID0gcmFuZ2UoMCwgZmlsdGVyU3RhcnRJbmRleE9mZnNldCk7XG4gICAgaW5kZXhPZmZzZXQgPSBpbmRleE9mZnNldCAtIGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQ7XG4gIH1cblxuICBjb25zdCBleGNsdWRlZCA9IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyXG4gICAgPyBhbGxFeGNsdWRlZC5maWx0ZXIoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZEluZGV4ID0gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKHgpKTsgLy8gPz8/XG4gICAgICAgIHJldHVybiBpc0V4Y2x1ZGVkSW5kZXg7XG4gICAgICB9KVxuICAgIDogYWxsRXhjbHVkZWQ7XG5cbiAgY29uc3Qgb2Zmc2V0RXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W10gPSBleGNsdWRlZC5tYXAoKHgpID0+IHggLSBpbmRleE9mZnNldCk7IC8vIHNldCB0byB0aGUgcHJvcGVyIG9mZnNldFxuXG4gIGNvbnN0IGV4ID0gWy4uLmZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UsIC4uLm9mZnNldEV4Y2x1ZGVkXTtcblxuICBjb25zdCB3OiBEYXRlU2NoZWR1bGVFbmNvZGVkV2VlayA9IGRhdGVTY2hlZHVsZUVuY29kZWRXZWVrKGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IGQ6IERhdGVCbG9ja0luZGV4W10gPSBbXTsgLy8gXCJpbmNsdWRlZFwiIGJsb2NrcyBhcmUgbmV2ZXIgdXNlZC9jYWxjdWxhdGVkLlxuXG4gIC8vIEFsd2F5cyBlbnN1cmUgdGhlIGVuZCBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgc3RhcnQuXG4gIGlmIChpc0JlZm9yZShlbmQsIHN0YXJ0KSkge1xuICAgIGVuZCA9IHN0YXJ0OyAvLyBlbmQgaXMgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGRhdGVTY2hlZHVsZVJhbmdlOiBEYXRlU2NoZWR1bGVSYW5nZSA9IHtcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgdyxcbiAgICBkLFxuICAgIGV4XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRlU2NoZWR1bGVSYW5nZSxcbiAgICBtaW5NYXhSYW5nZTogeyBzdGFydCwgZW5kIH1cbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24gZXh0ZW5kcyBEYXRlUmFuZ2Uge1xuICBkYXRlQmxvY2tSYW5nZTogRGF0ZUJsb2NrUmFuZ2VXaXRoUmFuZ2U7XG4gIGV4Y2x1ZGVkOiBEYXRlQmxvY2tJbmRleFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbj4ge1xuICBjb25zdCB7IHN0YXJ0OiBjdXJyZW50U3RhcnQsIGlzRW5hYmxlZERheSwgaXNFbmFibGVkRmlsdGVyRGF5IH0gPSBzdGF0ZTtcblxuICBjb25zdCBkYXRlRmFjdG9yeSA9IGRhdGVCbG9ja1RpbWluZ1N0YXJ0RGF0ZUZhY3RvcnkoeyBzdGFydDogY3VycmVudFN0YXJ0IH0sIHsgYXNzZXJ0VGltaW5nTWF0Y2hlc1RpbWV6b25lOiBmYWxzZSwgdXNlU3lzdGVtVGltZXpvbmU6IHRydWUgfSk7XG4gIGNvbnN0IGRhdGVCbG9ja1JhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZSk7XG5cbiAgaWYgKGRhdGVCbG9ja1JhbmdlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gcmV0dXJucyBudWxsIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UuaSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLnRvKTtcblxuICBjb25zdCBleGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXSA9IHJhbmdlKGRhdGVCbG9ja1JhbmdlLmksIGRhdGVCbG9ja1JhbmdlLnRvICsgMSkuZmlsdGVyKCh4KSA9PiB7XG4gICAgY29uc3QgaXNFeGNsdWRlZEluZGV4ID0gIWlzRW5hYmxlZERheSh4KSB8fCAhaXNFbmFibGVkRmlsdGVyRGF5KHgpO1xuICAgIHJldHVybiBpc0V4Y2x1ZGVkSW5kZXg7XG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdDogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uID0ge1xuICAgIGRhdGVCbG9ja1JhbmdlLFxuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICBleGNsdWRlZFxuICB9O1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlUmFuZ2U+IHtcbiAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQmxvY2tUaW1pbmdEYXRlRmFjdG9yeShzdGF0ZSk7XG4gIGNvbnN0IGRhdGVCbG9ja1JhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZSk7XG4gIGNvbnN0IGRhdGVSYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IGRhdGVCbG9ja1JhbmdlICE9IG51bGwgPyB7IHN0YXJ0OiBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS5pKSwgZW5kOiBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS50byBhcyBudW1iZXIpIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBkYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZT4ge1xuICBjb25zdCB7IGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGlucHV0U3RhcnQsIGlucHV0RW5kLCBpbmRleERheU9mV2VlaywgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuICBjb25zdCBlbmFibGVkRXhjbHVzaW9uSW5kZXhlcyA9IEFycmF5LmZyb20oc3RhdGUudG9nZ2xlZEluZGV4ZXMpLmZpbHRlcigoaSkgPT4gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKGkpKSk7XG4gIGNvbnN0IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzID0gbWluQW5kTWF4TnVtYmVyKGVuYWJsZWRFeGNsdXNpb25JbmRleGVzKTtcblxuICBsZXQgc3RhcnRSYW5nZTogTWF5YmU8RGF0ZUJsb2NrSW5kZXg+O1xuICBsZXQgZW5kUmFuZ2U6IE1heWJlPERhdGVCbG9ja0luZGV4PjtcblxuICBpZiAobWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICBzdGFydFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWluO1xuICAgIGVuZFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWF4O1xuICB9XG5cbiAgaWYgKGlucHV0U3RhcnQgIT0gbnVsbCAmJiBpbnB1dEVuZCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRTdGFydEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICAgIGNvbnN0IGlucHV0RW5kSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpO1xuXG4gICAgc3RhcnRSYW5nZSA9IHN0YXJ0UmFuZ2UgIT0gbnVsbCA/IE1hdGgubWluKGlucHV0U3RhcnRJbmRleCwgc3RhcnRSYW5nZSkgOiBpbnB1dFN0YXJ0SW5kZXg7XG4gICAgZW5kUmFuZ2UgPSBlbmRSYW5nZSAhPSBudWxsID8gTWF0aC5tYXgoaW5wdXRFbmRJbmRleCwgZW5kUmFuZ2UpIDogaW5wdXRFbmRJbmRleDtcbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIGNvbnN0IHNjYW5TdGFydEluZGV4ID0gc3RhcnRSYW5nZTtcbiAgICBjb25zdCBzY2FuRW5kSW5kZXggPSBlbmRSYW5nZTtcblxuICAgIC8vIGNsZWFyIHN0YXJ0IGFuZCBlbmRcbiAgICBzdGFydFJhbmdlID0gdW5kZWZpbmVkO1xuICAgIGVuZFJhbmdlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIG1pbiBpcyBlcXVhbCB0byB0aGUgc3RhcnQgaW5kZXgsIHRoZW4gd2UgYXJlIGluIHRoZSByYW5nZSBhbmQgbmVlZCB0byBpdGVyYXRlIGRhdGVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaXMgbm90IHNlbGVjdGVkL2V4Y2x1ZGVkLlxuICAgIGZvciAobGV0IGkgPSBzY2FuU3RhcnRJbmRleDsgaSA8PSBzY2FuRW5kSW5kZXg7IGkgKz0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgc3RhcnRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhbWUgd2l0aCB0aGUgbWF4XG4gICAgZm9yIChsZXQgaSA9IHNjYW5FbmRJbmRleDsgaSA+PSBzY2FuU3RhcnRJbmRleDsgaSAtPSAxKSB7XG4gICAgICBpZiAoaXNFbmFibGVkRmlsdGVyRGF5KGkpICYmIGlzRW5hYmxlZERheShpKSkge1xuICAgICAgICBlbmRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGk6IHN0YXJ0UmFuZ2UsIHRvOiBlbmRSYW5nZSB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==