@skyux/datetime 11.0.0-alpha.9 → 11.0.0-beta.0
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.
- package/documentation.json +1568 -1708
- package/esm2022/lib/modules/date-pipe/date-pipe.module.mjs +6 -7
- package/esm2022/lib/modules/date-pipe/date.pipe.mjs +3 -3
- package/esm2022/lib/modules/date-pipe/date.service.mjs +3 -3
- package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +3 -3
- package/esm2022/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +3 -3
- package/esm2022/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +3 -3
- package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +37 -52
- package/esm2022/lib/modules/date-range-picker/date-range-picker.module.mjs +4 -4
- package/esm2022/lib/modules/date-range-picker/date-range.service.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +5 -5
- package/esm2022/lib/modules/datepicker/datepicker-calendar-label.pipe.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker-calendar.component.mjs +9 -10
- package/esm2022/lib/modules/datepicker/datepicker-config.service.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker.component.mjs +5 -5
- package/esm2022/lib/modules/datepicker/datepicker.module.mjs +4 -4
- package/esm2022/lib/modules/datepicker/datepicker.service.mjs +3 -3
- package/esm2022/lib/modules/datepicker/daypicker-button.component.mjs +5 -5
- package/esm2022/lib/modules/datepicker/daypicker-cell.component.mjs +5 -5
- package/esm2022/lib/modules/datepicker/daypicker.component.mjs +7 -8
- package/esm2022/lib/modules/datepicker/fuzzy-date.service.mjs +3 -3
- package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +5 -5
- package/esm2022/lib/modules/datepicker/yearpicker.component.mjs +5 -5
- package/esm2022/lib/modules/shared/sky-datetime-resources.module.mjs +4 -4
- package/esm2022/lib/modules/timepicker/timepicker.component.mjs +5 -5
- package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +3 -3
- package/esm2022/lib/modules/timepicker/timepicker.module.mjs +4 -4
- package/fesm2022/skyux-datetime.mjs +136 -151
- package/fesm2022/skyux-datetime.mjs.map +1 -1
- package/lib/modules/date-pipe/date-pipe.module.d.ts +2 -3
- package/lib/modules/date-range-picker/date-range-picker.component.d.ts +4 -17
- package/package.json +14 -14
@@ -1,9 +1,9 @@
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Injector, Input, booleanAttribute, inject, } from '@angular/core';
|
3
|
-
import { FormBuilder, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule, Validators, } from '@angular/forms';
|
3
|
+
import { FormBuilder, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule, TouchedChangeEvent, Validators, } from '@angular/forms';
|
4
4
|
import { SkyLogService } from '@skyux/core';
|
5
|
-
import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule,
|
6
|
-
import { Subject, distinctUntilChanged, merge, takeUntil } from 'rxjs';
|
5
|
+
import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxModule, } from '@skyux/forms';
|
6
|
+
import { Subject, distinctUntilChanged, filter, merge, takeUntil } from 'rxjs';
|
7
7
|
import { SkyDatepickerModule } from '../datepicker/datepicker.module';
|
8
8
|
import { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';
|
9
9
|
import { SkyDateRangePickerEndDateResourceKeyPipe } from './date-range-picker-end-date-resource-key.pipe';
|
@@ -12,12 +12,12 @@ import { SkyDateRangeService } from './date-range.service';
|
|
12
12
|
import { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';
|
13
13
|
import { SKY_DEFAULT_CALCULATOR_IDS } from './types/date-range-default-calculator-configs';
|
14
14
|
import * as i0 from "@angular/core";
|
15
|
-
import * as i1 from "@
|
16
|
-
import * as i2 from "@angular/
|
17
|
-
import * as i3 from "
|
18
|
-
import * as i4 from "../datepicker/datepicker.
|
19
|
-
import * as i5 from "
|
20
|
-
import * as i6 from "@skyux/
|
15
|
+
import * as i1 from "@angular/common";
|
16
|
+
import * as i2 from "@angular/forms";
|
17
|
+
import * as i3 from "../datepicker/datepicker.component";
|
18
|
+
import * as i4 from "../datepicker/datepicker-input.directive";
|
19
|
+
import * as i5 from "@skyux/i18n";
|
20
|
+
import * as i6 from "@skyux/forms";
|
21
21
|
function areDateRangesEqual(rangeA, rangeB) {
|
22
22
|
return (!!rangeA &&
|
23
23
|
!!rangeB &&
|
@@ -116,12 +116,6 @@ export class SkyDateRangePickerComponent {
|
|
116
116
|
#injector;
|
117
117
|
#logger;
|
118
118
|
constructor() {
|
119
|
-
/**
|
120
|
-
* Whether to require users to specify a end date.
|
121
|
-
* @deprecated Use the `required` directive or Angular's `Validators.required`
|
122
|
-
* on the form control to mark the date range picker as required.
|
123
|
-
*/
|
124
|
-
this.endDateRequired = false;
|
125
119
|
/**
|
126
120
|
* Whether the date range picker requires a value.
|
127
121
|
*/
|
@@ -131,16 +125,12 @@ export class SkyDateRangePickerComponent {
|
|
131
125
|
* vertical spacing is automatically added to the date range picker.
|
132
126
|
*/
|
133
127
|
this.stacked = false;
|
134
|
-
|
135
|
-
* Whether to require users to specify a start date.
|
136
|
-
* @deprecated Use the `required` directive or Angular's `Validators.required`
|
137
|
-
* on the form control to mark the date range picker as required.
|
138
|
-
*/
|
139
|
-
this.startDateRequired = false;
|
128
|
+
this.calculatorIdHasErrors = false;
|
140
129
|
this.calculators = [];
|
141
|
-
this.
|
130
|
+
this.endDateHasErrors = false;
|
142
131
|
this.showEndDatePicker = false;
|
143
132
|
this.showStartDatePicker = false;
|
133
|
+
this.startDateHasErrors = false;
|
144
134
|
this.#_calculatorIds = SKY_DEFAULT_CALCULATOR_IDS;
|
145
135
|
this.#ngUnsubscribe = new Subject();
|
146
136
|
this.#changeDetector = inject(ChangeDetectorRef);
|
@@ -220,6 +210,11 @@ export class SkyDateRangePickerComponent {
|
|
220
210
|
});
|
221
211
|
});
|
222
212
|
});
|
213
|
+
this.hostControl?.events
|
214
|
+
.pipe(filter((event) => event instanceof TouchedChangeEvent), takeUntil(this.#ngUnsubscribe))
|
215
|
+
.subscribe(() => {
|
216
|
+
this.formGroup.markAllAsTouched();
|
217
|
+
});
|
223
218
|
this.#updatePickerVisibility(this.selectedCalculator);
|
224
219
|
}
|
225
220
|
/**
|
@@ -231,19 +226,20 @@ export class SkyDateRangePickerComponent {
|
|
231
226
|
*/
|
232
227
|
ngDoCheck() {
|
233
228
|
const control = this.hostControl;
|
234
|
-
const touched = this.formGroup.touched;
|
235
229
|
if (control) {
|
236
|
-
|
237
|
-
this
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
this.hasErrors = !!control.errors && (control.touched || control.dirty);
|
230
|
+
this.startDateHasErrors =
|
231
|
+
this.#controlHasErrors(this.#startDateControl) ||
|
232
|
+
this.#controlHasErrors(this.#calculatorIdControl);
|
233
|
+
this.endDateHasErrors =
|
234
|
+
this.#controlHasErrors(this.#endDateControl) ||
|
235
|
+
this.#controlHasErrors(this.#calculatorIdControl);
|
236
|
+
this.calculatorIdHasErrors = this.#controlHasErrors(this.#calculatorIdControl);
|
237
|
+
this.#changeDetector.markForCheck();
|
245
238
|
}
|
246
239
|
}
|
240
|
+
#controlHasErrors(control) {
|
241
|
+
return !!control.errors && (control.touched || control.dirty);
|
242
|
+
}
|
247
243
|
ngOnDestroy() {
|
248
244
|
this.#ngUnsubscribe.next();
|
249
245
|
this.#ngUnsubscribe.complete();
|
@@ -274,6 +270,8 @@ export class SkyDateRangePickerComponent {
|
|
274
270
|
},
|
275
271
|
};
|
276
272
|
}
|
273
|
+
// Set calculator errors on the select so that they appear beneath it.
|
274
|
+
this.#calculatorIdControl.setErrors(errors);
|
277
275
|
if (this.showStartDatePicker && startDateErrors) {
|
278
276
|
errors ||= {};
|
279
277
|
errors = { ...errors, ...startDateErrors };
|
@@ -282,8 +280,6 @@ export class SkyDateRangePickerComponent {
|
|
282
280
|
errors ||= {};
|
283
281
|
errors = { ...errors, ...endDateErrors };
|
284
282
|
}
|
285
|
-
// Set errors on the calculator select so that they appear beneath it.
|
286
|
-
this.#calculatorIdControl.setErrors(errors);
|
287
283
|
this.#changeDetector.markForCheck();
|
288
284
|
return errors;
|
289
285
|
}
|
@@ -373,8 +369,8 @@ export class SkyDateRangePickerComponent {
|
|
373
369
|
this.showStartDatePicker = showStartDatePicker;
|
374
370
|
this.#changeDetector.markForCheck();
|
375
371
|
}
|
376
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
377
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
372
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
373
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: SkyDateRangePickerComponent, isStandalone: true, selector: "sky-date-range-picker", inputs: { calculatorIds: "calculatorIds", dateFormat: "dateFormat", disabled: ["disabled", "disabled", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", hintText: "hintText", label: "label", labelText: "labelText", required: ["required", "required", booleanAttribute], stacked: ["stacked", "stacked", booleanAttribute], helpKey: "helpKey" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stacked" } }, providers: [
|
378
374
|
{
|
379
375
|
provide: NG_VALIDATORS,
|
380
376
|
useExisting: SkyDateRangePickerComponent,
|
@@ -386,16 +382,11 @@ export class SkyDateRangePickerComponent {
|
|
386
382
|
multi: true,
|
387
383
|
},
|
388
384
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
389
|
-
], hostDirectives: [{ directive: i1.SkyFormFieldLabelTextRequiredDirective, inputs: ["labelText", "label || labelText"] }], ngImport: i0, template: "<div\n class=\"sky-date-range-picker\"\n [formGroup]=\"formGroup\"\n (focusout)=\"onBlur()\"\n>\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"hasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select\n formControlName=\"calculatorId\"\n [required]=\"isRequired()\"\n (blur)=\"onBlur()\"\n >\n <option\n *ngFor=\"let calculator of calculators\"\n [value]=\"calculator.calculatorId\"\n >\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n </select>\n </sky-input-box>\n <sky-form-errors\n *ngIf=\"labelText && hostControl?.errors?.['skyDateRange']\"\n [labelText]=\"labelText\"\n >\n <sky-form-error\n *ngIf=\"\n hostControl?.errors?.['skyDateRange']?.errors.endDateBeforeStartDate\n \"\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n <ng-content select=\"sky-form-error\" />\n </sky-form-errors>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"\n showStartDatePicker && (startDateRequired || isRequired())\n \"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && (endDateRequired || isRequired())\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SkyDatepickerModule }, { kind: "component", type: i4.SkyDatepickerComponent, selector: "sky-datepicker", inputs: ["pickerClass"], outputs: ["calendarDateRangeChange", "dateFormatChange", "openChange"] }, { kind: "directive", type: i5.SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: ["dateFormat", "disabled", "maxDate", "minDate", "startAtDate", "skyDatepickerInput", "skyDatepickerNoValidate", "startingDay", "strict"] }, { kind: "pipe", type: SkyDateRangePickerEndDateResourceKeyPipe, name: "skyDateRangePickerEndDateResourceKey" }, { kind: "pipe", type: SkyDateRangePickerStartDateResourceKeyPipe, name: "skyDateRangePickerStartDateResourceKey" }, { kind: "ngmodule", type: SkyDatetimeResourcesModule }, { kind: "pipe", type: i6.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: i1.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText", "errorsScreenReaderOnly"] }, { kind: "directive", type: i1.λ20, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "component", type: i1.λ22, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "ngmodule", type: SkyFormErrorsModule }, { kind: "component", type: i1.λ21, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
385
|
+
], ngImport: i0, template: "<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (blur)=\"onBlur()\">\n @for (calculator of calculators; track calculator) {\n <option [value]=\"calculator.calculatorId\">\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <ng-content select=\"sky-form-error\" />\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SkyDatepickerModule }, { kind: "component", type: i3.SkyDatepickerComponent, selector: "sky-datepicker", inputs: ["pickerClass"], outputs: ["calendarDateRangeChange", "dateFormatChange", "openChange"] }, { kind: "directive", type: i4.SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: ["dateFormat", "disabled", "maxDate", "minDate", "startAtDate", "skyDatepickerInput", "skyDatepickerNoValidate", "startingDay", "strict"] }, { kind: "pipe", type: SkyDateRangePickerEndDateResourceKeyPipe, name: "skyDateRangePickerEndDateResourceKey" }, { kind: "pipe", type: SkyDateRangePickerStartDateResourceKeyPipe, name: "skyDateRangePickerStartDateResourceKey" }, { kind: "ngmodule", type: SkyDatetimeResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: i6.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "directive", type: i6.λ20, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "component", type: i6.λ22, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "ngmodule", type: SkyFormErrorsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
390
386
|
}
|
391
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
387
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerComponent, decorators: [{
|
392
388
|
type: Component,
|
393
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush,
|
394
|
-
{
|
395
|
-
directive: SkyFormFieldLabelTextRequiredDirective,
|
396
|
-
inputs: ['labelText: label || labelText'],
|
397
|
-
},
|
398
|
-
], imports: [
|
389
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
399
390
|
CommonModule,
|
400
391
|
FormsModule,
|
401
392
|
ReactiveFormsModule,
|
@@ -417,7 +408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
417
408
|
multi: true,
|
418
409
|
},
|
419
410
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
420
|
-
], selector: 'sky-date-range-picker', standalone: true, template: "<div\n class=\"sky-date-range-picker\"\n [formGroup]=\"formGroup\"\n (focusout)=\"onBlur()\"\n>\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"hasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select\n formControlName=\"calculatorId\"\n [required]=\"isRequired()\"\n (blur)=\"onBlur()\"\n >\n <option\n *ngFor=\"let calculator of calculators\"\n [value]=\"calculator.calculatorId\"\n >\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n </select>\n </sky-input-box>\n <sky-form-errors\n *ngIf=\"labelText && hostControl?.errors?.['skyDateRange']\"\n [labelText]=\"labelText\"\n >\n <sky-form-error\n *ngIf=\"\n hostControl?.errors?.['skyDateRange']?.errors.endDateBeforeStartDate\n \"\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n <ng-content select=\"sky-form-error\" />\n </sky-form-errors>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"\n showStartDatePicker && (startDateRequired || isRequired())\n \"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && (endDateRequired || isRequired())\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"] }]
|
411
|
+
], selector: 'sky-date-range-picker', standalone: true, template: "<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (blur)=\"onBlur()\">\n @for (calculator of calculators; track calculator) {\n <option [value]=\"calculator.calculatorId\">\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <ng-content select=\"sky-form-error\" />\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"] }]
|
421
412
|
}], ctorParameters: () => [], propDecorators: { calculatorIds: [{
|
422
413
|
type: Input
|
423
414
|
}], dateFormat: [{
|
@@ -425,9 +416,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
425
416
|
}], disabled: [{
|
426
417
|
type: Input,
|
427
418
|
args: [{ transform: booleanAttribute }]
|
428
|
-
}], endDateRequired: [{
|
429
|
-
type: Input,
|
430
|
-
args: [{ transform: booleanAttribute }]
|
431
419
|
}], helpPopoverContent: [{
|
432
420
|
type: Input
|
433
421
|
}], helpPopoverTitle: [{
|
@@ -447,10 +435,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
447
435
|
}, {
|
448
436
|
type: HostBinding,
|
449
437
|
args: ['class.sky-margin-stacked-lg']
|
450
|
-
}], startDateRequired: [{
|
451
|
-
type: Input,
|
452
|
-
args: [{ transform: booleanAttribute }]
|
453
438
|
}], helpKey: [{
|
454
439
|
type: Input
|
455
440
|
}] } });
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixLQUFLLEVBR0wsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsRUFFWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsbUJBQW1CLEVBR25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsc0NBQXNDLEVBQ3RDLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlD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QUR2QixLQUFLO2dCQWlDQyxVQUFVO3NCQURoQixLQUFLO2dCQVdLLFFBQVE7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZS9CLGVBQWU7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUy9CLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxLQUFLO2dCQVFLLEtBQUs7c0JBRGYsS0FBSztnQkFvQkMsU0FBUztzQkFEZixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsT0FBTztzQkFGYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBU25DLGlCQUFpQjtzQkFEdkIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1zTW9kdWxlLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdDb250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5Rm9ybUZpZWxkTGFiZWxUZXh0UmVxdWlyZWREaXJlY3RpdmUsXG4gIFNreUlucHV0Qm94TW9kdWxlLFxufSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnLi4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLm1vZHVsZSc7XG5pbXBvcnQgeyBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktZGF0ZXRpbWUtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVBpcGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLWVuZC1kYXRlLXJlc291cmNlLWtleS5waXBlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5UGlwZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS1waWNrZXItc3RhcnQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRpb24nO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvciB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZCB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWlkJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdHlwZSc7XG5pbXBvcnQgeyBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUyB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1kZWZhdWx0LWNhbGN1bGF0b3ItY29uZmlncyc7XG5cbnR5cGUgRGF0ZVZhbHVlID0gRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGFyZURhdGVSYW5nZXNFcXVhbChcbiAgcmFuZ2VBOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IHVuZGVmaW5lZCxcbiAgcmFuZ2VCOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICEhcmFuZ2VBICYmXG4gICAgISFyYW5nZUIgJiZcbiAgICByYW5nZUEuY2FsY3VsYXRvcklkID09PSByYW5nZUIuY2FsY3VsYXRvcklkICYmXG4gICAgYXJlRGF0ZXNFcXVhbChyYW5nZUEuc3RhcnREYXRlLCByYW5nZUIuc3RhcnREYXRlKSAmJlxuICAgIGFyZURhdGVzRXF1YWwocmFuZ2VBLmVuZERhdGUsIHJhbmdlQi5lbmREYXRlKVxuICApO1xufVxuXG5mdW5jdGlvbiBhcmVEYXRlc0VxdWFsKGE6IERhdGVWYWx1ZSwgYjogRGF0ZVZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWEgJiYgIWIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbFZhbHVlKFxuICB2YWx1ZTogUGFydGlhbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogdmFsdWUgaXMgUGFydGlhbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbj4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChcbiAgICBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgfHxcbiAgICBpc051bGxPclVuZGVmaW5lZCh2YWx1ZS5jYWxjdWxhdG9ySWQpIHx8XG4gICAgISgnZW5kRGF0ZScgaW4gdmFsdWUpIHx8XG4gICAgISgnc3RhcnREYXRlJyBpbiB2YWx1ZSlcbiAgKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogU2t5Rm9ybUZpZWxkTGFiZWxUZXh0UmVxdWlyZWREaXJlY3RpdmUsXG4gICAgICBpbnB1dHM6IFsnbGFiZWxUZXh0OiBsYWJlbCB8fCBsYWJlbFRleHQnXSxcbiAgICB9LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU2t5RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBTa3lEYXRlUmFuZ2VQaWNrZXJFbmREYXRlUmVzb3VyY2VLZXlQaXBlLFxuICAgIFNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5UGlwZSxcbiAgICBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSxcbiAgICBTa3lJbnB1dEJveE1vZHVsZSxcbiAgICBTa3lGb3JtRXJyb3JzTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxuICBdLFxuICBzZWxlY3RvcjogJ3NreS1kYXRlLXJhbmdlLXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHN0eWxlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrLCBPbkRlc3Ryb3ksIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogSURzIGZvciB0aGUgZGF0ZSByYW5nZSBvcHRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHBpY2tlcidzIGRyb3Bkb3duLlxuICAgKiBUaGUgb3B0aW9ucyBzcGVjaWZ5IGNhbGN1bGF0b3Igb2JqZWN0cyB0aGF0IHJldHVybiB0d28gYERhdGVgIG9iamVjdHMgdG8gcmVwcmVzZW50IGRhdGUgcmFuZ2VzLlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGluY2x1ZGVzIGFsbCBgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkYCB2YWx1ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNhbGN1bGF0b3JJZHMoXG4gICAgY2FsY3VsYXRvcklkczogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIGNvbnN0IGN1cnJlbnRDYWxjdWxhdG9ySWQgPSB0aGlzLiNnZXRWYWx1ZSgpLmNhbGN1bGF0b3JJZDtcblxuICAgIHRoaXMuI19jYWxjdWxhdG9ySWRzID0gY2FsY3VsYXRvcklkcyA/PyBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUztcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gdGhpcy4jZGF0ZVJhbmdlU3ZjLmZpbHRlckNhbGN1bGF0b3JzKFxuICAgICAgdGhpcy4jX2NhbGN1bGF0b3JJZHMsXG4gICAgKTtcblxuICAgIC8vIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FsY3VsYXRvciBpc24ndCBhdmFpbGFibGUgYW55bW9yZSxcbiAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGNhbGN1bGF0b3IgaW4gdGhlIG5ldyBhcnJheS5cbiAgICBpZiAoIXRoaXMuI19jYWxjdWxhdG9ySWRzLmluY2x1ZGVzKGN1cnJlbnRDYWxjdWxhdG9ySWQpKSB7XG4gICAgICB0aGlzLiNzZXRWYWx1ZShcbiAgICAgICAgeyBjYWxjdWxhdG9ySWQ6IHRoaXMuY2FsY3VsYXRvcklkc1swXSB9LFxuICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhbGN1bGF0b3JJZHMoKTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkW10ge1xuICAgIHJldHVybiB0aGlzLiNfY2FsY3VsYXRvcklkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBmb3JtYXQgZm9yXG4gICAqIFt0aGUgYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnRzXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0ZXBpY2tlcilcbiAgICogdGhhdCBtYWtlIHVwIHRoZSBkYXRlIHJhbmdlIHBpY2tlci4gVGhlIHRleHQgaW5wdXQgaXMgYSBjb21wb3NpdGUgY29tcG9uZW50IG9mXG4gICAqIHVwIHRvIHR3byBgc2t5LWRhdGVwaWNrZXJgIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0IFwiTU0vREQvWVlZWVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlXG4gICAqIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlXG4gICAqIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLFxuICAgKiB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlcXVpcmUgdXNlcnMgdG8gc3BlY2lmeSBhIGVuZCBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGByZXF1aXJlZGAgZGlyZWN0aXZlIG9yIEFuZ3VsYXIncyBgVmFsaWRhdG9ycy5yZXF1aXJlZGBcbiAgICogb24gdGhlIGZvcm0gY29udHJvbCB0byBtYXJrIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBhcyByZXF1aXJlZC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgZW5kRGF0ZVJlcXVpcmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBoZWxwIHBvcG92ZXIuIFdoZW4gc3BlY2lmaWVkIGFsb25nIHdpdGggYGxhYmVsVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byBkYXRlIHJhbmdlIHBpY2tlci4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGxhYmVsIGZvciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19sYWJlbCA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNsb2dnZXIuZGVwcmVjYXRlZCgnU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LmxhYmVsJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogMTAsXG4gICAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgdGhlIGBsYWJlbFRleHRgIGlucHV0IGluc3RlYWQuJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGEgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGlzIHN0YWNrZWQgb24gYW5vdGhlciBmb3JtIGNvbXBvbmVudC4gV2hlbiBzcGVjaWZpZWQsIHRoZSBhcHByb3ByaWF0ZVxuICAgKiB2ZXJ0aWNhbCBzcGFjaW5nIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGRhdGUgcmFuZ2UgcGlja2VyLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2t5LW1hcmdpbi1zdGFja2VkLWxnJylcbiAgcHVibGljIHN0YWNrZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIHVzZXJzIHRvIHNwZWNpZnkgYSBzdGFydCBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGByZXF1aXJlZGAgZGlyZWN0aXZlIG9yIEFuZ3VsYXIncyBgVmFsaWRhdG9ycy5yZXF1aXJlZGBcbiAgICogb24gdGhlIGZvcm0gY29udHJvbCB0byBtYXJrIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBhcyByZXF1aXJlZC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc3RhcnREYXRlUmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBoZWxwIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGdsb2JhbCBoZWxwIGNvbnRlbnQgdG8gZGlzcGxheS4gV2hlbiBzcGVjaWZpZWQsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBwbGFjZWQgYmVzaWRlIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBsYWJlbC4gQ2xpY2tpbmcgdGhlIGJ1dHRvbiBpbnZva2VzIFtnbG9iYWwgaGVscF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL2dsb2JhbC1oZWxwKVxuICAgKiBhcyBjb25maWd1cmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0b3JzOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yW10gPSBbXTtcbiAgcHJvdGVjdGVkIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwcm90ZWN0ZWQgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBob3N0Q29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkQ2FsY3VsYXRvcjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcjtcbiAgcHJvdGVjdGVkIHNob3dFbmREYXRlUGlja2VyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93U3RhcnREYXRlUGlja2VyID0gZmFsc2U7XG5cbiAgZ2V0ICNjYWxjdWxhdG9ySWRDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQ+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KFxuICAgICAgJ2NhbGN1bGF0b3JJZCcsXG4gICAgKSBhcyBBYnN0cmFjdENvbnRyb2w8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkPjtcbiAgfVxuXG4gIGdldCAjZW5kRGF0ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ2VuZERhdGUnKSBhcyBBYnN0cmFjdENvbnRyb2w8RGF0ZVZhbHVlPjtcbiAgfVxuXG4gIGdldCAjc3RhcnREYXRlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8RGF0ZVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnc3RhcnREYXRlJykgYXMgQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT47XG4gIH1cblxuICAjX2NhbGN1bGF0b3JJZHMgPSBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUztcbiAgI19sYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX3ZhbHVlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbjtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjbm90aWZ5Q2hhbmdlOiAoKF86IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgI25vdGlmeVRvdWNoZWQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICByZWFkb25seSAjZGF0ZVJhbmdlU3ZjID0gaW5qZWN0KFNreURhdGVSYW5nZVNlcnZpY2UpO1xuICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICByZWFkb25seSAjbG9nZ2VyID0gaW5qZWN0KFNreUxvZ1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2FsY3VsYXRvcnMgPSB0aGlzLiNkYXRlUmFuZ2VTdmMuY2FsY3VsYXRvcnM7XG4gICAgdGhpcy5zZWxlY3RlZENhbGN1bGF0b3IgPSB0aGlzLmNhbGN1bGF0b3JzWzBdO1xuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgICB0aGlzLiNfdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IGluamVjdChGb3JtQnVpbGRlcikuZ3JvdXAoe1xuICAgICAgY2FsY3VsYXRvcklkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihpbml0aWFsVmFsdWUuY2FsY3VsYXRvcklkKSxcbiAgICAgIHN0YXJ0RGF0ZTogbmV3IEZvcm1Db250cm9sPERhdGVWYWx1ZT4oaW5pdGlhbFZhbHVlLnN0YXJ0RGF0ZSksXG4gICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZVZhbHVlPihpbml0aWFsVmFsdWUuZW5kRGF0ZSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaG9zdENvbnRyb2wgPSB0aGlzLiNpbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsLCB7XG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgIHNlbGY6IHRydWUsXG4gICAgfSk/LmNvbnRyb2w7XG5cbiAgICAvLyBTZXQgYSBkZWZhdWx0IHZhbHVlIG9uIHRoZSBjb250cm9sIGlmIGl0J3MgdW5kZWZpbmVkIG9uIGluaXQuXG4gICAgLy8gV2UgbmVlZCB0byB1c2Ugc2V0VGltZW91dCB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBmaXJzdFxuICAgIC8vIHZhbGlkYXRpb24gY3ljbGUuXG4gICAgaWYgKGlzUGFydGlhbFZhbHVlKHRoaXMuaG9zdENvbnRyb2w/LnZhbHVlKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnNldFZhbHVlKHRoaXMuI2dldFZhbHVlKCksIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmlldyB3aGVuIFwicmVxdWlyZWRcIiBvciBcImRpc2FibGVkXCIgc3RhdGVzIGFyZSBjaGFuZ2VkIG9uIHRoZVxuICAgIC8vIGhvc3QgY29udHJvbC5cbiAgICB0aGlzLmhvc3RDb250cm9sPy5zdGF0dXNDaGFuZ2VzXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgY2hhbmdlcyBhZnRlciB0aGUgZmlyc3QgY2hhbmdlIGRldGVjdGlvbiBjeWNsZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChhcmVEYXRlUmFuZ2VzRXF1YWwpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodmFsdWU/LmNhbGN1bGF0b3JJZCkpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZWxlY3QgZWxlbWVudCBzZXRzIHRoZSBjYWxjdWxhdG9yIElEIHRvIGEgc3RyaW5nLCBidXQgd2VcbiAgICAgICAgICAgIC8vIG5lZWQgaXQgdG8gYmUgYSBudW1iZXIuXG4gICAgICAgICAgICB2YWx1ZS5jYWxjdWxhdG9ySWQgPSArdmFsdWUuY2FsY3VsYXRvcklkO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgY2FsY3VsYXRvciBJRCBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBzdGFydCBhbmRcbiAgICAgICAgICAgIC8vIGVuZCBkYXRlIHZhbHVlcyBhbmQgd2FpdCB1bnRpbCB0aGUgbmV4dCB2YWx1ZUNoYW5nZXMgZXZlbnQgdG9cbiAgICAgICAgICAgIC8vIG5vdGlmeSB0aGUgaG9zdCBjb250cm9sLlxuICAgICAgICAgICAgaWYgKHZhbHVlLmNhbGN1bGF0b3JJZCAhPT0gdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQpIHtcbiAgICAgICAgICAgICAgdGhpcy4jc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgeyBjYWxjdWxhdG9ySWQ6IHZhbHVlLmNhbGN1bGF0b3JJZCB9LFxuICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiB0cnVlIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3NldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLiNnZXRWYWx1ZSgpO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBob3N0IGNvbnRyb2wgaWYgdGhlIHZhbHVlIGlzIGRpZmZlcmVudC5cbiAgICAgICAgICBpZiAoIWFyZURhdGVSYW5nZXNFcXVhbCh0aGlzLmhvc3RDb250cm9sPy52YWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLiNub3RpZnlDaGFuZ2U/LihuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIElmIHRoZSBkYXRlcGlja2Vycycgc3RhdHVzZXMgY2hhbmdlLCB3ZSB3YW50IHRvIHJldHJpZ2dlciB0aGUgaG9zdFxuICAgIC8vIGNvbnRyb2wncyB2YWxpZGF0aW9uIHNvIHRoYXQgdGhlaXIgZXJyb3JzIGFyZSByZWZsZWN0ZWQgYmFjayB0byB0aGUgaG9zdC5cbiAgICBtZXJnZShcbiAgICAgIHRoaXMuI3N0YXJ0RGF0ZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcyxcbiAgICAgIHRoaXMuI2VuZERhdGVDb250cm9sLnN0YXR1c0NoYW5nZXMsXG4gICAgKVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFVzZSBhIHNldFRpbWVvdXQgdG8gYXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckNoZWNrZWQgZXJyb3IsXG4gICAgICAgIC8vIHNpbmNlIG11bHRpcGxlIGNhbGxzIHRvIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgaW4gdGhlIHNhbWVcbiAgICAgICAgLy8gY3ljbGUgbWF5IGNvbGxpZGUgd2l0aCBvbmUgYW5vdGhlci5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0Q29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgdG91Y2hlZCBzdGF0dXMgaW4gbmdEb0NoZWNrIHNpbmNlIEFuZ3VsYXIgZG9lcyBub3QgKGN1cnJlbnRseSlcbiAgICogaGF2ZSBhbiBBUEkgdG8gcmVzcG9uZCB0byB0b3VjaGVkIHN0YXR1cyBjaGFuZ2VzIGZyb20gdGhlIGhvc3QgY29udHJvbC5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNzczNiNpc3N1ZWNvbW1lbnQtMzEwODEyMzY4XG4gICAqIFRPRE86IEFuZ3VsYXIgMTggaW50cm9kdWNlcyBhIG5ldyBBUEkgdG8gcmVzcG9uZCB0byB0aGVzZSBzdGF0dXNlcy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDg4NyNpc3N1ZWNvbW1lbnQtMjAzNTI2NzQwMFxuICAgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5ob3N0Q29udHJvbDtcbiAgICBjb25zdCB0b3VjaGVkID0gdGhpcy5mb3JtR3JvdXAudG91Y2hlZDtcblxuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBpZiAoY29udHJvbC50b3VjaGVkICYmICF0b3VjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wudW50b3VjaGVkICYmIHRvdWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc0Vycm9ycyA9ICEhY29udHJvbC5lcnJvcnMgJiYgKGNvbnRyb2wudG91Y2hlZCB8fCBjb250cm9sLmRpcnR5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jbm90aWZ5Q2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIFZhbGlkYXRvci5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBjYWxjdWxhdG9yRXJyb3JzID0gdGhpcy5zZWxlY3RlZENhbGN1bGF0b3IudmFsaWRhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgY29uc3Qgc3RhcnREYXRlRXJyb3JzID0gdGhpcy4jc3RhcnREYXRlQ29udHJvbC5lcnJvcnM7XG4gICAgY29uc3QgZW5kRGF0ZUVycm9ycyA9IHRoaXMuI2VuZERhdGVDb250cm9sLmVycm9ycztcblxuICAgIGlmIChjYWxjdWxhdG9yRXJyb3JzKSB7XG4gICAgICBlcnJvcnMgPSB7XG4gICAgICAgIHNreURhdGVSYW5nZToge1xuICAgICAgICAgIGNhbGN1bGF0b3JJZDogdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQsXG4gICAgICAgICAgZXJyb3JzOiBjYWxjdWxhdG9yRXJyb3JzLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93U3RhcnREYXRlUGlja2VyICYmIHN0YXJ0RGF0ZUVycm9ycykge1xuICAgICAgZXJyb3JzIHx8PSB7fTtcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5zdGFydERhdGVFcnJvcnMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93RW5kRGF0ZVBpY2tlciAmJiBlbmREYXRlRXJyb3JzKSB7XG4gICAgICBlcnJvcnMgfHw9IHt9O1xuICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVuZERhdGVFcnJvcnMgfTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZXJyb3JzIG9uIHRoZSBjYWxjdWxhdG9yIHNlbGVjdCBzbyB0aGF0IHRoZXkgYXBwZWFyIGJlbmVhdGggaXQuXG4gICAgdGhpcy4jY2FsY3VsYXRvcklkQ29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBUaGUgZGF0ZSByYW5nZSBwaWNrZXIgYWx3YXlzIGhhcyBhIHZhbHVlLCBzbyBpZiB0aGUgY29uc3VtZXIgcGFzc2VzIGluIGFcbiAgLy8gcGFydGlhbCB2YWx1ZSAodmlhIGBwYXRjaFZhbHVlYCkgb3IgbnVsbCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhvc3QgY29udHJvbCdzXG4gIC8vIHZhbHVlIHdpdGggdGhlIGNvbXBsZXRlIHZhbHVlIGFmdGVyIGl0J3MgYmVlbiBtb2RpZmllZC5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy4jcGF0Y2hWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGhvc3QgY29udHJvbCBpZiBpdCBpcyBzZXQgdG8gYSBwYXJ0aWFsIG9yIG51bGwgdmFsdWUuXG4gICAgaWYgKGlzUGFydGlhbFZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhpcy5ob3N0Q29udHJvbD8uc2V0VmFsdWUodGhpcy4jZ2V0VmFsdWUoKSwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMucmVxdWlyZWQgfHwgdGhpcy5ob3N0Q29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jbm90aWZ5VG91Y2hlZD8uKCk7XG4gIH1cblxuICAjZ2V0Q2FsY3VsYXRvcihjYWxjdWxhdG9ySWQ6IG51bWJlcik6IFNreURhdGVSYW5nZUNhbGN1bGF0b3Ige1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5jYWxjdWxhdG9ycy5maW5kKChjKSA9PiBjLmNhbGN1bGF0b3JJZCA9PT0gY2FsY3VsYXRvcklkKTtcblxuICAgIC8qc2FmZXR5IGNoZWNrOiBzaG91bGQgbm90IGhhcHBlbiovXG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgaWYqL1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEEgZGF0ZSByYW5nZSBjYWxjdWxhdG9yIHdpdGggSUQgKCR7Y2FsY3VsYXRvcklkfSkgY291bGQgbm90IGJlIGZvdW5kLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gICNnZXREZWZhdWx0VmFsdWUoXG4gICAgY2FsY3VsYXRvcjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcixcbiAgKTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24ge1xuICAgIHJldHVybiBjYWxjdWxhdG9yLmdldFZhbHVlKCk7XG4gIH1cblxuICAjZ2V0VmFsdWUoKTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24ge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICAjcGF0Y2hWYWx1ZShcbiAgICBwYXJ0aWFsVmFsdWU6IFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0VmFsdWUoXG4gICAgICBpc051bGxPclVuZGVmaW5lZChwYXJ0aWFsVmFsdWUpXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHsgLi4udGhpcy4jZ2V0VmFsdWUoKSwgLi4ucGFydGlhbFZhbHVlIH0sXG4gICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgdG8gYmUgdXNlZCBieSB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgZm9ybSBjb250cm9sLlxuICAgKi9cbiAgI3NldFZhbHVlKFxuICAgIHZhbHVlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLiNnZXRWYWx1ZSgpO1xuXG4gICAgY29uc3QgdmFsdWVPckRlZmF1bHQgPVxuICAgICAgIXZhbHVlIHx8IGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlLmNhbGN1bGF0b3JJZClcbiAgICAgICAgPyB0aGlzLiNnZXREZWZhdWx0VmFsdWUodGhpcy5jYWxjdWxhdG9yc1swXSlcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi50aGlzLiNnZXREZWZhdWx0VmFsdWUodGhpcy4jZ2V0Q2FsY3VsYXRvcih2YWx1ZS5jYWxjdWxhdG9ySWQpKSxcbiAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgIH07XG5cbiAgICAvLyBFbnN1cmUgZmFsc3kgdmFsdWVzIGFyZSBzZXQgdG8gbnVsbC5cbiAgICB2YWx1ZU9yRGVmYXVsdC5lbmREYXRlID0gdmFsdWVPckRlZmF1bHQuZW5kRGF0ZSB8fCBudWxsO1xuICAgIHZhbHVlT3JEZWZhdWx0LnN0YXJ0RGF0ZSA9IHZhbHVlT3JEZWZhdWx0LnN0YXJ0RGF0ZSB8fCBudWxsO1xuXG4gICAgaWYgKCFhcmVEYXRlUmFuZ2VzRXF1YWwob2xkVmFsdWUsIHZhbHVlT3JEZWZhdWx0KSkge1xuICAgICAgdGhpcy4jX3ZhbHVlID0gdmFsdWVPckRlZmF1bHQ7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yID0gdGhpcy4jZ2V0Q2FsY3VsYXRvcihcbiAgICAgICAgdmFsdWVPckRlZmF1bHQuY2FsY3VsYXRvcklkLFxuICAgICAgKTtcblxuICAgICAgaWYgKG9sZFZhbHVlLmNhbGN1bGF0b3JJZCAhPT0gdmFsdWVPckRlZmF1bHQuY2FsY3VsYXRvcklkKSB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZVBpY2tlclZpc2liaWxpdHkodGhpcy5zZWxlY3RlZENhbGN1bGF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWVPckRlZmF1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KGNhbGN1bGF0b3I6IFNreURhdGVSYW5nZUNhbGN1bGF0b3IpOiB2b2lkIHtcbiAgICBsZXQgc2hvd0VuZERhdGVQaWNrZXIgPSBmYWxzZTtcbiAgICBsZXQgc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IGZhbHNlO1xuXG4gICAgc3dpdGNoIChjYWxjdWxhdG9yLnR5cGUpIHtcbiAgICAgIGNhc2UgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuQmVmb3JlOlxuICAgICAgICBzaG93RW5kRGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLkFmdGVyOlxuICAgICAgICBzaG93U3RhcnREYXRlUGlja2VyID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmFuZ2U6XG4gICAgICAgIHNob3dFbmREYXRlUGlja2VyID0gdHJ1ZTtcbiAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNob3dFbmREYXRlUGlja2VyID0gc2hvd0VuZERhdGVQaWNrZXI7XG4gICAgdGhpcy5zaG93U3RhcnREYXRlUGlja2VyID0gc2hvd1N0YXJ0RGF0ZVBpY2tlcjtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS1kYXRlLXJhbmdlLXBpY2tlclwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgKGZvY3Vzb3V0KT1cIm9uQmx1cigpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGUtcmFuZ2UtcGlja2VyLWZvcm0tZ3JvdXBcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6XG4gICAgICAgICFzaG93U3RhcnREYXRlUGlja2VyICYmICFzaG93RW5kRGF0ZVBpY2tlclxuICAgIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwiaGFzRXJyb3JzXCJcbiAgICAgIFtoZWxwS2V5XT1cImhlbHBLZXlcIlxuICAgICAgW2hlbHBQb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgICAgW2hlbHBQb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gICAgICBbaGludFRleHRdPVwiaGludFRleHRcIlxuICAgICAgW2xhYmVsVGV4dF09XCJcbiAgICAgICAgbGFiZWxUZXh0IHx8XG4gICAgICAgIGxhYmVsIHx8XG4gICAgICAgICgnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2FsY3VsYXRvcklkXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWQoKVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgID5cbiAgICAgICAgPG9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYWxjdWxhdG9yIG9mIGNhbGN1bGF0b3JzXCJcbiAgICAgICAgICBbdmFsdWVdPVwiY2FsY3VsYXRvci5jYWxjdWxhdG9ySWRcIlxuICAgICAgICA+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGNhbGN1bGF0b3IuX3Nob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleVxuICAgICAgICAgICAgICA/IChjYWxjdWxhdG9yLl9zaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXkgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgICAgIDogY2FsY3VsYXRvci5zaG9ydERlc2NyaXB0aW9uXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgPHNreS1mb3JtLWVycm9yc1xuICAgICAgKm5nSWY9XCJsYWJlbFRleHQgJiYgaG9zdENvbnRyb2w/LmVycm9ycz8uWydza3lEYXRlUmFuZ2UnXVwiXG4gICAgICBbbGFiZWxUZXh0XT1cImxhYmVsVGV4dFwiXG4gICAgPlxuICAgICAgPHNreS1mb3JtLWVycm9yXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaG9zdENvbnRyb2w/LmVycm9ycz8uWydza3lEYXRlUmFuZ2UnXT8uZXJyb3JzLmVuZERhdGVCZWZvcmVTdGFydERhdGVcbiAgICAgICAgXCJcbiAgICAgICAgW2Vycm9yTmFtZV09XCInZW5kRGF0ZUJlZm9yZVN0YXJ0RGF0ZSdcIlxuICAgICAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9iZWZvcmVfc3RhcnRfZGF0ZV9lcnJvcl9sYWJlbF90ZXh0J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG4gICAgPC9za3ktZm9ybS1lcnJvcnM+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXJcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dTdGFydERhdGVQaWNrZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6XG4gICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgJiYgIXNob3dFbmREYXRlUGlja2VyXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2Vycm9yc1NjcmVlblJlYWRlck9ubHldPVwidHJ1ZVwiXG4gICAgICBbaGFzRXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8c2t5LWRhdGVwaWNrZXI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVwiXG4gICAgICAgICAgbmFtZT1cInN0YXJ0RGF0ZVwiXG4gICAgICAgICAgc2t5RGF0ZXBpY2tlcklucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBsYWJlbFRleHQgfHwgbGFiZWxcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfYXJpYV9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgICAgICAgICA6IChsYWJlbFRleHQgPyBsYWJlbFRleHQgOiBsYWJlbCkpXG4gICAgICAgICAgICAgIDogKHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiAoc3RhcnREYXRlUmVxdWlyZWQgfHwgaXNSZXF1aXJlZCgpKVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICA8L3NreS1kYXRlcGlja2VyPlxuICAgIDwvc2t5LWlucHV0LWJveD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1kYXRlLXJhbmdlLXBpY2tlci1mb3JtLWdyb3VwIHNreS1kYXRlLXJhbmdlLWRhdGVwaWNrZXItd3JhcHBlclwiXG4gICAgW2hpZGRlbl09XCIhc2hvd0VuZERhdGVQaWNrZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NreS1kYXRlLXJhbmdlLXBpY2tlci1sYXN0LWlucHV0Jzogc2hvd0VuZERhdGVQaWNrZXIgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2Vycm9yc1NjcmVlblJlYWRlck9ubHldPVwidHJ1ZVwiXG4gICAgICBbaGFzRXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNreS1kYXRlcGlja2VyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCJcbiAgICAgICAgICBuYW1lPVwiZW5kRGF0ZVwiXG4gICAgICAgICAgc2t5RGF0ZXBpY2tlcklucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBsYWJlbFRleHQgfHwgbGFiZWxcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfYXJpYV9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgOiAobGFiZWxUZXh0ID8gbGFiZWxUZXh0IDogbGFiZWwpKVxuICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwic2hvd0VuZERhdGVQaWNrZXIgJiYgKGVuZERhdGVSZXF1aXJlZCB8fCBpc1JlcXVpcmVkKCkpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc2t5LWRhdGVwaWNrZXI+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixLQUFLLEVBR0wsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsRUFFWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUdsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxN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QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0QsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDckQsWUFDUyx1QkFBdUIsY0FDckIsSUFBSTt3REFhTCxhQUFhO3NCQUR2QixLQUFLO2dCQWlDQyxVQUFVO3NCQURoQixLQUFLO2dCQVdLLFFBQVE7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZS9CLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxLQUFLO2dCQVFLLEtBQUs7c0JBRGYsS0FBSztnQkFvQkMsU0FBUztzQkFEZixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsT0FBTztzQkFGYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBU25DLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVG91Y2hlZENoYW5nZUV2ZW50LFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hNb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1lcmdlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUnO1xuaW1wb3J0IHsgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWRhdGV0aW1lLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VQaWNrZXJFbmREYXRlUmVzb3VyY2VLZXlQaXBlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci1lbmQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVBpcGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLXN0YXJ0LWRhdGUtcmVzb3VyY2Uta2V5LnBpcGUnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlU2VydmljZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0aW9uJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3IgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1pZCc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZSB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUnO1xuaW1wb3J0IHsgU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFMgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtZGVmYXVsdC1jYWxjdWxhdG9yLWNvbmZpZ3MnO1xuXG50eXBlIERhdGVWYWx1ZSA9IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBhcmVEYXRlUmFuZ2VzRXF1YWwoXG4gIHJhbmdlQTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCB1bmRlZmluZWQsXG4gIHJhbmdlQjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhIXJhbmdlQSAmJlxuICAgICEhcmFuZ2VCICYmXG4gICAgcmFuZ2VBLmNhbGN1bGF0b3JJZCA9PT0gcmFuZ2VCLmNhbGN1bGF0b3JJZCAmJlxuICAgIGFyZURhdGVzRXF1YWwocmFuZ2VBLnN0YXJ0RGF0ZSwgcmFuZ2VCLnN0YXJ0RGF0ZSkgJiZcbiAgICBhcmVEYXRlc0VxdWFsKHJhbmdlQS5lbmREYXRlLCByYW5nZUIuZW5kRGF0ZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYXJlRGF0ZXNFcXVhbChhOiBEYXRlVmFsdWUsIGI6IERhdGVWYWx1ZSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFhICYmICFiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSAmJiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWxWYWx1ZShcbiAgdmFsdWU6IFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IHZhbHVlIGlzIFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoXG4gICAgaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpIHx8XG4gICAgaXNOdWxsT3JVbmRlZmluZWQodmFsdWUuY2FsY3VsYXRvcklkKSB8fFxuICAgICEoJ2VuZERhdGUnIGluIHZhbHVlKSB8fFxuICAgICEoJ3N0YXJ0RGF0ZScgaW4gdmFsdWUpXG4gICk7XG59XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNreURhdGVwaWNrZXJNb2R1bGUsXG4gICAgU2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5UGlwZSxcbiAgICBTa3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVBpcGUsXG4gICAgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUsXG4gICAgU2t5SW5wdXRCb3hNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgeyBwcm92aWRlOiBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCwgdXNlVmFsdWU6IHRydWUgfSxcbiAgXSxcbiAgc2VsZWN0b3I6ICdza3ktZGF0ZS1yYW5nZS1waWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjaywgT25EZXN0cm95LCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIElEcyBmb3IgdGhlIGRhdGUgcmFuZ2Ugb3B0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBwaWNrZXIncyBkcm9wZG93bi5cbiAgICogVGhlIG9wdGlvbnMgc3BlY2lmeSBjYWxjdWxhdG9yIG9iamVjdHMgdGhhdCByZXR1cm4gdHdvIGBEYXRlYCBvYmplY3RzIHRvIHJlcHJlc2VudCBkYXRlIHJhbmdlcy5cbiAgICogQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSBpbmNsdWRlcyBhbGwgYFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZGAgdmFsdWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjYWxjdWxhdG9ySWRzKFxuICAgIGNhbGN1bGF0b3JJZHM6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICBjb25zdCBjdXJyZW50Q2FsY3VsYXRvcklkID0gdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQ7XG5cbiAgICB0aGlzLiNfY2FsY3VsYXRvcklkcyA9IGNhbGN1bGF0b3JJZHMgPz8gU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFM7XG4gICAgdGhpcy5jYWxjdWxhdG9ycyA9IHRoaXMuI2RhdGVSYW5nZVN2Yy5maWx0ZXJDYWxjdWxhdG9ycyhcbiAgICAgIHRoaXMuI19jYWxjdWxhdG9ySWRzLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGN1bGF0b3IgaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUsXG4gICAgLy8gc2VsZWN0IHRoZSBmaXJzdCBjYWxjdWxhdG9yIGluIHRoZSBuZXcgYXJyYXkuXG4gICAgaWYgKCF0aGlzLiNfY2FsY3VsYXRvcklkcy5pbmNsdWRlcyhjdXJyZW50Q2FsY3VsYXRvcklkKSkge1xuICAgICAgdGhpcy4jc2V0VmFsdWUoXG4gICAgICAgIHsgY2FsY3VsYXRvcklkOiB0aGlzLmNhbGN1bGF0b3JJZHNbMF0gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBjYWxjdWxhdG9ySWRzKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2NhbGN1bGF0b3JJZHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvclxuICAgKiBbdGhlIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGVwaWNrZXIpXG4gICAqIHRoYXQgbWFrZSB1cCB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuIFRoZSB0ZXh0IGlucHV0IGlzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBvZlxuICAgKiB1cCB0byB0d28gYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZVxuICAgKiB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZVxuICAgKiB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy4gVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcyxcbiAgICogdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIGRhdGUgcmFuZ2UgcGlja2VyLiBUaGUgaGVscCBpbmxpbmUgYnV0dG9uIGRpc3BsYXlzIGEgW3BvcG92ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wb3BvdmVyKVxuICAgKiB3aGVuIGNsaWNrZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25hbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlckNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGhlbHAgcG9wb3Zlci4gVGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgd2hlbiBgaGVscFBvcG92ZXJDb250ZW50YCBpc1xuICAgKiBhbHNvIHNwZWNpZmllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlclRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgZm9yIHRoZSBkYXRlIHJhbmdlIHBpY2tlci5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgbGFiZWxUZXh0YCBpbnB1dCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2xhYmVsID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQubGFiZWwnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiAxMCxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbjogJ1VzZSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQgaW5zdGVhZC4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgcmVxdWlyZXMgYSB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgaXMgc3RhY2tlZCBvbiBhbm90aGVyIGZvcm0gY29tcG9uZW50LiBXaGVuIHNwZWNpZmllZCwgdGhlIGFwcHJvcHJpYXRlXG4gICAqIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5za3ktbWFyZ2luLXN0YWNrZWQtbGcnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIHBsYWNlZCBiZXNpZGUgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGxhYmVsLiBDbGlja2luZyB0aGUgYnV0dG9uIGludm9rZXMgW2dsb2JhbCBoZWxwXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2RldmVsb3AvZ2xvYmFsLWhlbHApXG4gICAqIGFzIGNvbmZpZ3VyZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgY2FsY3VsYXRvcklkSGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBjYWxjdWxhdG9yczogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcltdID0gW107XG4gIHByb3RlY3RlZCBlbmREYXRlSGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHJvdGVjdGVkIGhvc3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDYWxjdWxhdG9yOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yO1xuICBwcm90ZWN0ZWQgc2hvd0VuZERhdGVQaWNrZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNob3dTdGFydERhdGVQaWNrZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHN0YXJ0RGF0ZUhhc0Vycm9ycyA9IGZhbHNlO1xuXG4gIGdldCAjY2FsY3VsYXRvcklkQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChcbiAgICAgICdjYWxjdWxhdG9ySWQnLFxuICAgICkgYXMgQWJzdHJhY3RDb250cm9sPFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZD47XG4gIH1cblxuICBnZXQgI2VuZERhdGVDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxEYXRlVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdlbmREYXRlJykgYXMgQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT47XG4gIH1cblxuICBnZXQgI3N0YXJ0RGF0ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3N0YXJ0RGF0ZScpIGFzIEFic3RyYWN0Q29udHJvbDxEYXRlVmFsdWU+O1xuICB9XG5cbiAgI19jYWxjdWxhdG9ySWRzID0gU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFM7XG4gICNfbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI192YWx1ZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb247XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI25vdGlmeUNoYW5nZTogKChfOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICNub3RpZnlUb3VjaGVkOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI2RhdGVSYW5nZVN2YyA9IGluamVjdChTa3lEYXRlUmFuZ2VTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcmVhZG9ubHkgI2xvZ2dlciA9IGluamVjdChTa3lMb2dTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gdGhpcy4jZGF0ZVJhbmdlU3ZjLmNhbGN1bGF0b3JzO1xuICAgIHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yID0gdGhpcy5jYWxjdWxhdG9yc1swXTtcblxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMuI2dldERlZmF1bHRWYWx1ZSh0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvcik7XG4gICAgdGhpcy4jX3ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBpbmplY3QoRm9ybUJ1aWxkZXIpLmdyb3VwKHtcbiAgICAgIGNhbGN1bGF0b3JJZDogbmV3IEZvcm1Db250cm9sPG51bWJlcj4oaW5pdGlhbFZhbHVlLmNhbGN1bGF0b3JJZCksXG4gICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbDxEYXRlVmFsdWU+KGluaXRpYWxWYWx1ZS5zdGFydERhdGUpLFxuICAgICAgZW5kRGF0ZTogbmV3IEZvcm1Db250cm9sPERhdGVWYWx1ZT4oaW5pdGlhbFZhbHVlLmVuZERhdGUpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvc3RDb250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICBzZWxmOiB0cnVlLFxuICAgIH0pPy5jb250cm9sO1xuXG4gICAgLy8gU2V0IGEgZGVmYXVsdCB2YWx1ZSBvbiB0aGUgY29udHJvbCBpZiBpdCdzIHVuZGVmaW5lZCBvbiBpbml0LlxuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHNldFRpbWVvdXQgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgZmlyc3RcbiAgICAvLyB2YWxpZGF0aW9uIGN5Y2xlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh0aGlzLmhvc3RDb250cm9sPy52YWx1ZSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhvc3RDb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNnZXRWYWx1ZSgpLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZpZXcgd2hlbiBcInJlcXVpcmVkXCIgb3IgXCJkaXNhYmxlZFwiIHN0YXRlcyBhcmUgY2hhbmdlZCBvbiB0aGVcbiAgICAvLyBob3N0IGNvbnRyb2wuXG4gICAgdGhpcy5ob3N0Q29udHJvbD8uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMgYWZ0ZXIgdGhlIGZpcnN0IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoYXJlRGF0ZVJhbmdlc0VxdWFsKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlPy5jYWxjdWxhdG9ySWQpKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VsZWN0IGVsZW1lbnQgc2V0cyB0aGUgY2FsY3VsYXRvciBJRCB0byBhIHN0cmluZywgYnV0IHdlXG4gICAgICAgICAgICAvLyBuZWVkIGl0IHRvIGJlIGEgbnVtYmVyLlxuICAgICAgICAgICAgdmFsdWUuY2FsY3VsYXRvcklkID0gK3ZhbHVlLmNhbGN1bGF0b3JJZDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGN1bGF0b3IgSUQgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byByZXNldCB0aGUgc3RhcnQgYW5kXG4gICAgICAgICAgICAvLyBlbmQgZGF0ZSB2YWx1ZXMgYW5kIHdhaXQgdW50aWwgdGhlIG5leHQgdmFsdWVDaGFuZ2VzIGV2ZW50IHRvXG4gICAgICAgICAgICAvLyBub3RpZnkgdGhlIGhvc3QgY29udHJvbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5jYWxjdWxhdG9ySWQgIT09IHRoaXMuI2dldFZhbHVlKCkuY2FsY3VsYXRvcklkKSB7XG4gICAgICAgICAgICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgICAgICAgICAgIHsgY2FsY3VsYXRvcklkOiB2YWx1ZS5jYWxjdWxhdG9ySWQgfSxcbiAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgaG9zdCBjb250cm9sIGlmIHRoZSB2YWx1ZSBpcyBkaWZmZXJlbnQuXG4gICAgICAgICAgaWYgKCFhcmVEYXRlUmFuZ2VzRXF1YWwodGhpcy5ob3N0Q29udHJvbD8udmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy4jbm90aWZ5Q2hhbmdlPy4obmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgZGF0ZXBpY2tlcnMnIHN0YXR1c2VzIGNoYW5nZSwgd2Ugd2FudCB0byByZXRyaWdnZXIgdGhlIGhvc3RcbiAgICAvLyBjb250cm9sJ3MgdmFsaWRhdGlvbiBzbyB0aGF0IHRoZWlyIGVycm9ycyBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGhvc3QuXG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLiNzdGFydERhdGVDb250cm9sLnN0YXR1c0NoYW5nZXMsXG4gICAgICB0aGlzLiNlbmREYXRlQ29udHJvbC5zdGF0dXNDaGFuZ2VzLFxuICAgIClcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBVc2UgYSBzZXRUaW1lb3V0IHRvIGF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJDaGVja2VkIGVycm9yLFxuICAgICAgICAvLyBzaW5jZSBtdWx0aXBsZSBjYWxscyB0byB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5IGluIHRoZSBzYW1lXG4gICAgICAgIC8vIGN5Y2xlIG1heSBjb2xsaWRlIHdpdGggb25lIGFub3RoZXIuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0Q29udHJvbD8uZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBUb3VjaGVkQ2hhbmdlRXZlbnQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgdG91Y2hlZCBzdGF0dXMgaW4gbmdEb0NoZWNrIHNpbmNlIEFuZ3VsYXIgZG9lcyBub3QgKGN1cnJlbnRseSlcbiAgICogaGF2ZSBhbiBBUEkgdG8gcmVzcG9uZCB0byB0b3VjaGVkIHN0YXR1cyBjaGFuZ2VzIGZyb20gdGhlIGhvc3QgY29udHJvbC5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNzczNiNpc3N1ZWNvbW1lbnQtMzEwODEyMzY4XG4gICAqIFRPRE86IEFuZ3VsYXIgMTggaW50cm9kdWNlcyBhIG5ldyBBUEkgdG8gcmVzcG9uZCB0byB0aGVzZSBzdGF0dXNlcy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDg4NyNpc3N1ZWNvbW1lbnQtMjAzNTI2NzQwMFxuICAgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5ob3N0Q29udHJvbDtcblxuICAgIGlmIChjb250cm9sKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUhhc0Vycm9ycyA9XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jc3RhcnREYXRlQ29udHJvbCkgfHxcbiAgICAgICAgdGhpcy4jY29udHJvbEhhc0Vycm9ycyh0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sKTtcbiAgICAgIHRoaXMuZW5kRGF0ZUhhc0Vycm9ycyA9XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jZW5kRGF0ZUNvbnRyb2wpIHx8XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jY2FsY3VsYXRvcklkQ29udHJvbCk7XG4gICAgICB0aGlzLmNhbGN1bGF0b3JJZEhhc0Vycm9ycyA9IHRoaXMuI2NvbnRyb2xIYXNFcnJvcnMoXG4gICAgICAgIHRoaXMuI2NhbGN1bGF0b3JJZENvbnRyb2wsXG4gICAgICApO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI2NvbnRyb2xIYXNFcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhY29udHJvbC5lcnJvcnMgJiYgKGNvbnRyb2wudG91Y2hlZCB8fCBjb250cm9sLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgVmFsaWRhdG9yLlxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGNhbGN1bGF0b3JFcnJvcnMgPSB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvci52YWxpZGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVFcnJvcnMgPSB0aGlzLiNzdGFydERhdGVDb250cm9sLmVycm9ycztcbiAgICBjb25zdCBlbmREYXRlRXJyb3JzID0gdGhpcy4jZW5kRGF0ZUNvbnRyb2wuZXJyb3JzO1xuXG4gICAgaWYgKGNhbGN1bGF0b3JFcnJvcnMpIHtcbiAgICAgIGVycm9ycyA9IHtcbiAgICAgICAgc2t5RGF0ZVJhbmdlOiB7XG4gICAgICAgICAgY2FsY3VsYXRvcklkOiB0aGlzLiNnZXRWYWx1ZSgpLmNhbGN1bGF0b3JJZCxcbiAgICAgICAgICBlcnJvcnM6IGNhbGN1bGF0b3JFcnJvcnMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNldCBjYWxjdWxhdG9yIGVycm9ycyBvbiB0aGUgc2VsZWN0IHNvIHRoYXQgdGhleSBhcHBlYXIgYmVuZWF0aCBpdC5cbiAgICB0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiBzdGFydERhdGVFcnJvcnMpIHtcbiAgICAgIGVycm9ycyB8fD0ge307XG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uc3RhcnREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd0VuZERhdGVQaWNrZXIgJiYgZW5kRGF0ZUVycm9ycykge1xuICAgICAgZXJyb3JzIHx8PSB7fTtcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5lbmREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgLy8gVGhlIGRhdGUgcmFuZ2UgcGlja2VyIGFsd2F5cyBoYXMgYSB2YWx1ZSwgc28gaWYgdGhlIGNvbnN1bWVyIHBhc3NlcyBpbiBhXG4gIC8vIHBhcnRpYWwgdmFsdWUgKHZpYSBgcGF0Y2hWYWx1ZWApIG9yIG51bGwsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBob3N0IGNvbnRyb2wnc1xuICAvLyB2YWx1ZSB3aXRoIHRoZSBjb21wbGV0ZSB2YWx1ZSBhZnRlciBpdCdzIGJlZW4gbW9kaWZpZWQuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuI3BhdGNoVmFsdWUodmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBob3N0IGNvbnRyb2wgaWYgaXQgaXMgc2V0IHRvIGEgcGFydGlhbCBvciBudWxsIHZhbHVlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnNldFZhbHVlKHRoaXMuI2dldFZhbHVlKCksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLnJlcXVpcmVkIHx8IHRoaXMuaG9zdENvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICB9XG5cbiAgI2dldENhbGN1bGF0b3IoY2FsY3VsYXRvcklkOiBudW1iZXIpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZCgoYykgPT4gYy5jYWxjdWxhdG9ySWQgPT09IGNhbGN1bGF0b3JJZCk7XG5cbiAgICAvKnNhZmV0eSBjaGVjazogc2hvdWxkIG5vdCBoYXBwZW4qL1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGlmKi9cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBIGRhdGUgcmFuZ2UgY2FsY3VsYXRvciB3aXRoIElEICgke2NhbGN1bGF0b3JJZH0pIGNvdWxkIG5vdCBiZSBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAjZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNhbGN1bGF0b3I6IFNreURhdGVSYW5nZUNhbGN1bGF0b3IsXG4gICk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gY2FsY3VsYXRvci5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgI2dldFZhbHVlKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgI3BhdGNoVmFsdWUoXG4gICAgcGFydGlhbFZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgaXNOdWxsT3JVbmRlZmluZWQocGFydGlhbFZhbHVlKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7IC4uLnRoaXMuI2dldFZhbHVlKCksIC4uLnBhcnRpYWxWYWx1ZSB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGZvcm0gY29udHJvbC5cbiAgICovXG4gICNzZXRWYWx1ZShcbiAgICB2YWx1ZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHsgZW1pdEV2ZW50OiBib29sZWFuIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IHZhbHVlT3JEZWZhdWx0ID1cbiAgICAgICF2YWx1ZSB8fCBpc051bGxPclVuZGVmaW5lZCh2YWx1ZS5jYWxjdWxhdG9ySWQpXG4gICAgICAgID8gdGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuY2FsY3VsYXRvcnNbMF0pXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4udGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuI2dldENhbGN1bGF0b3IodmFsdWUuY2FsY3VsYXRvcklkKSksXG4gICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICB9O1xuXG4gICAgLy8gRW5zdXJlIGZhbHN5IHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAgdmFsdWVPckRlZmF1bHQuZW5kRGF0ZSA9IHZhbHVlT3JEZWZhdWx0LmVuZERhdGUgfHwgbnVsbDtcbiAgICB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgPSB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgfHwgbnVsbDtcblxuICAgIGlmICghYXJlRGF0ZVJhbmdlc0VxdWFsKG9sZFZhbHVlLCB2YWx1ZU9yRGVmYXVsdCkpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlT3JEZWZhdWx0O1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvciA9IHRoaXMuI2dldENhbGN1bGF0b3IoXG4gICAgICAgIHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChvbGRWYWx1ZS5jYWxjdWxhdG9ySWQgIT09IHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCkge1xuICAgICAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlT3JEZWZhdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdXBkYXRlUGlja2VyVmlzaWJpbGl0eShjYWxjdWxhdG9yOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yKTogdm9pZCB7XG4gICAgbGV0IHNob3dFbmREYXRlUGlja2VyID0gZmFsc2U7XG4gICAgbGV0IHNob3dTdGFydERhdGVQaWNrZXIgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAoY2FsY3VsYXRvci50eXBlKSB7XG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLkJlZm9yZTpcbiAgICAgICAgc2hvd0VuZERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5BZnRlcjpcbiAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJhbmdlOlxuICAgICAgICBzaG93RW5kRGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RW5kRGF0ZVBpY2tlciA9IHNob3dFbmREYXRlUGlja2VyO1xuICAgIHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHNob3dTdGFydERhdGVQaWNrZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1kYXRlLXJhbmdlLXBpY2tlci1sYXN0LWlucHV0JzpcbiAgICAgICAgIXNob3dTdGFydERhdGVQaWNrZXIgJiYgIXNob3dFbmREYXRlUGlja2VyXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2hhc0Vycm9yc109XCJjYWxjdWxhdG9ySWRIYXNFcnJvcnNcIlxuICAgICAgW2hlbHBLZXldPVwiaGVscEtleVwiXG4gICAgICBbaGVscFBvcG92ZXJDb250ZW50XT1cImhlbHBQb3BvdmVyQ29udGVudFwiXG4gICAgICBbaGVscFBvcG92ZXJUaXRsZV09XCJoZWxwUG9wb3ZlclRpdGxlXCJcbiAgICAgIFtoaW50VGV4dF09XCJoaW50VGV4dFwiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBsYWJlbFRleHQgfHxcbiAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWxjdWxhdG9ySWRcIiAoYmx1cik9XCJvbkJsdXIoKVwiPlxuICAgICAgICBAZm9yIChjYWxjdWxhdG9yIG9mIGNhbGN1bGF0b3JzOyB0cmFjayBjYWxjdWxhdG9yKSB7XG4gICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiY2FsY3VsYXRvci5jYWxjdWxhdG9ySWRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGNhbGN1bGF0b3IuX3Nob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgID8gKGNhbGN1bGF0b3IuX3Nob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleSB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgICA6IGNhbGN1bGF0b3Iuc2hvcnREZXNjcmlwdGlvblxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICBAaWYgKFxuICAgICAgICBob3N0Q29udHJvbD8uZXJyb3JzPy5bJ3NreURhdGVSYW5nZSddPy5lcnJvcnM/LltcbiAgICAgICAgICAnZW5kRGF0ZUJlZm9yZVN0YXJ0RGF0ZSdcbiAgICAgICAgXSAmJiBsYWJlbFRleHRcbiAgICAgICkge1xuICAgICAgICA8c2t5LWZvcm0tZXJyb3JcbiAgICAgICAgICBbZXJyb3JOYW1lXT1cIidlbmREYXRlQmVmb3JlU3RhcnREYXRlJ1wiXG4gICAgICAgICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9iZWZvcmVfc3RhcnRfZGF0ZV9lcnJvcl9sYWJlbF90ZXh0J1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGUtcmFuZ2UtcGlja2VyLWZvcm0tZ3JvdXAgc2t5LWRhdGUtcmFuZ2UtZGF0ZXBpY2tlci13cmFwcGVyXCJcbiAgICBbaGlkZGVuXT1cIiFzaG93U3RhcnREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGUtcmFuZ2UtcGlja2VyLWxhc3QtaW5wdXQnOlxuICAgICAgICBzaG93U3RhcnREYXRlUGlja2VyICYmICFzaG93RW5kRGF0ZVBpY2tlclxuICAgIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwic3RhcnREYXRlSGFzRXJyb3JzXCJcbiAgICAgIFtsYWJlbFRleHRdPVwiXG4gICAgICAgIHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxza3ktZGF0ZXBpY2tlcj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlXCJcbiAgICAgICAgICBuYW1lPVwic3RhcnREYXRlXCJcbiAgICAgICAgICBza3lEYXRlcGlja2VySW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGxhYmVsVGV4dCB8fCBsYWJlbFxuICAgICAgICAgICAgICA/ICgnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9hcmlhX2xhYmVsJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgICAgIDogKGxhYmVsVGV4dCA/IGxhYmVsVGV4dCA6IGxhYmVsKSlcbiAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwic2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiBpc1JlcXVpcmVkKClcIlxuICAgICAgICAvPlxuICAgICAgPC9za3ktZGF0ZXBpY2tlcj5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXJcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dFbmREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6IHNob3dFbmREYXRlUGlja2VyIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwiZW5kRGF0ZUhhc0Vycm9yc1wiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNreS1kYXRlcGlja2VyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCJcbiAgICAgICAgICBuYW1lPVwiZW5kRGF0ZVwiXG4gICAgICAgICAgc2t5RGF0ZXBpY2tlcklucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBsYWJlbFRleHQgfHwgbGFiZWxcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfYXJpYV9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgOiAobGFiZWxUZXh0ID8gbGFiZWxUZXh0IDogbGFiZWwpKVxuICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwic2hvd0VuZERhdGVQaWNrZXIgJiYgaXNSZXF1aXJlZCgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc2t5LWRhdGVwaWNrZXI+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
@@ -3,11 +3,11 @@ import { SkyFormErrorModule } from '@skyux/forms';
|
|
3
3
|
import { SkyDateRangePickerComponent } from './date-range-picker.component';
|
4
4
|
import * as i0 from "@angular/core";
|
5
5
|
export class SkyDateRangePickerModule {
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
7
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
8
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent], exports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
|
9
9
|
}
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, decorators: [{
|
11
11
|
type: NgModule,
|
12
12
|
args: [{
|
13
13
|
exports: [SkyDateRangePickerComponent, SkyFormErrorModule],
|
@@ -85,10 +85,10 @@ export class SkyDateRangeService {
|
|
85
85
|
}
|
86
86
|
return calculators;
|
87
87
|
}
|
88
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
89
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
89
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, providedIn: 'root' }); }
|
90
90
|
}
|
91
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, decorators: [{
|
92
92
|
type: Injectable,
|
93
93
|
args: [{
|
94
94
|
providedIn: 'root',
|