@norwegian/core-components 7.13.7 → 7.14.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/esm2022/lib/components/airport-select/airport-select.component.mjs +1 -1
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +21 -5
- package/esm2022/lib/components/filter/filter.component.mjs +142 -9
- package/fesm2022/norwegian-core-components.mjs +161 -12
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/lib/components/airport-select/airport-select.component.d.ts +1 -1
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +10 -3
- package/lib/components/filter/filter.component.d.ts +75 -1
- package/package.json +1 -1
|
@@ -224,6 +224,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
224
224
|
this.inlineFlex = 0;
|
|
225
225
|
this.openPassengerSelect = false;
|
|
226
226
|
this.openTransitTypeSelect = false;
|
|
227
|
+
this.onFocusInboundIgnored = false;
|
|
227
228
|
/**
|
|
228
229
|
* @property Input
|
|
229
230
|
* @description
|
|
@@ -264,6 +265,18 @@ export class FilterComponent extends NasComponentBase {
|
|
|
264
265
|
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
265
266
|
*/
|
|
266
267
|
this.destinationOpenChange = new EventEmitter();
|
|
268
|
+
/**
|
|
269
|
+
* @property Output
|
|
270
|
+
* @description
|
|
271
|
+
* An event that is fired every time the origin2 dropdown selector opens or closes.
|
|
272
|
+
*/
|
|
273
|
+
this.origin2OpenChange = new EventEmitter();
|
|
274
|
+
/**
|
|
275
|
+
* @property Output
|
|
276
|
+
* @description
|
|
277
|
+
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
278
|
+
*/
|
|
279
|
+
this.destination2OpenChange = new EventEmitter();
|
|
267
280
|
/**
|
|
268
281
|
* @property Output
|
|
269
282
|
* @description
|
|
@@ -282,6 +295,18 @@ export class FilterComponent extends NasComponentBase {
|
|
|
282
295
|
* An event that is fired every time the selected destination airport changes.
|
|
283
296
|
*/
|
|
284
297
|
this.destinationChange = new EventEmitter();
|
|
298
|
+
/**
|
|
299
|
+
* @property Output
|
|
300
|
+
* @description
|
|
301
|
+
* An event that is fired every time the selected origin2 airport changes.
|
|
302
|
+
*/
|
|
303
|
+
this.origin2Change = new EventEmitter();
|
|
304
|
+
/**
|
|
305
|
+
* @property Output
|
|
306
|
+
* @description
|
|
307
|
+
* An event that is fired every time the selected destination airport changes.
|
|
308
|
+
*/
|
|
309
|
+
this.destination2Change = new EventEmitter();
|
|
285
310
|
/**
|
|
286
311
|
* @property Output
|
|
287
312
|
* @description
|
|
@@ -414,6 +439,12 @@ export class FilterComponent extends NasComponentBase {
|
|
|
414
439
|
}
|
|
415
440
|
}
|
|
416
441
|
}
|
|
442
|
+
if (this.tripType == TripType.twoWayOpen) {
|
|
443
|
+
this.showSwitch = false;
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
this.showSwitch = this.exists(this.useSwitch);
|
|
447
|
+
}
|
|
417
448
|
if (!this.nasFormGroup) {
|
|
418
449
|
return;
|
|
419
450
|
}
|
|
@@ -580,11 +611,10 @@ export class FilterComponent extends NasComponentBase {
|
|
|
580
611
|
this.setFocusOnNativeElement(this.passengerSelectDropdown);
|
|
581
612
|
}
|
|
582
613
|
else {
|
|
583
|
-
if (this.
|
|
584
|
-
this.
|
|
585
|
-
return;
|
|
614
|
+
if (this.exists(this.enableMultiCity) && this.tripType == TripType.twoWayOpen) {
|
|
615
|
+
this.onFocusInboundIgnored = true;
|
|
586
616
|
}
|
|
587
|
-
this.setFocusOnNativeElement(this.datepickerCombo
|
|
617
|
+
this.setFocusOnNativeElement(this.datepickerCombo?.datepickerOutbound?.input);
|
|
588
618
|
}
|
|
589
619
|
break;
|
|
590
620
|
case 'Escape':
|
|
@@ -593,6 +623,16 @@ export class FilterComponent extends NasComponentBase {
|
|
|
593
623
|
break;
|
|
594
624
|
}
|
|
595
625
|
}
|
|
626
|
+
onFocusInboundDateKeyDown(event) {
|
|
627
|
+
if (event.key == 'Tab' || event.key == 'Enter') {
|
|
628
|
+
if (!this.exists(this.enableDatepickers)) {
|
|
629
|
+
this.setFocusOnNativeElement(this.passengerSelectDropdown);
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
this.onFocusInboundIgnored = false;
|
|
633
|
+
this.setFocusOnNativeElement(this.datepickerCombo.datepickerInbound.input);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
596
636
|
onTripSwitchFocusNext(event) {
|
|
597
637
|
if (event.key == 'Tab') {
|
|
598
638
|
if (!this.exists(this.enableDatepickers)) {
|
|
@@ -703,14 +743,28 @@ export class FilterComponent extends NasComponentBase {
|
|
|
703
743
|
}
|
|
704
744
|
onDatepickerFocusOnPrevious(event) {
|
|
705
745
|
event.preventDefault();
|
|
706
|
-
if (this.
|
|
707
|
-
|
|
746
|
+
if (this.exists(this.enableMultiCity)) {
|
|
747
|
+
if (this.tripType == TripType.twoWayOpen) {
|
|
748
|
+
setTimeout(() => {
|
|
749
|
+
this.setFocusOnNativeElement(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
750
|
+
});
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
setTimeout(() => {
|
|
754
|
+
this.setFocusOnNativeElement(this.airportSelect.airportSelectDropdownDestination.input);
|
|
755
|
+
});
|
|
708
756
|
return;
|
|
709
757
|
}
|
|
710
758
|
this.focusOnAirportSelectBackwards();
|
|
711
759
|
}
|
|
712
760
|
onFocusOnNextChange(event) {
|
|
713
761
|
event.preventDefault();
|
|
762
|
+
if (this.exists(this.enableMultiCity) && this.tripType == TripType.twoWayOpen) {
|
|
763
|
+
if (this.onFocusInboundIgnored) {
|
|
764
|
+
this.setFocusOnNativeElement(this.airportSelect2.airportSelectDropdownOrigin.input);
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
714
768
|
if (event.key == 'Tab' || event.key == 'Enter') {
|
|
715
769
|
if (this.passengerSelectDropdown) {
|
|
716
770
|
this.setFocusOnNativeElement(this.passengerSelectDropdown);
|
|
@@ -746,6 +800,23 @@ export class FilterComponent extends NasComponentBase {
|
|
|
746
800
|
this.originOpenChange.emit(open);
|
|
747
801
|
this.changeDetector.detectChanges();
|
|
748
802
|
}
|
|
803
|
+
onOrigin2Open(open) {
|
|
804
|
+
if (this.tripSwitch) {
|
|
805
|
+
this.tripSwitch.open = false;
|
|
806
|
+
}
|
|
807
|
+
if (this.transitSwitch) {
|
|
808
|
+
this.openTransitTypeSelect = false;
|
|
809
|
+
}
|
|
810
|
+
if (this.datepickerCombo) {
|
|
811
|
+
this.datepickerCombo.inboundOpen = false;
|
|
812
|
+
this.datepickerCombo.outboundOpen = false;
|
|
813
|
+
}
|
|
814
|
+
if (this.airportSelect && !this.airportSelect.originOpen) {
|
|
815
|
+
this.updateMaximize();
|
|
816
|
+
}
|
|
817
|
+
this.origin2OpenChange.emit(open);
|
|
818
|
+
this.changeDetector.detectChanges();
|
|
819
|
+
}
|
|
749
820
|
validateAirportValues() {
|
|
750
821
|
if (!this.airportSelect) {
|
|
751
822
|
return false;
|
|
@@ -783,6 +854,22 @@ export class FilterComponent extends NasComponentBase {
|
|
|
783
854
|
}
|
|
784
855
|
this.destinationOpenChange.emit(open);
|
|
785
856
|
}
|
|
857
|
+
onDestination2Open(open) {
|
|
858
|
+
if (this.tripSwitch) {
|
|
859
|
+
this.tripSwitch.open = false;
|
|
860
|
+
}
|
|
861
|
+
if (this.transitSwitch) {
|
|
862
|
+
this.openTransitTypeSelect = false;
|
|
863
|
+
}
|
|
864
|
+
if (this.datepickerCombo) {
|
|
865
|
+
this.datepickerCombo.inboundOpen = false;
|
|
866
|
+
this.datepickerCombo.outboundOpen = false;
|
|
867
|
+
}
|
|
868
|
+
if (this.airportSelect && !this.airportSelect.destinationOpen) {
|
|
869
|
+
this.updateMaximize();
|
|
870
|
+
}
|
|
871
|
+
this.destination2OpenChange.emit(open);
|
|
872
|
+
}
|
|
786
873
|
onPassengerBackdropChange(value) {
|
|
787
874
|
this.openPassengerSelect = value;
|
|
788
875
|
this.passengerSelectOpenChange.emit(this.openPassengerSelect);
|
|
@@ -861,6 +948,9 @@ export class FilterComponent extends NasComponentBase {
|
|
|
861
948
|
onOriginChange(airport) {
|
|
862
949
|
this.originChange.emit(airport);
|
|
863
950
|
}
|
|
951
|
+
onOrigin2Change(airport) {
|
|
952
|
+
this.origin2Change.emit(airport);
|
|
953
|
+
}
|
|
864
954
|
setSelectedOriginAirport(airport) {
|
|
865
955
|
if (!airport) {
|
|
866
956
|
return;
|
|
@@ -872,9 +962,23 @@ export class FilterComponent extends NasComponentBase {
|
|
|
872
962
|
this.originAirportCode = airport.code;
|
|
873
963
|
this.changeDetector.detectChanges();
|
|
874
964
|
}
|
|
965
|
+
setSelectedOrigin2Airport(airport) {
|
|
966
|
+
if (!airport) {
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
this.onOrigin2Change(airport);
|
|
970
|
+
if (this.origin2AirportCode === airport.code) {
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
this.origin2AirportCode = airport.code;
|
|
974
|
+
this.changeDetector.detectChanges();
|
|
975
|
+
}
|
|
875
976
|
onDestinationChange(airport) {
|
|
876
977
|
this.destinationChange.emit(airport);
|
|
877
978
|
}
|
|
979
|
+
onDestination2Change(airport) {
|
|
980
|
+
this.destination2Change.emit(airport);
|
|
981
|
+
}
|
|
878
982
|
setFocusOnPassengerSelect(event) {
|
|
879
983
|
if (this.isMobileDisplay()) {
|
|
880
984
|
if (this.datepickerCombo) {
|
|
@@ -917,6 +1021,12 @@ export class FilterComponent extends NasComponentBase {
|
|
|
917
1021
|
const tripSwitchControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
918
1022
|
tripSwitchControl.patchValue(this.tripType);
|
|
919
1023
|
}
|
|
1024
|
+
if (this.tripType == TripType.twoWayOpen) {
|
|
1025
|
+
this.showSwitch = false;
|
|
1026
|
+
}
|
|
1027
|
+
else {
|
|
1028
|
+
this.showSwitch = this.exists(this.useSwitch);
|
|
1029
|
+
}
|
|
920
1030
|
}
|
|
921
1031
|
onTransitChange(directOnly) {
|
|
922
1032
|
setTimeout(() => {
|
|
@@ -1034,11 +1144,11 @@ export class FilterComponent extends NasComponentBase {
|
|
|
1034
1144
|
}
|
|
1035
1145
|
}
|
|
1036
1146
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, deps: [{ token: i1.DeviceHelper }, { token: i2.SortService }, { token: i3.AbandonedBasketService }, { token: i4.DateHelper }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1037
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", inlineOnDesktop: "inlineOnDesktop", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectYouthsLabel: "passengerSelectYouthsLabel", passengerSelectYoungAdultsLabel: "passengerSelectYoungAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", noAirportsLabel: "noAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", passengersTitleLabel: "passengersTitleLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch", datePickerComboInlineFlex: "datePickerComboInlineFlex", airportSelectOutboundId: "airportSelectOutboundId", airportSelectInboundId: "airportSelectInboundId", passengerSelectId: "passengerSelectId", datePickerOutboundId: "datePickerOutboundId", datePickerInboundId: "datePickerInboundId", tripTypeId: "tripTypeId", transitTypeId: "transitTypeId" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "tripTypeSelection", first: true, predicate: ["radio"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions', !exists(enableDatepickers) && 'flex-end')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio', !exists(enableDatepickers) && 'flex-end')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n </form>\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__radio--flex-end{order:4!important}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__passengers{margin-top:8px}.nas-filter__filters:has(.nas-filter__radio--flex-end){display:flex;flex-direction:column}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__suggestions--flex-end,.nas-filter__filters--lg .nas-filter__suggestions--flex-end{margin-bottom:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid #6F6F6F}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:9px 0}.nas-filter__filters--md:has(.nas-filter__radio--flex-end),.nas-filter__filters--lg:has(.nas-filter__radio--flex-end){display:flex;flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__radio{order:1;flex:1 1 100%}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["outboundId", "inboundId", "airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "noAirportsLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "labelOutside", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "youthsLabel", "youngAdultsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i9.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "badge", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "warning", "badgeInfo", "badgeSuccess", "badgeWarning", "badgeError", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i10.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i12.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "tertiary", "link", "light", "large", "block", "flex", "compact", "right", "spaceless", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target", "icon", "iconLeft", "iconType", "buttonlink"], outputs: ["clickChange", "focusOnNext"] }, { kind: "component", type: i13.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }, { kind: "component", type: i14.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["outboundId", "inboundId", "ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "timepickerLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset", "inlineFlex"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i15.RadioComponent, selector: "nas-radio", inputs: ["id", "value", "name", "error", "disabled", "strong", "block", "spaceless", "tabIndex", "required", "aria-label", "aria-describedby", "aria-labelledby", "checked", "nasFormControlName", "nasFormGroup"], outputs: ["checkedChange"] }, { kind: "component", type: i16.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }] }); }
|
|
1147
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", origin2AirportCode: "origin2AirportCode", destination2AirportCode: "destination2AirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", tripSwitchMultiCityLabel: "tripSwitchMultiCityLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", inlineOnDesktop: "inlineOnDesktop", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectYouthsLabel: "passengerSelectYouthsLabel", passengerSelectYoungAdultsLabel: "passengerSelectYoungAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", noAirportsLabel: "noAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameOrigin2: "nasFormControlNameOrigin2", nasFormControlNameDestination2: "nasFormControlNameDestination2", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", passengersTitleLabel: "passengersTitleLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch", datePickerComboInlineFlex: "datePickerComboInlineFlex", airportSelectOutboundId: "airportSelectOutboundId", airportSelectInboundId: "airportSelectInboundId", passengerSelectId: "passengerSelectId", datePickerOutboundId: "datePickerOutboundId", datePickerInboundId: "datePickerInboundId", tripTypeId: "tripTypeId", transitTypeId: "transitTypeId", enableMultiCity: "enableMultiCity" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", origin2OpenChange: "origin2OpenChange", destination2OpenChange: "destination2OpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", origin2Change: "origin2Change", destination2Change: "destination2Change", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "airportSelect2", first: true, predicate: ["airportSelect2"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "tripTypeSelection", first: true, predicate: ["radio"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline', exists(enableMultiCity) && 'multi-city', tripType == 3 && 'multi-city-mode'])\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n <nas-radio *ngIf=\"exists(enableMultiCity)\" #radio [id]=\"tripTypeInputId + '__multi-city'\" [name]=\"'tripType'\" [value]=\"3\" (checkedChange)=\"onTripTypeChange(3)\" [checked]=\"tripType === 3\">\n {{tripSwitchMultiCityLabel}}\n </nas-radio>\n </form>\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect) && tripType == 3\" #airportSelect2 combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin2\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination2\" [useSwitch]=\"false\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"origin2AirportCode\" [destinationAirportCode]=\"destination2AirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOrigin2Airport($event)\"\n (destinationChange)=\"onDestination2Change($event)\" (focusOnNext)=\"onFocusInboundDateKeyDown($event)\"\n (originOpenChange)=\"onOrigin2Open($event)\" (destinationOpenChange)=\"onDestination2Open($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions) && tripType !== 3\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\" [ignoreOnFocusInboundDate]=\"tripType === 3\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__filters{display:flex;flex-direction:column;gap:8px}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid #6F6F6F}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:9px 0}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters.nas-filter__filters--multi-city{display:flex;flex-wrap:wrap;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__airport-select{order:1}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__suggestions{order:2}.nas-filter__filters.nas-filter__filters--multi-city-mode{display:grid;grid-template-columns:1fr;grid-template-rows:auto}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(1){grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(2){grid-row:4}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker{position:relative}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:\"\";display:block;height:2px;width:100%;background-color:#e9e7e4;margin:16px 0 9px}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__passengers{margin-top:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg{grid-template-columns:2fr 1fr;grid-template-rows:auto auto}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__radio{grid-row:1}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(1),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(1){grid-column:1;grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(2),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(2){grid-column:1;grid-row:3}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo{grid-column:2;grid-row:2/span 2;display:grid}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:flex;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker:after,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:unset;margin:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__dropdown-wrapper{grid-row:4;grid-column:1/-1}.nas-filter__filters.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--lg{flex-direction:row}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%;z-index:2}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["outboundId", "inboundId", "airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "noAirportsLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "labelOutside", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "youthsLabel", "youngAdultsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i9.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "badge", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "warning", "badgeInfo", "badgeSuccess", "badgeWarning", "badgeError", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i10.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i12.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "tertiary", "link", "light", "large", "block", "flex", "compact", "right", "spaceless", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target", "icon", "iconLeft", "iconType", "buttonlink"], outputs: ["clickChange", "focusOnNext"] }, { kind: "component", type: i13.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }, { kind: "component", type: i14.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["outboundId", "inboundId", "ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "timepickerLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset", "inlineFlex", "ignoreOnFocusInboundDate"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i15.RadioComponent, selector: "nas-radio", inputs: ["id", "value", "name", "error", "disabled", "strong", "block", "spaceless", "tabIndex", "required", "aria-label", "aria-describedby", "aria-labelledby", "checked", "nasFormControlName", "nasFormGroup"], outputs: ["checkedChange"] }, { kind: "component", type: i16.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }] }); }
|
|
1038
1148
|
}
|
|
1039
1149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, decorators: [{
|
|
1040
1150
|
type: Component,
|
|
1041
|
-
args: [{ selector: 'nas-filter', template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions', !exists(enableDatepickers) && 'flex-end')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio', !exists(enableDatepickers) && 'flex-end')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n </form>\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__radio--flex-end{order:4!important}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__passengers{margin-top:8px}.nas-filter__filters:has(.nas-filter__radio--flex-end){display:flex;flex-direction:column}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__suggestions--flex-end,.nas-filter__filters--lg .nas-filter__suggestions--flex-end{margin-bottom:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid #6F6F6F}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:9px 0}.nas-filter__filters--md:has(.nas-filter__radio--flex-end),.nas-filter__filters--lg:has(.nas-filter__radio--flex-end){display:flex;flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__radio{order:1;flex:1 1 100%}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"] }]
|
|
1151
|
+
args: [{ selector: 'nas-filter', template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline', exists(enableMultiCity) && 'multi-city', tripType == 3 && 'multi-city-mode'])\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n <nas-radio *ngIf=\"exists(enableMultiCity)\" #radio [id]=\"tripTypeInputId + '__multi-city'\" [name]=\"'tripType'\" [value]=\"3\" (checkedChange)=\"onTripTypeChange(3)\" [checked]=\"tripType === 3\">\n {{tripSwitchMultiCityLabel}}\n </nas-radio>\n </form>\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect) && tripType == 3\" #airportSelect2 combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin2\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination2\" [useSwitch]=\"false\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"origin2AirportCode\" [destinationAirportCode]=\"destination2AirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOrigin2Airport($event)\"\n (destinationChange)=\"onDestination2Change($event)\" (focusOnNext)=\"onFocusInboundDateKeyDown($event)\"\n (originOpenChange)=\"onOrigin2Open($event)\" (destinationOpenChange)=\"onDestination2Open($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions) && tripType !== 3\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\" [ignoreOnFocusInboundDate]=\"tripType === 3\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__filters{display:flex;flex-direction:column;gap:8px}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid #6F6F6F}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:9px 0}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters.nas-filter__filters--multi-city{display:flex;flex-wrap:wrap;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__airport-select{order:1}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__suggestions{order:2}.nas-filter__filters.nas-filter__filters--multi-city-mode{display:grid;grid-template-columns:1fr;grid-template-rows:auto}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(1){grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(2){grid-row:4}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker{position:relative}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:\"\";display:block;height:2px;width:100%;background-color:#e9e7e4;margin:16px 0 9px}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__passengers{margin-top:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg{grid-template-columns:2fr 1fr;grid-template-rows:auto auto}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__radio{grid-row:1}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(1),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(1){grid-column:1;grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(2),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(2){grid-column:1;grid-row:3}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo{grid-column:2;grid-row:2/span 2;display:grid}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:flex;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker:after,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:unset;margin:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__dropdown-wrapper{grid-row:4;grid-column:1/-1}.nas-filter__filters.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--lg{flex-direction:row}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%;z-index:2}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"] }]
|
|
1042
1152
|
}], ctorParameters: function () { return [{ type: i1.DeviceHelper }, { type: i2.SortService }, { type: i3.AbandonedBasketService }, { type: i4.DateHelper }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { passengerSelectDropdown: [{
|
|
1043
1153
|
type: ViewChild,
|
|
1044
1154
|
args: ['passengerSelectDropdown']
|
|
@@ -1054,6 +1164,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1054
1164
|
}], airportSelect: [{
|
|
1055
1165
|
type: ViewChild,
|
|
1056
1166
|
args: ['airportSelect']
|
|
1167
|
+
}], airportSelect2: [{
|
|
1168
|
+
type: ViewChild,
|
|
1169
|
+
args: ['airportSelect2']
|
|
1057
1170
|
}], datepickerCombo: [{
|
|
1058
1171
|
type: ViewChild,
|
|
1059
1172
|
args: ['datepickerCombo']
|
|
@@ -1099,6 +1212,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1099
1212
|
type: Input
|
|
1100
1213
|
}], destinationAirportCode: [{
|
|
1101
1214
|
type: Input
|
|
1215
|
+
}], origin2AirportCode: [{
|
|
1216
|
+
type: Input
|
|
1217
|
+
}], destination2AirportCode: [{
|
|
1218
|
+
type: Input
|
|
1102
1219
|
}], passengerSelectLabel: [{
|
|
1103
1220
|
type: Input
|
|
1104
1221
|
}], maxPaxCount: [{
|
|
@@ -1111,6 +1228,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1111
1228
|
type: Input
|
|
1112
1229
|
}], tripSwitchOneWayLabel: [{
|
|
1113
1230
|
type: Input
|
|
1231
|
+
}], tripSwitchMultiCityLabel: [{
|
|
1232
|
+
type: Input
|
|
1114
1233
|
}], directOnlyLabel: [{
|
|
1115
1234
|
type: Input
|
|
1116
1235
|
}], directTransitLabel: [{
|
|
@@ -1171,6 +1290,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1171
1290
|
type: Input
|
|
1172
1291
|
}], nasFormControlNameDestination: [{
|
|
1173
1292
|
type: Input
|
|
1293
|
+
}], nasFormControlNameOrigin2: [{
|
|
1294
|
+
type: Input
|
|
1295
|
+
}], nasFormControlNameDestination2: [{
|
|
1296
|
+
type: Input
|
|
1174
1297
|
}], nasFormControlNameTripType: [{
|
|
1175
1298
|
type: Input
|
|
1176
1299
|
}], nasFormControlNameDirectOnly: [{
|
|
@@ -1205,12 +1328,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1205
1328
|
type: Output
|
|
1206
1329
|
}], destinationOpenChange: [{
|
|
1207
1330
|
type: Output
|
|
1331
|
+
}], origin2OpenChange: [{
|
|
1332
|
+
type: Output
|
|
1333
|
+
}], destination2OpenChange: [{
|
|
1334
|
+
type: Output
|
|
1208
1335
|
}], passengerSelectOpenChange: [{
|
|
1209
1336
|
type: Output
|
|
1210
1337
|
}], originChange: [{
|
|
1211
1338
|
type: Output
|
|
1212
1339
|
}], destinationChange: [{
|
|
1213
1340
|
type: Output
|
|
1341
|
+
}], origin2Change: [{
|
|
1342
|
+
type: Output
|
|
1343
|
+
}], destination2Change: [{
|
|
1344
|
+
type: Output
|
|
1214
1345
|
}], passengersChange: [{
|
|
1215
1346
|
type: Output
|
|
1216
1347
|
}], tripTypeChange: [{
|
|
@@ -1289,6 +1420,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1289
1420
|
type: Input
|
|
1290
1421
|
}], transitTypeId: [{
|
|
1291
1422
|
type: Input
|
|
1423
|
+
}], enableMultiCity: [{
|
|
1424
|
+
type: Input
|
|
1292
1425
|
}], outboundSelectedDateChange: [{
|
|
1293
1426
|
type: Output
|
|
1294
1427
|
}], inboundSelectedDateChange: [{
|
|
@@ -1306,4 +1439,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1306
1439
|
}], positionChange: [{
|
|
1307
1440
|
type: Output
|
|
1308
1441
|
}] } });
|
|
1309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCdEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBNkJuRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFH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QkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRRyxlQUFlO3NCQUF2QixLQUFLO2dCQVFHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBUUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQVFGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFxQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQW9CRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBT0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQVFHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFRRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFRRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9JLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFPRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRNb2RlbCB9IGZyb20gJy4uL2FpcnBvcnQtc2VsZWN0L21vZGVscy9haXJwb3J0Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3NlbmdlcnNNb2RlbCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvbW9kZWxzL3Bhc3NlbmdlcnMubW9kZWwnO1xuaW1wb3J0IHsgUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcGFzc2VuZ2VyLXNlbGVjdC9wYXNzZW5nZXItc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tYm9Db21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbWJvL2RhdGVwaWNrZXItY29tYm8uY29tcG9uZW50JztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBGaWx0ZXIgQ29tcG9uZW50IHwgRnVuY3Rpb25hbCB8IE5ldyBkZXNpZ25cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdCcpIHBhc3NlbmdlclNlbGVjdDogUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmlwU3dpdGNoJykgdHJpcFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRTd2l0Y2gnKSB0cmFuc2l0U3dpdGNoOiBCdXR0b25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmFkaW8nKSB0cmlwVHlwZVNlbGVjdGlvbjogUmFkaW9Db21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuICBpbmxpbmVGbGV4ID0gMDtcbiAgb3BlblBhc3NlbmdlclNlbGVjdCA9IGZhbHNlO1xuICBvcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuICBleHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlOiBib29sZWFuO1xuXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dGJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5ib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pbmJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmJvdW5kT3BlblRpbWVvdXQgYXMgbnVtYmVyKTtcblxuICAgIHRoaXMuaW5ib3VuZE9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRPcGVuVmFsdWUgPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuaW5ib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGluYm91bmRPcGVuVGltZW91dDogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHJlY29yZCBjb250YWluaW5nIGtleXMgd2l0aCBhbGwgYWlycG9ydCBjb2RlcyB3aXRoIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2YgYWlycG9ydCBjb2RlcyBjb25uZWN0ZWQgdG8gdGhlIGtleS5cbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRSZWxhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIG9uIHRoZSBjbGVhciBidXR0b24gaW5zaWRlIHRoZSBhaXJwb3J0IHNlbGVjdCBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBzdWJ0cmFjdCBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsU3VidHJhY3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgYWRkIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxBZGQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxpc3Qgb2YgYWlycG9ydHMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBvcmlnaW4gZHJvcGRvd24uXG4gICAqIElmIG5vdCBpbmNsdWRlZCwgYWxsIGFpcnBvcnRzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dlZE9yaWdpbkFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGFpcnBvcnRzIHRoYXQgYXJlIHJlc3RyaWN0ZWQgZm9yIGRlc3RpbmF0aW9uIGFpcnBvcnRzLiBJdCB3aWxsIGRlZmF1bHQgdG8gYWlycG9ydHMgaWYgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgdGhlIHVzZXIgYWxscmVhZHkgaGFzIHNlYXJoIGZvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheUxhdGVzdFNlYXJjaGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc3BsYXkgc3dpdGNoIFVJIHRvIGludGVyY2hhbmdlIG9yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHVzZVN3aXRjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCBhcmUgY2xvc2UgdG8gdGhlIHVzZXIgc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlDbG9zZXN0QWlycG9ydHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgb3JpZ2luIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgb3JpZ2luQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgZGVzdGluYXRpb25BaXJwb3J0Q29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdG90YWwgbWF4aW11bSBhbW91bnQgb2YgcGFzc2VuZ2VycyBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1heFBheENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgZGlmZmVyZW50IHBhc3NlbmdlciB0eXBlcyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHBhc3NlbmdlcnMoKTogQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMucGFzc2VuZ2Vyc1ZhbHVlO1xuICB9XG4gIHNldCBwYXNzZW5nZXJzKHZhbHVlOiBBcnJheTxQYXNzZW5nZXJzTW9kZWw+KSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFzc2VuZ2Vyc1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wYXNzZW5nZXJzQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIGFkdWx0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1pbkFkdWx0Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciByb3VuZCB0cmlwIHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBvbmUgd2F5IHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoT25lV2F5TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBkaXJlY3Qgb25seSBzZWxlY3Rpb24gaW4gdGhlIHRyYW5zaXQgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0T25seUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgYm90aCBkaXJlY3QgYW5kIHRyYW5zaXQgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdFRyYW5zaXRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsdGVyIHNob3VsZCBiZSBtaW5pbWl6ZWQgb24gbW9iaWxlIHNjcmVlbiBzaXplcy5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXplT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYXRlcyBpZiBhbGwgaW5wdXRzIGluIHRoZSBmaWx0ZXIgc2hvdWxkIGJlIGZsZXggaW5saW5lLlxuICAgKi9cbiAgQElucHV0KCkgaW5saW5lT25EZXNrdG9wPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGVkaXQgc2VhcmNoIG9mIGFjY29yZGlvbiBzaG91bGQgYmUgZXhwZW5kZWQgb24gbW9iaWxlIHNjcmVlbiBzaXplcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBleHBhbmRlZEFjY29yZGlvbk1vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlO1xuICB9XG4gIHNldCBleHBhbmRlZEFjY29yZGlvbk1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IHRoYXQgaXMgZGlzcGF5ZWQgaWYgbWluaW1pemVPbk1vYmlsZSBpcyB0cnVlLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKiAxIHRyYXZlbGxlciwgcm91bmQgdHJpcCBhbmQgZGlyZWN0L3RyYW5zaXRcbiAgICovXG4gIEBJbnB1dCgpIGRlZmF1bHRTdW1tYXJ5U2VwYXJhdG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIEEgc2VwYXJhdG9yIGZvciB0aGUgZmlsdGVyIHN1bW1hcnkgaXMgYXJlIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBsYXN0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0VGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgYWR1bHRzIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgeW91dGhzIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0WW91dGhzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgeW91bmcgYWR1bHRzIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0WW91bmdBZHVsdHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSBjaGlsZHJlbiBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgaW5mYW50cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdEluZmFudHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRvdGFsIG51bWJlciBvZiBzZWxlY3RlZCBwYXNzZW5nZXJzIGV4Y2VlZHMgdGhlIGdyb3VwIGJvb2tpbmcgbGltaXRcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwQm9va2luZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiBhbGwgYWlycG9ydHMgaW4gdGhlIGFpcnBvcnQgc2VsZWN0IGRyb3AgZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGFsbEFpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBsYXRlc3Qgc2VhcmNoZXMgaW4gdGhlIGFpcnBvcnQgc2VsZWN0IGRyb3AgZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGxhdGVzdFNlYXJjaGVzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBjbG9zZXN0IGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBjbG9zZXN0QWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCBhcHBlYXIgaW4gdGhlIGxpc3QgdGhhdCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gYWlycG9ydHNcbiAgICovXG4gIEBJbnB1dCgpIG5vQWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgaW4gdGhlIGFpcnBvcnQgc2VsZWN0LCBpZiB0aGVcbiAgICogdXNlciB0cmllcyB0byBzZWxlY3QgYSBkZXN0aW5hdGlvbiBhaXJwb3J0IHdpdGhvdXQgc2VsZWN0aW5nIGFuIG9yaWdpbiBhaXJwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0T3JpZ2luRmlyc3RMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBvcmlnaW4gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBvcmlnaW4gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyT3JpZ2luID0gJyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbERlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpbiBhaXJwb3J0IHNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIGdlb2xvY2F0aW9uTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gbXkgbG9jYXRpb24sIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpbiBhaXJwb3J0IHNlbGVjdCBpZiB1c2VyIGhhcyBkZW5pZWQgZ2VvbG9jYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGFwcGVhciBvbiB0aGUgZGVzdGluYXRpb24gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyRGVzdGluYXRpb24gPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRoYXQgd2lsbCBhbGxvdyBhbHdheXMga2VlcGluZyB0aGUgc2VsZWN0ZWQgYWlycG9ydC5cbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgYWlycG9ydCB3aWxsIGJlIHNob3duIG9uY2UgdXNlciBjbGVhcnMgdGhlIHNlbGVjdGlvbiBhbmQgYmx1ci5cbiAgICovXG4gIEBJbnB1dCgpIGtlZXBTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0aXRsZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gZWRpdCBzZWFyY2ggYWNjb3JkaW9uLlxuICAgKi9cbiAgQElucHV0KCkgZWRpdFNlYXJjaFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyB0aGUgcGFyZW50J3MgZm9ybSBncm91cC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgaXMgcmVxdWllcmVkIHRvIGJlIGZpbGxlZCBpZiBuYXNGb3JtQ29udHJvbE5hbWUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sR3JvdXBCb29raW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTWFrZSBsYXRlc3Qgc2VhcmNoZXMgYW5kIGdlb2xvY2F0aW9uIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIG9yaWdpbiBhaXJwb3J0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgb3ZlcnJpZGVPcmlnaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoaXMgd2lsbCBtYWtlIHRoZSBmaWx0ZXIgZGlzcGxheSBzdWdnZXN0ZWQgYWlycG9ydHMgYmFzZWQgb24gZ2VvbG9jYXRpb24gYW5kIGxhdGVzdCBzZWFyY2hlcy5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVN1Z2dlc3Rpb25zPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBnZXQgY2xvc2VzdEFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBjbG9zZXN0QWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICBpZiAoIWFpcnBvcnRzIHx8IGFpcnBvcnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG5cbiAgICBpZiAodGhpcy5leGlzdHModGhpcy5vdmVycmlkZU9yaWdpbikpIHtcbiAgICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSBhaXJwb3J0c1swXS5jb2RlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoaXMgd2lsbCBvbmx5IGRpc3BsYXkgYWlycG9ydCBzZWxlY3Rpb24uIFdoZW4gYSBjaXR5IHBhaXIgaXMgc2VsZWN0ZWQsIHRoZSByZXN0IG9mIHRoZSBmaWx0ZXIgd2lsbCBiZSB2aXNpYmxlLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbGwgYWlycG9ydHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZSBkcm9wZG93biBsaXN0cy5cbiAgICogSWYgZGlzcGxheUxhdGVzdFNlYXJjaGVzIGlzIHRydWUsIGl0IHdpbGwgdHJ5IHRvIGdldCB0aGUgbGF0ZXN0IHNlYXJjaGVzIGZyb20gdGhlIGFiYW5kb25lZCBiYXNrZXQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgYWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICB0aGlzLmFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcykpIHtcbiAgICAgIGNvbnN0IGFiYW5kb25lZEJhc2tldCA9IHRoaXMuYWJhbmRvbmVkQmFza2V0U2VydmljZS5nZXRBbGwoKTtcbiAgICAgIHRoaXMuc2V0TGF0ZXN0U2VhcmNoZXMoYWJhbmRvbmVkQmFza2V0LCB0aGlzLmFpcnBvcnRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdHJpcFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcFR5cGVWYWx1ZTtcbiAgfVxuICBzZXQgdHJpcFR5cGUodHJpcFR5cGU6IFRyaXBUeXBlKSB7XG4gICAgaWYgKHRyaXBUeXBlID09PSB0aGlzLnRyaXBUeXBlVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyaXBUeXBlVmFsdWUgPSB0cmlwVHlwZTtcbiAgICBcbiAgICB0aGlzLnRyaXBUeXBlQ2hhbmdlLmVtaXQodGhpcy50cmlwVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlyZWN0T25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RPbmx5VmFsdWU7XG4gIH1cbiAgc2V0IGRpcmVjdE9ubHkoZGlyZWN0T25seTogYm9vbGVhbikge1xuICAgIGlmIChkaXJlY3RPbmx5ID09PSB0aGlzLmRpcmVjdE9ubHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlyZWN0T25seVZhbHVlID0gZGlyZWN0T25seTtcbiAgICB0aGlzLmRpcmVjdE9ubHlDaGFuZ2UuZW1pdCh0aGlzLmRpcmVjdE9ubHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxpbWl0IGZvciB3aGVuIHRoZSB0b3RhbCBhbW91bnQgb2YgcGFzc2VuZ2VycyBleGNlZWRzIHRvIGJlIGEgZ3JvdXAgYm9va2luZy5cbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwQm9va2luZ0xpbWl0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIG5leHQgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbE5leHRNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSBhIHBhc3NlbmdlciBzZWxlY3Rpb24gY2hhbmdlIGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQYXNzZW5nZXJzTW9kZWw+PigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBAT3V0cHV0KCkgdHJpcFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyaXBUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBAT3V0cHV0KCkgZGlyZWN0T25seUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXJzIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSWYgc2V0LCBFbmFibGVzIHRoZSB0aW1lIGRyb3Bkb3duIHNlbGVjdG9yIGFsb25nc2lkZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgdGltZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRSBkLCBNTU0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tR0InO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFuZCBtYXJnaW5zIGFyb3VuZCB0aGUgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3Qgb3V0Ym91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGluYm91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2hvdy9BZGQgZGF0ZSBwaWNrZXIgY29tYm8gaW50byB0aGUgZmlsdGVyIGlmIHNldCB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGF0ZXBpY2tlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1pbmltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1heGltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWF4aW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xpbmcgdHJhbnNpdCB0eXBlIHdoZW4gZmlsdGVyIGlzIG1pbmltaXplZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlNb2JpbGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnb3InIGluIHRoZSBzdWdnZXN0aW9uZWQgYWlycG9ydHMuXG4gICAqL1xuICBASW5wdXQoKSBvckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yICdUcmF2ZWxlcnMnIGluIHRoZSBwYXNzZW5nZXJzIHNlbGVjdCBidXR0b24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJzVGl0bGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlIGRlc3RpbmF0aW9ucyBkcm9wZG93biBsaXN0IHdoZW4gb3JpZ2luIGFpcnBvcnQgaXMgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWREZXN0aW5hdGlvblRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIGRlc3RpbmF0aW9uIGlucHV0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSBwYXNzZW5nZXIgc2VsZWN0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmlwIHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyaXBTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSB0aGUgdHJhbnNpdCBzd2l0Y2gsIHNldCB0aGlzIHRvIGZhbHNlIHRvIHJlbW92ZSBpdC4gSXQncyB0cnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVUcmFuc2l0U3dpdGNoID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBhbmQgaW5ib3VuZCBkYXRlcyB3aWxsIGJyZWFrIGhvcml6b250YWxseS5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJDb21ib0lubGluZUZsZXggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBvdXRib3VuZCBBaXJwb3J0IFNlbGVjdCBcbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBpbmJvdW5kIEFpcnBvcnQgU2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0SW5ib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFBhc3NlbmdlciBTZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBvdXRib3VuZCBkYXRlcGlja2VyIElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCBmb3IgRGF0ZSBwaWNrZXJcbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBpbmJvdW5kIGRhdGVwaWNrZXIgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBEYXRlIHBpY2tlclxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVBpY2tlckluYm91bmRJZDogc3RyaW5nO1xuXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFRyaXAgdHlwZVxuICAgKi9cbiAgQElucHV0KCkgdHJpcFR5cGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBUcmFuc2l0IHR5cGVcbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zaXRUeXBlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGNhbGVuZGFyIGNoYW5nZXMgbW9udGguXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgYWN0aXZlbHkgY2hhbmdlZCB0aGUgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGdlb2xvY2F0aW9uIG9mIHRoZSB1c2VyLiBXaWxsIGJlIGVtaXR0ZWQgaWYgJ2VuYWJsZVN1Z2dlc3Rpb25zJyBpcyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWRNb250aChtb250aDogVXRjRGF0ZSkge1xuICAgIGlmICh0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKG1vbnRoLCB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSA9IG1vbnRoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHBhc3NlbmdlclNlbGVjdElucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXNzZW5nZXJTZWxlY3RJZCA/IHRoaXMucGFzc2VuZ2VyU2VsZWN0SWQgOiBgbmFzLWZpbHRlcl9fcGFzc2VuZ2VyLXNlbGVjdC0ke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuICBcbiAgZ2V0IHRyaXBUeXBlSW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyaXBUeXBlSWQgPyB0aGlzLnRyaXBUeXBlSWQgOiBgbmFzLWZpbHRlcl9fdHJpcC10eXBlLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IHRyYW5zaXRUeXBlSW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zaXRUeXBlSWQgPyB0aGlzLnRyYW5zaXRUeXBlSWQgOiBgbmFzLWZpbHRlcl9fdHJhbnNpdC10eXBlLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgdHJpcFR5cGVWYWx1ZTogVHJpcFR5cGU7XG4gIHByaXZhdGUgZGlyZWN0T25seVZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIGNsb3Nlc3RBaXJwb3J0c1ZhbHVlOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBwcml2YXRlIG91dGJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgaW5ib3VuZE9wZW5WYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIHBhc3NlbmdlcnNWYWx1ZSA9IG5ldyBBcnJheTxQYXNzZW5nZXJzTW9kZWw+KCk7XG4gIHByaXZhdGUgZm9jdXNBc3luY1RpbW91dDogYW55O1xuICBwcml2YXRlIHRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGV2aWNlSGVscGVyOiBEZXZpY2VIZWxwZXIsXG4gICAgcHVibGljIHNvcnRTZXJ2aWNlOiBTb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGFiYW5kb25lZEJhc2tldFNlcnZpY2U6IEFiYW5kb25lZEJhc2tldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZUhlbHBlcixcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCduYXMtZmlsdGVyJyk7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBuZXh0SWQrKztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuZW5hYmxlVHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwVHlwZSA9IHRoaXMudHJpcFR5cGUgIT09IFRyaXBUeXBlLm9uZVdheSAmJiB0aGlzLnRyaXBUeXBlICE9PSBUcmlwVHlwZS50d29XYXlSZXR1cm4gPyBUcmlwVHlwZS50d29XYXlSZXR1cm4gOiB0aGlzLnRyaXBUeXBlO1xuXG4gICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSk7XG4gICAgICAgIGlmKHRyaXBUeXBlQ29udHJvbCkge1xuICAgICAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudHJpcFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmFzRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc05hc0dyb3VwVmFsaWQgPSAvdHJ1ZS9pLnRlc3QoeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXJlY3RPbmx5Q29udHJvbCkge1xuICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5Q29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlXG4gICAgICApO1xuXG4gICAgICBpZiAodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdHJpcFR5cGVDb250cm9sLnZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG5cbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZCkge1xuICAgICAgICAgIGNvbnN0IGluYm91bmRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbmJvdW5kQ29udHJvbCAmJiB0aGlzLmluYm91bmREaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5ib3VuZENvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaXBUeXBlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogVHJpcFR5cGUpID0+IHtcbiAgICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCBkaXJlY3RPbmx5Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICApO1xuICAgICAgaWYgKGRpcmVjdE9ubHlDb250cm9sKSB7XG4gICAgICAgIGRpcmVjdE9ubHlDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIXRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KFxuICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgKTtcblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dChcbiAgICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBnZXRDbG9zZXN0QWlycG9ydHMocG9zaXRpb246IEdlb2xvY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBtb2RpZmllcnNJbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nXG4gICAgKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ21kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdsZycpO1xuICAgIH1cblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgZ2V0QWlycG9ydFNlbGVjdENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzKCdhaXJwb3J0LXNlbGVjdCcsIFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsXG4gICAgXSk7XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucygpOiBBcnJheTxBaXJwb3J0TW9kZWw+IHtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uKHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5cbiAgICAgICAgICA/IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4uZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKHRoaXMuY2xvc2VzdEFpcnBvcnRzXG4gICAgICAgICAgPyB0aGlzLmNsb3Nlc3RBaXJwb3J0cy5maWx0ZXIoXG4gICAgICAgICAgICAoeCkgPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlXG4gICAgICAgICAgKVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0RGF0ZVBpY2tlcnNDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJDbGFzcygnZGF0ZS1jb21ibycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnLFxuICAgIF0pO1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1xuICAgICkge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICBdO1xuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIGNvbnN0IHRyYXZlbERldGFpbHNCYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ3RyYXZlbC1kZXRhaWxzJyk7XG4gICAgcmV0dXJuIHRyYXZlbERldGFpbHNCYXNlLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBvbkluYm91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZVxuICAgIGlmKHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VyT3V0Ym91bmQpLmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgfVxuXG4gIHBhc3NlbmdlcktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgdGhpcy5pc1RhYmxldERpc3BsYXkoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGlmKCF0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLmVuYWJsZVRyaXBTd2l0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VyT3V0Ym91bmQuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaEZvY3VzTmV4dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmKGV2ZW50LmtleSA9PSAnVGFiJykge1xuICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmFuc2l0U3dpdGNoLmJ1dHRvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYW5zaXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gdHJ1ZTtcblxuICAgICAgICAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICAgICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZGlyZWN0T25seSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlRGlyZWN0T25seS5uYXRpdmVFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZGlyZWN0T25seSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0cmlwVHlwZUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmRpcmVjdE9ubHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLm9wZW5UcmFuc2l0VHlwZVNlbGVjdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaEZvY3VzT25QcmV2aW91cygpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwVHlwZVNlbGVjdGlvbi5yYWRpb0VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2guYnV0dG9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25QYXNzZW5nZXJzU2VsZWN0Rm9jdXNPbk5leHQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuUGFzc2VuZ2VyU2VsZWN0ID0gZmFsc2U7XG4gICAgaWYodGhpcy5lbmFibGVUcmFuc2l0U3dpdGNoKSB7XG4gICAgICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJhbnNpdFN3aXRjaC5idXR0b24pO1xuICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9jdXNBc3luYyhyZWZFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNBc3luY1RpbW91dCk7XG5cbiAgICB0aGlzLmZvY3VzQXN5bmNUaW1vdXQgPSBzZXRUaW1lb3V0KCgpID0+XG4gICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHJlZkVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIG9uVHJhbnNpdFN3aXRjaEZvY3VzTmV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6dm9pZCB7XG4gICAgaWYoZXZlbnQua2V5ID09ICdUYWInKSB7XG5cbiAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hGb2N1c09uUHJldmlvdXMoKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCF0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJpcFR5cGVTZWxlY3Rpb24ucmFkaW9FbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9IFxuICAgIH1cbiAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoRm9jdXNPblByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoXG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93blxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYodGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuZGF0ZXBpY2tlckNvbWJvLmRhdGVwaWNrZXJPdXRib3VuZCkuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5haXJwb3J0U2VsZWN0LmNvbWJvKSkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICAgIGlmICg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbikge1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyhcbiAgICAgICAgICAgICg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbikuaW5wdXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZih0aGlzLmVuYWJsZVRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwVHlwZVNlbGVjdGlvbi5yYWRpb0VsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgfVxuXG4gIG9uRm9jdXNPbk5leHRDaGFuZ2UoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmKGV2ZW50LmtleSA9PSAnVGFiJyB8fCBldmVudC5rZXkgPT0gJ0VudGVyJykge1xuICAgICAgaWYodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikgeyAgXG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoXG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93blxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKHRoaXMudHJhbnNpdFN3aXRjaCkgeyAgXG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoXG4gICAgICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLmJ1dHRvblxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfSBcbiAgICBcbiAgfVxuXG4gIGlzTW9iaWxlRGlzcGxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aE1vYmlsZSh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgaXNUYWJsZXREaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBvbk9yaWdpbk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmIChcbiAgICAgIG9yaWdpblNuYXBzaG90ICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90ICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlLmxlbmd0aCAmJlxuICAgICAgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTWF4aW1pemUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1heGltaXplID0gdGhpcy52YWxpZGF0ZUFpcnBvcnRWYWx1ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyQmFja2Ryb3BDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UuZW1pdCh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpO1xuICB9XG5cbiAgb25QYXNzZW5nZXJTZWxlY3RPcGVuKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblBhc3NlbmdlclNlbGVjdCA9ICF0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3Q7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFzc2VuZ2VyU2VsZWN0KTtcblxuICAgIGlmICh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3Q/Lm51bWJlckZpZWxkcy5maXJzdCkge1xuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0Lm51bWJlckZpZWxkcy5maXJzdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaE9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRyaXBTd2l0Y2hGb2N1c1RpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVTZWxlY3Rpb24/LnJhZGlvRWxlbWVudD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSAhdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3Q7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpICYmIHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRGb2N1c09uTmF0aXZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgZWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZTtcbiAgICBcbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGVcbiAgICAgICk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudHJpcFR5cGUpO1xuICAgIH1cblxuICB9XG5cbiAgb25UcmFuc2l0Q2hhbmdlKGRpcmVjdE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHk7XG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICk7XG4gICAgICB0cmlwVHlwZUNvbnRyb2wucGF0Y2hWYWx1ZShkaXJlY3RPbmx5KTtcbiAgICB9XG4gICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSAhdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3Q7XG4gIH1cblxuICBnZXRUcmF2ZWxEZXRhaWxzVHJpcFN3aXRjaEljb25DbGFzcyhtb2RpZmllcnM/OiBhbnkpOiBBcnJheTxDbGFzc01vZGVsPiB7XG4gICAgY29uc3QgaWNvbk1lZGl1bUJhc2UgPSBuZXcgTmFzQ29tcG9uZW50QmFzZSgnaWNvbi1tZWRpdW0nKTtcblxuICAgIHJldHVybiBbXG4gICAgICBpY29uTWVkaXVtQmFzZS5nZXRDbGFzcygnJywgbW9kaWZpZXJzKSxcbiAgICAgIHRoaXMuZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdpY29uJyksXG4gICAgXTtcbiAgfVxuXG4gIGdldFRyaXBTd2l0Y2hMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyaXBUeXBlID09PSBUcmlwVHlwZS50d29XYXlSZXR1cm5cbiAgICAgID8gdGhpcy50cmlwU3dpdGNoUm91bmRUcmlwTGFiZWxcbiAgICAgIDogdGhpcy50cmlwU3dpdGNoT25lV2F5TGFiZWw7XG4gIH1cblxuICBnZXRUcmFuc2l0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RPbmx5ID8gdGhpcy5kaXJlY3RPbmx5TGFiZWwgOiB0aGlzLmRpcmVjdFRyYW5zaXRMYWJlbDtcbiAgfVxuXG4gIG9uQWNjb3JkaW9uVG9nZ2xlQ2hhbmdlKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5U3VtbWFyeSA9ICFleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgYCR7dGhpcy5wYXNzZW5nZXJTZWxlY3RMYWJlbH0ke3RoaXMuZGVmYXVsdFN1bW1hcnlTZXBhcmF0b3J9YCArXG4gICAgICBgJHt0aGlzLmdldFRyaXBTd2l0Y2hMYWJlbCgpLnRvTG93ZXJDYXNlKCl9JHt0aGlzLmxhc3RTdW1tYXJ5U2VwYXJhdG9yXG4gICAgICB9JHt0aGlzLmdldFRyYW5zaXRMYWJlbCgpLnRvTG93ZXJDYXNlKCl9YFxuICAgICk7XG4gIH1cblxuICBzaG91bGRNYXhpbWl6ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0ICYmXG4gICAgICB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGUgJiZcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbiAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICF0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICh0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiB8fCB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4aW1pemU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmV4aXN0cyh0aGlzLm1pbmltaXplKSkge1xuICAgICAgaWYgKHRoaXMubWF4aW1pemUpIHtcbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNOYXNHcm91cFZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vbk9yaWdpbk9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoXG4gICAgICAgICg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pLmlucHV0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TGF0ZXN0U2VhcmNoZXMoYWJhbmRvbmVkQmFza2V0OiBBcnJheTxBYmFuZG9uZWRCYXNrZXRJdGVtTW9kZWw+LCBhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPik6IHZvaWQge1xuICAgIGlmICghYWJhbmRvbmVkQmFza2V0IHx8ICFhaXJwb3J0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXF1ZSA9IG5ldyBBcnJheTxBYmFuZG9uZWRCYXNrZXRJdGVtTW9kZWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJhbmRvbmVkQmFza2V0KSB7XG4gICAgICBpZiAoIXVuaXF1ZS5zb21lKCh4KSA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCgoeCkgPT4geC5vcmlnaW5Db2RlKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkNvZGVzID0gdW5pcXVlLm1hcCgoeCkgPT4geC5kZXN0aW5hdGlvbkNvZGUpO1xuXG4gICAgY29uc3QgbGF0ZXN0U2VhcmNoZXNPcmlnaW4gPSBhaXJwb3J0cy5maWx0ZXIoKGFpcnBvcnQpID0+XG4gICAgICB1bmlxdWUuc29tZShcbiAgICAgICAgKHgpID0+IHgub3JpZ2luQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKChhaXJwb3J0KSA9PlxuICAgICAgdW5pcXVlLnNvbWUoXG4gICAgICAgICh4KSA9PiB4LmRlc3RpbmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBjb2RlID0gJ2NvZGUnO1xuICAgIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4gPSB0aGlzLnNvcnRTZXJ2aWNlXG4gICAgICAuc29ydEJ5T2JqZWN0KGxhdGVzdFNlYXJjaGVzT3JpZ2luLCBvcmlnaW5Db2RlcywgY29kZSlcbiAgICAgIC5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5leGlzdHModGhpcy5vdmVycmlkZU9yaWdpbikpIHtcbiAgICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luWzBdLmNvZGU7XG4gICAgfVxuXG4gICAgdGhpcy5sYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gdGhpcy5zb3J0U2VydmljZVxuICAgICAgLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKVxuICAgICAgLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZURyb3Bkb3ducygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8bmFzLWFjY29yZGlvbiAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSk7IGVsc2UgZmlsdGVyVGVtcGxhdGVcIiBzaW1wbGVcbiAgY29udGFpbmVyT25Ub2dnbGUgdHJhbnNwYXJlbnQgW2V4cGFuZGVkXT1cImV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlXCIgW3RpdGxlXT1cImVkaXRTZWFyY2hUaXRsZVwiXG4gICh0b2dnbGVDaGFuZ2UpPVwib25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmFzLWFjY29yZGlvbj5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSkgJiYgZGlzcGxheVN1bW1hcnlcIj57e2dldFN1bW1hcnkoKX19XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAjY29udGFpbmVyIFtuYXNDbGFzc109XCJnZXRDb250YWluZXJDbGFzcygpXCI+XG4gICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0RmlsdGVyQ2xhc3MoJ2ZpbHRlcnMnLCBbZXhpc3RzKG1pbmltaXplKSAmJiAnbWluaW1pemVkJywgZXhpc3RzKGlubGluZU9uRGVza3RvcCkgJiYgJ2lubGluZSddKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFpcnBvcnRzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuYXMtYWlycG9ydC1zZWxlY3QgKm5nSWY9XCJhaXJwb3J0cyAmJiBhaXJwb3J0UmVsYXRpb25zICYmIChlbmFibGVEZXN0aW5hdGlvblNlbGVjdClcIiAjYWlycG9ydFNlbGVjdCBjb21ib1xuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2xvd2VyLXotaW5kZXgnOiBvcGVuUGFzc2VuZ2VyU2VsZWN0IHx8IGluYm91bmRPcGVuIHx8IG91dGJvdW5kT3BlbiB9XCIgXG4gICAgICAgICAgW291dGJvdW5kSWRdPVwiYWlycG9ydFNlbGVjdE91dGJvdW5kSWRcIiBbaW5ib3VuZElkXT1cImFpcnBvcnRTZWxlY3RJbmJvdW5kSWRcIiBbYXJpYUxhYmVsQ2xlYXJdPVwiYXJpYUxhYmVsQ2xlYXJcIiBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvbl09XCJuYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvblwiIFt1c2VTd2l0Y2hdPVwidXNlU3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0QWlycG9ydFNlbGVjdENsYXNzKClcIiBbYWlycG9ydHNdPVwiYWlycG9ydHNcIiBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNdPVwiYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNcIiBbYWlycG9ydFJlbGF0aW9uc109XCJhaXJwb3J0UmVsYXRpb25zXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNPcmlnaW5dPVwibGF0ZXN0U2VhcmNoZXNPcmlnaW5cIiBbbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbl09XCJsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiIFtkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXT1cImRlc3RpbmF0aW9uQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIiBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCIgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiIFxuICAgICAgICAgIFtub0FpcnBvcnRzTGFiZWxdPVwibm9BaXJwb3J0c0xhYmVsXCIgW3BsYWNlaG9sZGVyRGVzdGluYXRpb25dPVwicGxhY2Vob2xkZXJEZXN0aW5hdGlvblwiIFtrZWVwU2VsZWN0aW9uXT1cImtlZXBTZWxlY3Rpb25cIlxuICAgICAgICAgIFtpbnZhbGlkRGVzdGluYXRpb25UZXh0XT1cImludmFsaWREZXN0aW5hdGlvblRleHRcIiAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoZGVzdGluYXRpb25DaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCIgKGZvY3VzT25OZXh0KT1cIm9uVHJpcFN3aXRjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIiAoZGVzdGluYXRpb25PcGVuQ2hhbmdlKT1cIm9uRGVzdGluYXRpb25PcGVuKCRldmVudClcIlxuICAgICAgICAgIChwb3NpdGlvbkNoYW5nZSk9XCJnZXRDbG9zZXN0QWlycG9ydHMoJGV2ZW50KVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0PlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgKCFlbmFibGVEZXN0aW5hdGlvblNlbGVjdClcIiAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2xvd2VyLXotaW5kZXgnOiBvcGVuUGFzc2VuZ2VyU2VsZWN0IHx8IGluYm91bmRPcGVuIHx8IG91dGJvdW5kT3BlbiB9XCJcbiAgICAgICAgICBbb3V0Ym91bmRJZF09XCJhaXJwb3J0U2VsZWN0T3V0Ym91bmRJZFwiIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiIFt1c2VTd2l0Y2hdPVwidXNlU3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2FpcnBvcnQtb3JpZ2luLXNlbGVjdCcpXCIgW2FpcnBvcnRzXT1cImFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCIgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCIgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIiBbb3JpZ2luQWlycG9ydENvZGVdPVwib3JpZ2luQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIiBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCIgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCIgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiIChmb2N1c09uTmV4dCk9XCJvblRyaXBTd2l0Y2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChvcmlnaW5PcGVuQ2hhbmdlKT1cIm9uT3JpZ2luT3BlbigkZXZlbnQpXCIgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3Q+XG4gICAgICAgIDxuYXMtc3VnZ2VzdGlvbnMgKm5nSWY9XCIoY2xvc2VzdEFpcnBvcnRzIHx8IGxhdGVzdFNlYXJjaGVzT3JpZ2luKSAmJiBleGlzdHMoZW5hYmxlU3VnZ2VzdGlvbnMpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycsICFleGlzdHMoZW5hYmxlRGF0ZXBpY2tlcnMpICYmICdmbGV4LWVuZCcpXCIgW3N1Z2dlc3Rpb25zXT1cImdldFN1Z2dlc3Rpb25zKClcIiBbb3JMYWJlbF09XCJvckxhYmVsXCJcbiAgICAgICAgICAoYWlycG9ydFNlbGVjdCk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiPjwvbmFzLXN1Z2dlc3Rpb25zPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkTWF4aW1pemUoKVwiPlxuICAgICAgICA8Zm9ybSAqbmdJZj1cImVuYWJsZVRyaXBTd2l0Y2hcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3JhZGlvJywgIWV4aXN0cyhlbmFibGVEYXRlcGlja2VycykgJiYgJ2ZsZXgtZW5kJylcIiAoa2V5ZG93bik9XCJvblRyaXBTd2l0Y2hGb2N1c05leHQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxuYXMtcmFkaW8gI3JhZGlvIFtpZF09XCJ0cmlwVHlwZUlucHV0SWQgKyAnX19yb3VuZC10cmlwJ1wiIFtuYW1lXT1cIid0cmlwVHlwZSdcIiBbdmFsdWVdPVwiMlwiIChjaGVja2VkQ2hhbmdlKT1cIm9uVHJpcFR5cGVDaGFuZ2UoMilcIiBbY2hlY2tlZF09XCJ0cmlwVHlwZSA9PT0gMlwiPlxuICAgICAgICAgICAge3t0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWx9fVxuICAgICAgICAgIDwvbmFzLXJhZGlvPlxuICAgICAgICAgIDxuYXMtcmFkaW8gI3JhZGlvIFtpZF09XCJ0cmlwVHlwZUlucHV0SWQgKyAnX19vbmUtd2F5J1wiIFtuYW1lXT1cIid0cmlwVHlwZSdcIiBbdmFsdWVdPVwiMVwiIChjaGVja2VkQ2hhbmdlKT1cIm9uVHJpcFR5cGVDaGFuZ2UoMSlcIiBbY2hlY2tlZF09XCJ0cmlwVHlwZSA9PT0gMVwiPlxuICAgICAgICAgICAge3t0cmlwU3dpdGNoT25lV2F5TGFiZWx9fVxuICAgICAgICAgIDwvbmFzLXJhZGlvPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJleGlzdHMoZW5hYmxlRGF0ZXBpY2tlcnMpXCIgW25hc0NsYXNzXT1cImdldERhdGVQaWNrZXJzQ2xhc3MoKVwiPlxuICAgICAgICAgIDxuYXMtZGF0ZXBpY2tlci1jb21ibyAjZGF0ZXBpY2tlckNvbWJvIGNvbXBhY3QgXG4gICAgICAgICAgICBbb3V0Ym91bmRJZF09XCJkYXRlUGlja2VyT3V0Ym91bmRJZFwiIFtpbmJvdW5kSWRdPVwiZGF0ZVBpY2tlckluYm91bmRJZFwiIFtpbmxpbmVGbGV4XT1cImlubGluZUZsZXhcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRdPVwibmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZUluYm91bmRdPVwibmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZFwiIFthdmFpbGFiaWxpdHldPVwiYXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCIgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJkaXNhYmxlUGFzdFNlbGVjdGlvblwiIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFtub0F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiIFtpbmJvdW5kQXZhaWxhYmxlRGF0ZXNdPVwiaW5ib3VuZEF2YWlsYWJsZURhdGVzXCJcbiAgICAgICAgICAgIFtpbmJvdW5kTGFiZWxdPVwiaW5ib3VuZExhYmVsXCIgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtvdXRib3VuZEF2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIiBbb3V0Ym91bmRMYWJlbF09XCJvdXRib3VuZExhYmVsXCJcbiAgICAgICAgICAgIFt0aW1lRGlzcGxheUZvcm1hdF09XCJ0aW1lRGlzcGxheUZvcm1hdFwiIFt0aW1lc109XCJ0aW1lc1wiIFtvdXRib3VuZERpc2FibGVkXT1cIm91dGJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2luYm91bmREaXNhYmxlZF09XCJpbmJvdW5kRGlzYWJsZWRcIiBbb3V0Ym91bmRPbmx5XT1cInRyaXBUeXBlID09PSAxXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiIFthcmlhTGFiZWxQcmV2aW91c01vbnRoXT1cImFyaWFMYWJlbFByZXZpb3VzTW9udGhcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbE5leHRNb250aF09XCJhcmlhTGFiZWxOZXh0TW9udGhcIiAoZm9jdXNPbk5leHRDaGFuZ2UpPVwib25Gb2N1c09uTmV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c09uUHJldmlvdXNDaGFuZ2UpPVwib25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGluYm91bmRNb250aENoYW5nZSk9XCJvbkluYm91bmRNb250aENoYW5nZSgkZXZlbnQpXCIgKG91dGJvdW5kTW9udGhDaGFuZ2UpPVwib25PdXRib3VuZE1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgWyhvdXRib3VuZE9wZW4pXT1cIm91dGJvdW5kT3BlblwiIFsoaW5ib3VuZE9wZW4pXT1cImluYm91bmRPcGVuXCJcbiAgICAgICAgICAgIFsoaW5ib3VuZFNlbGVjdGVkRGF0ZSldPVwiaW5ib3VuZFNlbGVjdGVkRGF0ZVwiIFsob3V0Ym91bmRTZWxlY3RlZERhdGUpXT1cIm91dGJvdW5kU2VsZWN0ZWREYXRlXCI+XG4gICAgICAgICAgPC9uYXMtZGF0ZXBpY2tlci1jb21ibz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVQYXNzZW5nZXJzU2VsZWN0IHx8IGVuYWJsZVRyYW5zaXRTd2l0Y2hcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Ryb3Bkb3duLXdyYXBwZXInKVwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVQYXNzZW5nZXJzU2VsZWN0XCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdwYXNzZW5nZXJzJylcIj5cbiAgICAgICAgICAgIDxidXR0b24gI3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duIChjbGljayk9XCJvblBhc3NlbmdlclNlbGVjdE9wZW4oJGV2ZW50KVwiIFtpZF09XCJwYXNzZW5nZXJTZWxlY3RJZFwiXG4gICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygncGFzc2VuZ2Vycy1idXR0b24nLCBvcGVuUGFzc2VuZ2VyU2VsZWN0ICYmICdhY3RpdmUnKVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGFiZWwnKVwiPlxuICAgICAgICAgICAgICAgIDxwIFtuYXNDbGFzc109XCJnZXRDbGFzcygnYnV0dG9uLXRpdGxlJylcIj57e3Bhc3NlbmdlcnNUaXRsZUxhYmVsfX08L3A+XG4gICAgICAgICAgICAgICAgPHA+e3twYXNzZW5nZXJTZWxlY3RMYWJlbH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYXZlbGVyLWljb24nKVwiPjxuYXMtaWNvbiBbaWNvbl09XCInbXktcHJvZmlsZS1jb21wYWN0J1wiXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCInc21hbGwnXCI+PC9uYXMtaWNvbj48L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wZW5QYXNzZW5nZXJTZWxlY3RcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMtc2VsZWN0aW9uJylcIj5cbiAgICAgICAgICAgICAgPG5hcy1wYXNzZW5nZXItc2VsZWN0ICNwYXNzZW5nZXJTZWxlY3QgW2FyaWFMYWJlbEFkZF09XCJhcmlhTGFiZWxBZGRcIiBbYXJpYUxhYmVsU3VidHJhY3RdPVwiYXJpYUxhYmVsU3VidHJhY3RcIlxuICAgICAgICAgICAgICAgIFthZHVsdHNMYWJlbF09XCJwYXNzZW5nZXJTZWxlY3RBZHVsdHNMYWJlbFwiIFt5b3V0aHNMYWJlbF09XCJwYXNzZW5nZXJTZWxlY3RZb3V0aHNMYWJlbFwiXG4gICAgICAgICAgICAgICAgW3lvdW5nQWR1bHRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0WW91bmdBZHVsdHNMYWJlbFwiIFtjaGlsZHJlbkxhYmVsXT1cInBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpbmZhbnRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsXCIgW21heFBheENvdW50XT1cIm1heFBheENvdW50XCJcbiAgICAgICAgICAgICAgICBbbWluQWR1bHRDb3VudF09XCJtaW5BZHVsdENvdW50XCIgW3RpdGxlXT1cInBhc3NlbmdlclNlbGVjdFRpdGxlXCIgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ109XCJuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ1wiIFtncm91cEJvb2tpbmdMYWJlbF09XCJncm91cEJvb2tpbmdMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2dyb3VwQm9va2luZ0xpbWl0XT1cImdyb3VwQm9va2luZ0xpbWl0XCIgKGZvY3VzT25OZXh0KT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25OZXh0KClcIlxuICAgICAgICAgICAgICAgIChmb2N1c09uUHJldmlvdXMpPVwib25QYXNzZW5nZXJzU2VsZWN0Rm9jdXNPblByZXZpb3VzKClcIlxuICAgICAgICAgICAgICAgIFsocGFzc2VuZ2VycyldPVwicGFzc2VuZ2Vyc1wiPjwvbmFzLXBhc3Nlbmdlci1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8bmFzLWJhY2tkcm9wIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICAgICAgICAgICAgW3Nob3dCYWNrZHJvcF09XCJvcGVuUGFzc2VuZ2VyU2VsZWN0XCIgKHNob3dCYWNrZHJvcENoYW5nZSk9XCJvblBhc3NlbmdlckJhY2tkcm9wQ2hhbmdlKCRldmVudClcIj48L25hcy1iYWNrZHJvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVUcmFuc2l0U3dpdGNoXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCd0cmFuc2l0LXR5cGUnKVwiPlxuICAgICAgICAgICAgPG5hcy1idXR0b24gKm5nSWY9XCJkaXJlY3RPbmx5TGFiZWwgJiYgZGlyZWN0VHJhbnNpdExhYmVsXCIgI3RyYW5zaXRTd2l0Y2ggYmxvY2sgbGlnaHRcbiAgICAgICAgICAgICAgW2lkXT1cInRyYW5zaXRUeXBlSW5wdXRJZFwiIFtpY29uVHlwZV09XCInY2hldnJvbi1kb3duJ1wiIFtsYWJlbF09XCJnZXRUcmFuc2l0TGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygndHJhbnNpdCcsIG9wZW5UcmFuc2l0VHlwZVNlbGVjdCAmJiAnYWN0aXZlJylcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIiAoY2xpY2spPVwib25UcmFuc2l0U3dpdGNoT3BlbigkZXZlbnQpXCIgKGZvY3VzT25OZXh0KT1cIm9uVHJhbnNpdFN3aXRjaEZvY3VzTmV4dCgkZXZlbnQpXCI+e3sgZ2V0VHJhbnNpdExhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvbmFzLWJ1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGVuVHJhbnNpdFR5cGVTZWxlY3RcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYW5zaXQtdHlwZS1zZWxlY3Rpb24nKVwiIChrZXlkb3duKT1cInRyYW5zaXRLZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwidHJhbnNpdFR5cGVJbnB1dElkICsgJ19fZGlyZWN0J1wiIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsIGRpcmVjdE9ubHkgJiYgJ2FjdGl2ZScpXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgI3RyYW5zaXRUeXBlRGlyZWN0T25seSAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKHRydWUpXCI+e3sgZGlyZWN0T25seUxhYmVsIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJ0cmFuc2l0VHlwZUlucHV0SWQgKyAnX190cmFuc2l0J1wiIHR5cGU9XCJidXR0b25cIiAjdHJhbnNpdFR5cGVUcmFuc2l0XG4gICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgIWRpcmVjdE9ubHkgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKGZhbHNlKVwiPnt7IGRpcmVjdFRyYW5zaXRMYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAgIFsoc2hvd0JhY2tkcm9wKV09XCJvcGVuVHJhbnNpdFR5cGVTZWxlY3RcIj48L25hcy1iYWNrZHJvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
1442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCdEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBZ0NuRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFH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S0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBUUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUUcsYUFBYTtzQkFBckIsS0FBSztnQkFRRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9JLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFPRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRNb2RlbCB9IGZyb20gJy4uL2FpcnBvcnQtc2VsZWN0L21vZGVscy9haXJwb3J0Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3NlbmdlcnNNb2RlbCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvbW9kZWxzL3Bhc3NlbmdlcnMubW9kZWwnO1xuaW1wb3J0IHsgUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcGFzc2VuZ2VyLXNlbGVjdC9wYXNzZW5nZXItc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tYm9Db21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbWJvL2RhdGVwaWNrZXItY29tYm8uY29tcG9uZW50JztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBGaWx0ZXIgQ29tcG9uZW50IHwgRnVuY3Rpb25hbCB8IE5ldyBkZXNpZ25cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdCcpIHBhc3NlbmdlclNlbGVjdDogUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmlwU3dpdGNoJykgdHJpcFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRTd2l0Y2gnKSB0cmFuc2l0U3dpdGNoOiBCdXR0b25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdhaXJwb3J0U2VsZWN0MicpIGFpcnBvcnRTZWxlY3QyOiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmFkaW8nKSB0cmlwVHlwZVNlbGVjdGlvbjogUmFkaW9Db21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuICBpbmxpbmVGbGV4ID0gMDtcbiAgb3BlblBhc3NlbmdlclNlbGVjdCA9IGZhbHNlO1xuICBvcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuICBleHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlOiBib29sZWFuO1xuICBzaG93U3dpdGNoOiBib29sZWFuO1xuICBvbkZvY3VzSW5ib3VuZElnbm9yZWQgPSBmYWxzZTtcblxuICBnZXQgb3V0Ym91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kT3BlblZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5vdXRib3VuZE9wZW5WYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bnMoKTtcblxuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vdXRib3VuZE9wZW5WYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3V0Ym91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGluYm91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaW5ib3VuZE9wZW5WYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bnMoKTtcblxuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5ib3VuZE9wZW5UaW1lb3V0IGFzIG51bWJlcik7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblRpbWVvdXQ6IGFueTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSByZWNvcmQgY29udGFpbmluZyBrZXlzIHdpdGggYWxsIGFpcnBvcnQgY29kZXMgd2l0aCBjb3JyZXNwb25kaW5nIGFycmF5IG9mIGFpcnBvcnQgY29kZXMgY29ubmVjdGVkIHRvIHRoZSBrZXkuXG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0UmVsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyBvbiB0aGUgY2xlYXIgYnV0dG9uIGluc2lkZSB0aGUgYWlycG9ydCBzZWxlY3QgaW5wdXRzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQ2xlYXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgc3VidHJhY3QgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFN1YnRyYWN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgdG8gdGhlIGJhY2tkcm9wcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIGFkZCBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQWRkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsaXN0IG9mIGFpcnBvcnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JpZ2luIGRyb3Bkb3duLlxuICAgKiBJZiBub3QgaW5jbHVkZWQsIGFsbCBhaXJwb3J0cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWRPcmlnaW5BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBhaXJwb3J0cyB0aGF0IGFyZSByZXN0cmljdGVkIGZvciBkZXN0aW5hdGlvbiBhaXJwb3J0cy4gSXQgd2lsbCBkZWZhdWx0IHRvIGFpcnBvcnRzIGlmIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhaXJwb3J0cyB0aGF0IHRoZSB1c2VyIGFsbHJlYWR5IGhhcyBzZWFyaCBmb3Igc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlMYXRlc3RTZWFyY2hlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IHN3aXRjaCBVSSB0byBpbnRlcmNoYW5nZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSB1c2VTd2l0Y2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgYXJlIGNsb3NlIHRvIHRoZSB1c2VyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBhaXJwb3J0IGNvZGUgb2YgdGhlIG9yaWdpbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgb3JpZ2luIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIG9yaWdpbkFpcnBvcnRDb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIGRlc3RpbmF0aW9uIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGRlc3RpbmF0aW9uQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBvcmlnaW4gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBvcmlnaW4yQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgZGVzdGluYXRpb24yQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRvdGFsIG1heGltdW0gYW1vdW50IG9mIHBhc3NlbmdlcnMgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtYXhQYXhDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGRpZmZlcmVudCBwYXNzZW5nZXIgdHlwZXMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBwYXNzZW5nZXJzKCk6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLnBhc3NlbmdlcnNWYWx1ZTtcbiAgfVxuICBzZXQgcGFzc2VuZ2Vycyh2YWx1ZTogQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlcnNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGFzc2VuZ2Vyc0NoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBhZHVsdHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtaW5BZHVsdENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3Igcm91bmQgdHJpcCBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3Igb25lIHdheSBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaE9uZVdheUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgbXVsdGktY2l0eSBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaE11bHRpQ2l0eUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgZGlyZWN0IG9ubHkgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIGJvdGggZGlyZWN0IGFuZCB0cmFuc2l0IHNlbGVjdGlvbiBpbiB0aGUgdHJhbnNpdCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RUcmFuc2l0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgbWluaW1pemVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZU9uTW9iaWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgYWxsIGlucHV0cyBpbiB0aGUgZmlsdGVyIHNob3VsZCBiZSBmbGV4IGlubGluZS5cbiAgICovXG4gIEBJbnB1dCgpIGlubGluZU9uRGVza3RvcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhdGVzIGlmIHRoZSBlZGl0IHNlYXJjaCBvZiBhY2NvcmRpb24gc2hvdWxkIGJlIGV4cGVuZGVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTtcbiAgfVxuICBzZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBzZXBhcmF0b3IgZm9yIHRoZSBmaWx0ZXIgc3VtbWFyeSB0aGF0IGlzIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IGlzIGFyZSBkaXNwYXllZCBpZiBtaW5pbWl6ZU9uTW9iaWxlIGlzIHRydWUuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqIDEgdHJhdmVsbGVyLCByb3VuZCB0cmlwIGFuZCBkaXJlY3QvdHJhbnNpdFxuICAgKi9cbiAgQElucHV0KCkgbGFzdFN1bW1hcnlTZXBhcmF0b3IgPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRpdGxlIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGFkdWx0cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdEFkdWx0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIHlvdXRocyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFlvdXRoc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIHlvdW5nIGFkdWx0cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFlvdW5nQWR1bHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgY2hpbGRyZW4gcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RDaGlsZHJlbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGluZmFudHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgd2hlbiB0b3RhbCBudW1iZXIgb2Ygc2VsZWN0ZWQgcGFzc2VuZ2VycyBleGNlZWRzIHRoZSBncm91cCBib29raW5nIGxpbWl0XG4gICAqL1xuICBASW5wdXQoKSBncm91cEJvb2tpbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgYWxsIGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBhbGxBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgY2xvc2VzdCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgY2xvc2VzdEFpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgYXBwZWFyIGluIHRoZSBsaXN0IHRoYXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGFpcnBvcnRzXG4gICAqL1xuICBASW5wdXQoKSBub0FpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGluIHRoZSBhaXJwb3J0IHNlbGVjdCwgaWYgdGhlXG4gICAqIHVzZXIgdHJpZXMgdG8gc2VsZWN0IGEgZGVzdGluYXRpb24gYWlycG9ydCB3aXRob3V0IHNlbGVjdGluZyBhbiBvcmlnaW4gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE9yaWdpbkZpcnN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGFwcGVhciBvbiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlck9yaWdpbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QuXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uLCBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QgaWYgdXNlciBoYXMgZGVuaWVkIGdlb2xvY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckRlc3RpbmF0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIGVkaXQgc2VhcmNoIGFjY29yZGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRTZWFyY2hUaXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgdGhlIHBhcmVudCdzIGZvcm0gZ3JvdXAuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IGlzIHJlcXVpZXJlZCB0byBiZSBmaWxsZWQgaWYgbmFzRm9ybUNvbnRyb2xOYW1lIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW4yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb24yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNYWtlIGxhdGVzdCBzZWFyY2hlcyBhbmQgZ2VvbG9jYXRpb24gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgb3JpZ2luIGFpcnBvcnQgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKSBvdmVycmlkZU9yaWdpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG1ha2UgdGhlIGZpbHRlciBkaXNwbGF5IHN1Z2dlc3RlZCBhaXJwb3J0cyBiYXNlZCBvbiBnZW9sb2NhdGlvbiBhbmQgbGF0ZXN0IHNlYXJjaGVzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU3VnZ2VzdGlvbnM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbG9zZXN0QWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGNsb3Nlc3RBaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIGlmICghYWlycG9ydHMgfHwgYWlycG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnRzWzBdLmNvZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG9ubHkgZGlzcGxheSBhaXJwb3J0IHNlbGVjdGlvbi4gV2hlbiBhIGNpdHkgcGFpciBpcyBzZWxlY3RlZCwgdGhlIHJlc3Qgb2YgdGhlIGZpbHRlciB3aWxsIGJlIHZpc2libGUuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFsbCBhaXJwb3J0cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlIGRyb3Bkb3duIGxpc3RzLlxuICAgKiBJZiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gZ2V0IHRoZSBsYXRlc3Qgc2VhcmNoZXMgZnJvbSB0aGUgYWJhbmRvbmVkIGJhc2tldC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIHRoaXMuYWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSkge1xuICAgICAgY29uc3QgYWJhbmRvbmVkQmFza2V0ID0gdGhpcy5hYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLmdldEFsbCgpO1xuICAgICAgdGhpcy5zZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQsIHRoaXMuYWlycG9ydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgdGhlIHNlbGVjdGVkIHRyaXAgdHlwZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0cmlwVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZVZhbHVlO1xuICB9XG4gIHNldCB0cmlwVHlwZSh0cmlwVHlwZTogVHJpcFR5cGUpIHtcbiAgICBpZiAodHJpcFR5cGUgPT09IHRoaXMudHJpcFR5cGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpcFR5cGVWYWx1ZSA9IHRyaXBUeXBlO1xuICAgIFxuICAgIHRoaXMudHJpcFR5cGVDaGFuZ2UuZW1pdCh0aGlzLnRyaXBUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgd2hldGhlciB0aGUgc2VsZWN0ZWQgdHJhbnNpdCB0eXBlIGlzIGRpcmVjdCBvbmx5IG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXJlY3RPbmx5KCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHlWYWx1ZTtcbiAgfVxuICBzZXQgZGlyZWN0T25seShkaXJlY3RPbmx5OiBib29sZWFuKSB7XG4gICAgaWYgKGRpcmVjdE9ubHkgPT09IHRoaXMuZGlyZWN0T25seVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXJlY3RPbmx5VmFsdWUgPSBkaXJlY3RPbmx5O1xuICAgIHRoaXMuZGlyZWN0T25seUNoYW5nZS5lbWl0KHRoaXMuZGlyZWN0T25seSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbGltaXQgZm9yIHdoZW4gdGhlIHRvdGFsIGFtb3VudCBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdG8gYmUgYSBncm91cCBib29raW5nLlxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgb3JpZ2luIGRyb3Bkb3duIHNlbGVjdG9yIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBvcmlnaW5PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbjIgZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbjJPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb24yT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbjIgYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbjJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb24yQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSBhIHBhc3NlbmdlciBzZWxlY3Rpb24gY2hhbmdlIGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQYXNzZW5nZXJzTW9kZWw+PigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBAT3V0cHV0KCkgdHJpcFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyaXBUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBAT3V0cHV0KCkgZGlyZWN0T25seUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXJzIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSWYgc2V0LCBFbmFibGVzIHRoZSB0aW1lIGRyb3Bkb3duIHNlbGVjdG9yIGFsb25nc2lkZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgdGltZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRSBkLCBNTU0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tR0InO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFuZCBtYXJnaW5zIGFyb3VuZCB0aGUgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3Qgb3V0Ym91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGluYm91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2hvdy9BZGQgZGF0ZSBwaWNrZXIgY29tYm8gaW50byB0aGUgZmlsdGVyIGlmIHNldCB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGF0ZXBpY2tlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1pbmltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1heGltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWF4aW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xpbmcgdHJhbnNpdCB0eXBlIHdoZW4gZmlsdGVyIGlzIG1pbmltaXplZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlNb2JpbGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnb3InIGluIHRoZSBzdWdnZXN0aW9uZWQgYWlycG9ydHMuXG4gICAqL1xuICBASW5wdXQoKSBvckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yICdUcmF2ZWxlcnMnIGluIHRoZSBwYXNzZW5nZXJzIHNlbGVjdCBidXR0b24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJzVGl0bGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlIGRlc3RpbmF0aW9ucyBkcm9wZG93biBsaXN0IHdoZW4gb3JpZ2luIGFpcnBvcnQgaXMgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWREZXN0aW5hdGlvblRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIGRlc3RpbmF0aW9uIGlucHV0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSBwYXNzZW5nZXIgc2VsZWN0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmlwIHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyaXBTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSB0aGUgdHJhbnNpdCBzd2l0Y2gsIHNldCB0aGlzIHRvIGZhbHNlIHRvIHJlbW92ZSBpdC4gSXQncyB0cnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVUcmFuc2l0U3dpdGNoID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBhbmQgaW5ib3VuZCBkYXRlcyB3aWxsIGJyZWFrIGhvcml6b250YWxseS5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJDb21ib0lubGluZUZsZXggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBvdXRib3VuZCBBaXJwb3J0IFNlbGVjdCBcbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBpbmJvdW5kIEFpcnBvcnQgU2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0SW5ib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFBhc3NlbmdlciBTZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBvdXRib3VuZCBkYXRlcGlja2VyIElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCBmb3IgRGF0ZSBwaWNrZXJcbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBpbmJvdW5kIGRhdGVwaWNrZXIgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBEYXRlIHBpY2tlclxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVBpY2tlckluYm91bmRJZDogc3RyaW5nO1xuXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFRyaXAgdHlwZVxuICAgKi9cbiAgQElucHV0KCkgdHJpcFR5cGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBUcmFuc2l0IHR5cGVcbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zaXRUeXBlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVG9nZ2xlIGZvciBlbmFibGluZyBtdWx0aS1jaXR5IGZ1bmN0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlTXVsdGlDaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZ2VvbG9jYXRpb24gb2YgdGhlIHVzZXIuIFdpbGwgYmUgZW1pdHRlZCBpZiAnZW5hYmxlU3VnZ2VzdGlvbnMnIGlzIHRydWUuXG4gICAqL1xuICBAT3V0cHV0KCkgcG9zaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdlb2xvY2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgobW9udGgsIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcGFzc2VuZ2VyU2VsZWN0SW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhc3NlbmdlclNlbGVjdElkID8gdGhpcy5wYXNzZW5nZXJTZWxlY3RJZCA6IGBuYXMtZmlsdGVyX19wYXNzZW5nZXItc2VsZWN0LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG4gIFxuICBnZXQgdHJpcFR5cGVJbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJpcFR5cGVJZCA/IHRoaXMudHJpcFR5cGVJZCA6IGBuYXMtZmlsdGVyX190cmlwLXR5cGUtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgdHJhbnNpdFR5cGVJbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNpdFR5cGVJZCA/IHRoaXMudHJhbnNpdFR5cGVJZCA6IGBuYXMtZmlsdGVyX190cmFuc2l0LXR5cGUtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBwcml2YXRlIG91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSB0cmlwVHlwZVZhbHVlOiBUcmlwVHlwZTtcbiAgcHJpdmF0ZSBkaXJlY3RPbmx5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgY2xvc2VzdEFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgb3V0Ym91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFzc2VuZ2Vyc1ZhbHVlID0gbmV3IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4oKTtcbiAgcHJpdmF0ZSBmb2N1c0FzeW5jVGltb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwdWJsaWMgc29ydFNlcnZpY2U6IFNvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWJhbmRvbmVkQmFza2V0U2VydmljZTogQWJhbmRvbmVkQmFza2V0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoJ25hcy1maWx0ZXInKTtcbiAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5jb21wb25lbnRJZCA9IG5leHRJZCsrO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5lbmFibGVUcmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBUeXBlID0gdGhpcy50cmlwVHlwZSAhPT0gVHJpcFR5cGUub25lV2F5ICYmIHRoaXMudHJpcFR5cGUgIT09IFRyaXBUeXBlLnR3b1dheVJldHVybiA/IFRyaXBUeXBlLnR3b1dheVJldHVybiA6IHRoaXMudHJpcFR5cGU7XG5cbiAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKSB7XG4gICAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKTtcbiAgICAgICAgaWYodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUodGhpcy50cmlwVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLnRyaXBUeXBlID09IFRyaXBUeXBlLnR3b1dheU9wZW4pIHtcbiAgICAgIHRoaXMuc2hvd1N3aXRjaCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dTd2l0Y2ggPSB0aGlzLmV4aXN0cyh0aGlzLnVzZVN3aXRjaCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmFzRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc05hc0dyb3VwVmFsaWQgPSAvdHJ1ZS9pLnRlc3QoeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXJlY3RPbmx5Q29udHJvbCkge1xuICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5Q29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlXG4gICAgICApO1xuXG4gICAgICBpZiAodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdHJpcFR5cGVDb250cm9sLnZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG5cbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZCkge1xuICAgICAgICAgIGNvbnN0IGluYm91bmRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbmJvdW5kQ29udHJvbCAmJiB0aGlzLmluYm91bmREaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5ib3VuZENvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaXBUeXBlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogVHJpcFR5cGUpID0+IHtcbiAgICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCBkaXJlY3RPbmx5Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICApO1xuICAgICAgaWYgKGRpcmVjdE9ubHlDb250cm9sKSB7XG4gICAgICAgIGRpcmVjdE9ubHlDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIXRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KFxuICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgKTtcblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dChcbiAgICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBnZXRDbG9zZXN0QWlycG9ydHMocG9zaXRpb246IEdlb2xvY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBtb2RpZmllcnNJbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nXG4gICAgKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ21kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdsZycpO1xuICAgIH1cblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgZ2V0QWlycG9ydFNlbGVjdENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzKCdhaXJwb3J0LXNlbGVjdCcsIFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsXG4gICAgXSk7XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucygpOiBBcnJheTxBaXJwb3J0TW9kZWw+IHtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uKHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5cbiAgICAgICAgICA/IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4uZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKHRoaXMuY2xvc2VzdEFpcnBvcnRzXG4gICAgICAgICAgPyB0aGlzLmNsb3Nlc3RBaXJwb3J0cy5maWx0ZXIoXG4gICAgICAgICAgICAoeCkgPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlXG4gICAgICAgICAgKVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0RGF0ZVBpY2tlcnNDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJDbGFzcygnZGF0ZS1jb21ibycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnLFxuICAgIF0pO1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1xuICAgICkge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICBdO1xuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIGNvbnN0IHRyYXZlbERldGFpbHNCYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ3RyYXZlbC1kZXRhaWxzJyk7XG4gICAgcmV0dXJuIHRyYXZlbERldGFpbHNCYXNlLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBvbkluYm91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZVxuICAgIGlmKHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VyT3V0Ym91bmQpLmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgfVxuXG4gIHBhc3NlbmdlcktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgdGhpcy5pc1RhYmxldERpc3BsYXkoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGlmKCF0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZU11bHRpQ2l0eSkgJiYgdGhpcy50cmlwVHlwZSA9PSBUcmlwVHlwZS50d29XYXlPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9jdXNJbmJvdW5kSWdub3JlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMuZGF0ZXBpY2tlckNvbWJvPy5kYXRlcGlja2VyT3V0Ym91bmQ/LmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3BlbihmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzSW5ib3VuZERhdGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYoZXZlbnQua2V5ID09ICdUYWInIHx8IGV2ZW50LmtleSA9PSAnRW50ZXInKSB7XG4gICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pO1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB0aGlzLm9uRm9jdXNJbmJvdW5kSWdub3JlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VySW5ib3VuZC5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmlwU3dpdGNoRm9jdXNOZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYoZXZlbnQua2V5ID09ICdUYWInKSB7XG4gICAgICBpZighdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykpIHtcbiAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2guYnV0dG9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSB0cnVlO1xuXG4gICAgICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5kaXJlY3RPbmx5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICAgICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZGlyZWN0T25seSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoRm9jdXNPblByZXZpb3VzKClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyaXBUeXBlU2VsZWN0aW9uLnJhZGlvRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJhbnNpdFN3aXRjaC5idXR0b24pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZTtcbiAgICBpZih0aGlzLmVuYWJsZVRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmFuc2l0U3dpdGNoLmJ1dHRvbik7XG4gICAgIH1cbiAgICB9XG4gIH1cblxuICBmb2N1c0FzeW5jKHJlZkVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0FzeW5jVGltb3V0KTtcblxuICAgIHRoaXMuZm9jdXNBc3luY1RpbW91dCA9IHNldFRpbWVvdXQoKCkgPT5cbiAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQocmVmRWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoRm9jdXNOZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTp2b2lkIHtcbiAgICBpZihldmVudC5rZXkgPT0gJ1RhYicpIHtcblxuICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaEZvY3VzT25QcmV2aW91cygpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwVHlwZVNlbGVjdGlvbi5yYWRpb0VsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH0gXG4gICAgfVxuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvblRyYW5zaXRTd2l0Y2hGb2N1c09uUHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYodGhpcy5lbmFibGVQYXNzZW5nZXJzU2VsZWN0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChcbiAgICAgICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vbkRlc3RpbmF0aW9uT3Blbih0cnVlKTtcbiAgICAgICAgaWYgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKFxuICAgICAgICAgICAgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uKS5pbnB1dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGVwaWNrZXJGb2N1c09uUHJldmlvdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZU11bHRpQ2l0eSkpIHtcbiAgICAgIGlmKHRoaXMudHJpcFR5cGUgPT0gVHJpcFR5cGUudHdvV2F5T3Blbikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luLmlucHV0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24uaW5wdXQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gIH1cblxuICBvbkZvY3VzT25OZXh0Q2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmKHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlTXVsdGlDaXR5KSAmJiB0aGlzLnRyaXBUeXBlID09IFRyaXBUeXBlLnR3b1dheU9wZW4pIHsgIFxuICAgICAgaWYodGhpcy5vbkZvY3VzSW5ib3VuZElnbm9yZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QyLmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbi5pbnB1dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihldmVudC5rZXkgPT0gJ1RhYicgfHwgZXZlbnQua2V5ID09ICdFbnRlcicpIHtcbiAgICAgIGlmKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHsgIFxuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KFxuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd25cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZih0aGlzLnRyYW5zaXRTd2l0Y2gpIHsgIFxuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KFxuICAgICAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5idXR0b25cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH0gXG4gICAgXG4gIH1cblxuICBpc01vYmlsZURpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhNb2JpbGUodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIGlzVGFibGV0RGlzcGxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgb25PcmlnaW5PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gICBvbk9yaWdpbjJPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW4yT3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmIChcbiAgICAgIG9yaWdpblNuYXBzaG90ICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90ICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlLmxlbmd0aCAmJlxuICAgICAgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTWF4aW1pemUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1heGltaXplID0gdGhpcy52YWxpZGF0ZUFpcnBvcnRWYWx1ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gICBvbkRlc3RpbmF0aW9uMk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3Blbikge1xuICAgICAgdGhpcy51cGRhdGVNYXhpbWl6ZSgpO1xuICAgIH1cbiAgICB0aGlzLmRlc3RpbmF0aW9uMk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyQmFja2Ryb3BDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UuZW1pdCh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpO1xuICB9XG5cbiAgb25QYXNzZW5nZXJTZWxlY3RPcGVuKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblBhc3NlbmdlclNlbGVjdCA9ICF0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3Q7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFzc2VuZ2VyU2VsZWN0KTtcblxuICAgIGlmICh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3Q/Lm51bWJlckZpZWxkcy5maXJzdCkge1xuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0Lm51bWJlckZpZWxkcy5maXJzdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaE9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRyaXBTd2l0Y2hGb2N1c1RpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVTZWxlY3Rpb24/LnJhZGlvRWxlbWVudD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSAhdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3Q7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgb25PcmlnaW4yQ2hhbmdlKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMub3JpZ2luMkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkT3JpZ2luMkFpcnBvcnQoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCFhaXJwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbk9yaWdpbjJDaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW4yQWlycG9ydENvZGUgPT09IGFpcnBvcnQuY29kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luMkFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25EZXN0aW5hdGlvbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uQ2hhbmdlLmVtaXQoYWlycG9ydCk7XG4gIH1cblxuICBvbkRlc3RpbmF0aW9uMkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uMkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpICYmIHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRGb2N1c09uTmF0aXZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgZWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZTtcbiAgICBcbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGVcbiAgICAgICk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudHJpcFR5cGUpO1xuICAgIH1cblxuICAgIGlmKHRoaXMudHJpcFR5cGUgPT0gVHJpcFR5cGUudHdvV2F5T3Blbikge1xuICAgICAgdGhpcy5zaG93U3dpdGNoID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1N3aXRjaCA9IHRoaXMuZXhpc3RzKHRoaXMudXNlU3dpdGNoKTtcbiAgICB9XG5cbiAgfVxuXG4gIG9uVHJhbnNpdENoYW5nZShkaXJlY3RPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5O1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICApO1xuICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUoZGlyZWN0T25seSk7XG4gICAgfVxuICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gIXRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0O1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc1RyaXBTd2l0Y2hJY29uQ2xhc3MobW9kaWZpZXJzPzogYW55KTogQXJyYXk8Q2xhc3NNb2RlbD4ge1xuICAgIGNvbnN0IGljb25NZWRpdW1CYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ2ljb24tbWVkaXVtJyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgaWNvbk1lZGl1bUJhc2UuZ2V0Q2xhc3MoJycsIG1vZGlmaWVycyksXG4gICAgICB0aGlzLmdldFRyYXZlbERldGFpbHNDbGFzcygnaWNvbicpLFxuICAgIF07XG4gIH1cblxuICBnZXRUcmlwU3dpdGNoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZSA9PT0gVHJpcFR5cGUudHdvV2F5UmV0dXJuXG4gICAgICA/IHRoaXMudHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsXG4gICAgICA6IHRoaXMudHJpcFN3aXRjaE9uZVdheUxhYmVsO1xuICB9XG5cbiAgZ2V0VHJhbnNpdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0T25seSA/IHRoaXMuZGlyZWN0T25seUxhYmVsIDogdGhpcy5kaXJlY3RUcmFuc2l0TGFiZWw7XG4gIH1cblxuICBvbkFjY29yZGlvblRvZ2dsZUNoYW5nZShleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheVN1bW1hcnkgPSAhZXhwYW5kZWQ7XG4gIH1cblxuICBnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGAke3RoaXMucGFzc2VuZ2VyU2VsZWN0TGFiZWx9JHt0aGlzLmRlZmF1bHRTdW1tYXJ5U2VwYXJhdG9yfWAgK1xuICAgICAgYCR7dGhpcy5nZXRUcmlwU3dpdGNoTGFiZWwoKS50b0xvd2VyQ2FzZSgpfSR7dGhpcy5sYXN0U3VtbWFyeVNlcGFyYXRvclxuICAgICAgfSR7dGhpcy5nZXRUcmFuc2l0TGFiZWwoKS50b0xvd2VyQ2FzZSgpfWBcbiAgICApO1xuICB9XG5cbiAgc2hvdWxkTWF4aW1pemUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyh0aGlzLm1pbmltaXplKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdCAmJlxuICAgICAgdGhpcy5lbmFibGVEZXN0aW5hdGlvblNlbGVjdCAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbiAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb24gJiZcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbi5jb2RlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0ICYmXG4gICAgICAhdGhpcy5lbmFibGVEZXN0aW5hdGlvblNlbGVjdCAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbiAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0ICYmXG4gICAgICAodGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gfHwgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbilcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltaXplO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1heGltaXplKSB7XG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTmFzR3JvdXBWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb2N1c09uQWlycG9ydFNlbGVjdEJhY2t3YXJkcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5leGlzdHModGhpcy5haXJwb3J0U2VsZWN0LmNvbWJvKSkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uRGVzdGluYXRpb25PcGVuKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbi5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25PcmlnaW5PcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKFxuICAgICAgICAoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luKS5pbnB1dFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldExhdGVzdFNlYXJjaGVzKGFiYW5kb25lZEJhc2tldDogQXJyYXk8QWJhbmRvbmVkQmFza2V0SXRlbU1vZGVsPiwgYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pOiB2b2lkIHtcbiAgICBpZiAoIWFiYW5kb25lZEJhc2tldCB8fCAhYWlycG9ydHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1bmlxdWUgPSBuZXcgQXJyYXk8QWJhbmRvbmVkQmFza2V0SXRlbU1vZGVsPigpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFiYW5kb25lZEJhc2tldCkge1xuICAgICAgaWYgKCF1bmlxdWUuc29tZSgoeCkgPT4geC5kZXN0aW5hdGlvbkNvZGUgPT09IGl0ZW0uZGVzdGluYXRpb25Db2RlKSkge1xuICAgICAgICB1bmlxdWUucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5Db2RlcyA9IHVuaXF1ZS5tYXAoKHgpID0+IHgub3JpZ2luQ29kZSk7XG4gICAgY29uc3QgZGVzdGluYXRpb25Db2RlcyA9IHVuaXF1ZS5tYXAoKHgpID0+IHguZGVzdGluYXRpb25Db2RlKTtcblxuICAgIGNvbnN0IGxhdGVzdFNlYXJjaGVzT3JpZ2luID0gYWlycG9ydHMuZmlsdGVyKChhaXJwb3J0KSA9PlxuICAgICAgdW5pcXVlLnNvbWUoXG4gICAgICAgICh4KSA9PiB4Lm9yaWdpbkNvZGUudG9Mb3dlckNhc2UoKSA9PT0gYWlycG9ydC5jb2RlLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbiA9IGFpcnBvcnRzLmZpbHRlcigoYWlycG9ydCkgPT5cbiAgICAgIHVuaXF1ZS5zb21lKFxuICAgICAgICAoeCkgPT4geC5kZXN0aW5hdGlvbkNvZGUudG9Mb3dlckNhc2UoKSA9PT0gYWlycG9ydC5jb2RlLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgY29kZSA9ICdjb2RlJztcbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID0gdGhpcy5zb3J0U2VydmljZVxuICAgICAgLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc09yaWdpbiwgb3JpZ2luQ29kZXMsIGNvZGUpXG4gICAgICAuc2xpY2UoMCwgMyk7XG5cbiAgICBpZiAodGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbiAmJiB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMub3ZlcnJpZGVPcmlnaW4pKSB7XG4gICAgICB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlID0gdGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpblswXS5jb2RlO1xuICAgIH1cblxuICAgIHRoaXMubGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbiA9IHRoaXMuc29ydFNlcnZpY2VcbiAgICAgIC5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbiwgZGVzdGluYXRpb25Db2RlcywgY29kZSlcbiAgICAgIC5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLm9wZW5UcmFuc2l0VHlwZVNlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPG5hcy1hY2NvcmRpb24gKm5nSWY9XCJkZXZpY2VIZWxwZXI/LmlzTW9iaWxlKCkgJiYgZXhpc3RzKG1pbmltaXplT25Nb2JpbGUpOyBlbHNlIGZpbHRlclRlbXBsYXRlXCIgc2ltcGxlXG4gIGNvbnRhaW5lck9uVG9nZ2xlIHRyYW5zcGFyZW50IFtleHBhbmRlZF09XCJleHBhbmRlZEFjY29yZGlvbk1vYmlsZVwiIFt0aXRsZV09XCJlZGl0U2VhcmNoVGl0bGVcIlxuICAodG9nZ2xlQ2hhbmdlKT1cIm9uQWNjb3JkaW9uVG9nZ2xlQ2hhbmdlKCRldmVudClcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25hcy1hY2NvcmRpb24+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgKm5nSWY9XCJkZXZpY2VIZWxwZXI/LmlzTW9iaWxlKCkgJiYgZXhpc3RzKG1pbmltaXplT25Nb2JpbGUpICYmIGRpc3BsYXlTdW1tYXJ5XCI+e3tnZXRTdW1tYXJ5KCl9fVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyVGVtcGxhdGU+XG4gIDxkaXYgI2NvbnRhaW5lciBbbmFzQ2xhc3NdPVwiZ2V0Q29udGFpbmVyQ2xhc3MoKVwiPlxuICAgIDxkaXYgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdmaWx0ZXJzJywgW2V4aXN0cyhtaW5pbWl6ZSkgJiYgJ21pbmltaXplZCcsIGV4aXN0cyhpbmxpbmVPbkRlc2t0b3ApICYmICdpbmxpbmUnLCBleGlzdHMoZW5hYmxlTXVsdGlDaXR5KSAmJiAnbXVsdGktY2l0eScsIHRyaXBUeXBlID09IDMgJiYgJ211bHRpLWNpdHktbW9kZSddKVwiPlxuICAgICAgPGZvcm0gKm5nSWY9XCJlbmFibGVUcmlwU3dpdGNoXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdyYWRpbycpXCIgKGtleWRvd24pPVwib25UcmlwU3dpdGNoRm9jdXNOZXh0KCRldmVudClcIj5cbiAgICAgICAgPG5hcy1yYWRpbyAjcmFkaW8gW2lkXT1cInRyaXBUeXBlSW5wdXRJZCArICdfX3JvdW5kLXRyaXAnXCIgW25hbWVdPVwiJ3RyaXBUeXBlJ1wiIFt2YWx1ZV09XCIyXCIgKGNoZWNrZWRDaGFuZ2UpPVwib25UcmlwVHlwZUNoYW5nZSgyKVwiIFtjaGVja2VkXT1cInRyaXBUeXBlID09PSAyXCI+XG4gICAgICAgICAge3t0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWx9fVxuICAgICAgICA8L25hcy1yYWRpbz5cbiAgICAgICAgPG5hcy1yYWRpbyAjcmFkaW8gW2lkXT1cInRyaXBUeXBlSW5wdXRJZCArICdfX29uZS13YXknXCIgW25hbWVdPVwiJ3RyaXBUeXBlJ1wiIFt2YWx1ZV09XCIxXCIgKGNoZWNrZWRDaGFuZ2UpPVwib25UcmlwVHlwZUNoYW5nZSgxKVwiIFtjaGVja2VkXT1cInRyaXBUeXBlID09PSAxXCI+XG4gICAgICAgICAge3t0cmlwU3dpdGNoT25lV2F5TGFiZWx9fVxuICAgICAgICA8L25hcy1yYWRpbz5cbiAgICAgICAgPG5hcy1yYWRpbyAqbmdJZj1cImV4aXN0cyhlbmFibGVNdWx0aUNpdHkpXCIgI3JhZGlvIFtpZF09XCJ0cmlwVHlwZUlucHV0SWQgKyAnX19tdWx0aS1jaXR5J1wiIFtuYW1lXT1cIid0cmlwVHlwZSdcIiBbdmFsdWVdPVwiM1wiIChjaGVja2VkQ2hhbmdlKT1cIm9uVHJpcFR5cGVDaGFuZ2UoMylcIiBbY2hlY2tlZF09XCJ0cmlwVHlwZSA9PT0gM1wiPlxuICAgICAgICAgIHt7dHJpcFN3aXRjaE11bHRpQ2l0eUxhYmVsfX1cbiAgICAgICAgPC9uYXMtcmFkaW8+XG4gICAgICA8L2Zvcm0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWlycG9ydHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdCAqbmdJZj1cImFpcnBvcnRzICYmIGFpcnBvcnRSZWxhdGlvbnMgJiYgKGVuYWJsZURlc3RpbmF0aW9uU2VsZWN0KVwiICNhaXJwb3J0U2VsZWN0IGNvbWJvXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnbG93ZXItei1pbmRleCc6IG9wZW5QYXNzZW5nZXJTZWxlY3QgfHwgaW5ib3VuZE9wZW4gfHwgb3V0Ym91bmRPcGVuIH1cIiBcbiAgICAgICAgICBbb3V0Ym91bmRJZF09XCJhaXJwb3J0U2VsZWN0T3V0Ym91bmRJZFwiIFtpbmJvdW5kSWRdPVwiYWlycG9ydFNlbGVjdEluYm91bmRJZFwiIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXT1cIm5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXCIgW3VzZVN3aXRjaF09XCJzaG93U3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0QWlycG9ydFNlbGVjdENsYXNzKClcIiBbYWlycG9ydHNdPVwiYWlycG9ydHNcIiBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNdPVwiYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNcIiBbYWlycG9ydFJlbGF0aW9uc109XCJhaXJwb3J0UmVsYXRpb25zXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNPcmlnaW5dPVwibGF0ZXN0U2VhcmNoZXNPcmlnaW5cIiBbbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbl09XCJsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiIFtkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXT1cImRlc3RpbmF0aW9uQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIiBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCIgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiIFxuICAgICAgICAgIFtub0FpcnBvcnRzTGFiZWxdPVwibm9BaXJwb3J0c0xhYmVsXCIgW3BsYWNlaG9sZGVyRGVzdGluYXRpb25dPVwicGxhY2Vob2xkZXJEZXN0aW5hdGlvblwiIFtrZWVwU2VsZWN0aW9uXT1cImtlZXBTZWxlY3Rpb25cIlxuICAgICAgICAgIFtpbnZhbGlkRGVzdGluYXRpb25UZXh0XT1cImludmFsaWREZXN0aW5hdGlvblRleHRcIiAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoZGVzdGluYXRpb25DaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCIgKGZvY3VzT25OZXh0KT1cIm9uVHJpcFN3aXRjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIiAoZGVzdGluYXRpb25PcGVuQ2hhbmdlKT1cIm9uRGVzdGluYXRpb25PcGVuKCRldmVudClcIlxuICAgICAgICAgIChwb3NpdGlvbkNoYW5nZSk9XCJnZXRDbG9zZXN0QWlycG9ydHMoJGV2ZW50KVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0PlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgYWlycG9ydFJlbGF0aW9ucyAmJiAoZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpICYmIHRyaXBUeXBlID09IDNcIiAjYWlycG9ydFNlbGVjdDIgY29tYm9cbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiIFxuICAgICAgICAgIFtvdXRib3VuZElkXT1cImFpcnBvcnRTZWxlY3RPdXRib3VuZElkXCIgW2luYm91bmRJZF09XCJhaXJwb3J0U2VsZWN0SW5ib3VuZElkXCIgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCIgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5dPVwibmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luMlwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXT1cIm5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uMlwiIFt1c2VTd2l0Y2hdPVwiZmFsc2VcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRBaXJwb3J0U2VsZWN0Q2xhc3MoKVwiIFthaXJwb3J0c109XCJhaXJwb3J0c1wiIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c109XCJhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c1wiIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiIFtsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXT1cImxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb25cIlxuICAgICAgICAgIFtkaXNwbGF5TGF0ZXN0U2VhcmNoZXNdPVwiZGlzcGxheUxhdGVzdFNlYXJjaGVzXCIgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW29yaWdpbkFpcnBvcnRDb2RlXT1cIm9yaWdpbjJBaXJwb3J0Q29kZVwiIFtkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXT1cImRlc3RpbmF0aW9uMkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbYWxsQWlycG9ydHNMYWJlbF09XCJhbGxBaXJwb3J0c0xhYmVsXCIgW2xhdGVzdFNlYXJjaGVzTGFiZWxdPVwibGF0ZXN0U2VhcmNoZXNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c0xhYmVsXT1cImNsb3Nlc3RBaXJwb3J0c0xhYmVsXCIgW2Nsb3Nlc3RBaXJwb3J0c109XCJjbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtzZWxlY3RPcmlnaW5GaXJzdExhYmVsXT1cInNlbGVjdE9yaWdpbkZpcnN0TGFiZWxcIiBbbGFiZWxPcmlnaW5dPVwibGFiZWxPcmlnaW5cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlck9yaWdpbl09XCJwbGFjZWhvbGRlck9yaWdpblwiIFtsYWJlbERlc3RpbmF0aW9uXT1cImxhYmVsRGVzdGluYXRpb25cIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkxhYmVsXT1cImdlb2xvY2F0aW9uTGFiZWxcIiBbZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxdPVwiZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxcIiBcbiAgICAgICAgICBbbm9BaXJwb3J0c0xhYmVsXT1cIm5vQWlycG9ydHNMYWJlbFwiIFtwbGFjZWhvbGRlckRlc3RpbmF0aW9uXT1cInBsYWNlaG9sZGVyRGVzdGluYXRpb25cIiBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCJcbiAgICAgICAgICBbaW52YWxpZERlc3RpbmF0aW9uVGV4dF09XCJpbnZhbGlkRGVzdGluYXRpb25UZXh0XCIgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbjJBaXJwb3J0KCRldmVudClcIlxuICAgICAgICAgIChkZXN0aW5hdGlvbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uMkNoYW5nZSgkZXZlbnQpXCIgKGZvY3VzT25OZXh0KT1cIm9uRm9jdXNJbmJvdW5kRGF0ZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW4yT3BlbigkZXZlbnQpXCIgKGRlc3RpbmF0aW9uT3BlbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uMk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3Q+XG4gICAgICAgIDxuYXMtYWlycG9ydC1zZWxlY3QgKm5nSWY9XCJhaXJwb3J0cyAmJiAoIWVuYWJsZURlc3RpbmF0aW9uU2VsZWN0KVwiICNhaXJwb3J0U2VsZWN0XG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnbG93ZXItei1pbmRleCc6IG9wZW5QYXNzZW5nZXJTZWxlY3QgfHwgaW5ib3VuZE9wZW4gfHwgb3V0Ym91bmRPcGVuIH1cIlxuICAgICAgICAgIFtvdXRib3VuZElkXT1cImFpcnBvcnRTZWxlY3RPdXRib3VuZElkXCIgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCIgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5dPVwibmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXCIgW3VzZVN3aXRjaF09XCJzaG93U3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2FpcnBvcnQtb3JpZ2luLXNlbGVjdCcpXCIgW2FpcnBvcnRzXT1cImFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCIgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCIgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIiBbb3JpZ2luQWlycG9ydENvZGVdPVwib3JpZ2luQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIiBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCIgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCIgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiIChmb2N1c09uTmV4dCk9XCJvblRyaXBTd2l0Y2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChvcmlnaW5PcGVuQ2hhbmdlKT1cIm9uT3JpZ2luT3BlbigkZXZlbnQpXCIgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3Q+XG4gICAgICAgIDxuYXMtc3VnZ2VzdGlvbnMgKm5nSWY9XCIoY2xvc2VzdEFpcnBvcnRzIHx8IGxhdGVzdFNlYXJjaGVzT3JpZ2luKSAmJiBleGlzdHMoZW5hYmxlU3VnZ2VzdGlvbnMpICYmIHRyaXBUeXBlICE9PSAzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycpXCIgW3N1Z2dlc3Rpb25zXT1cImdldFN1Z2dlc3Rpb25zKClcIiBbb3JMYWJlbF09XCJvckxhYmVsXCJcbiAgICAgICAgICAoYWlycG9ydFNlbGVjdCk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiPjwvbmFzLXN1Z2dlc3Rpb25zPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkTWF4aW1pemUoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZXhpc3RzKGVuYWJsZURhdGVwaWNrZXJzKVwiIFtuYXNDbGFzc109XCJnZXREYXRlUGlja2Vyc0NsYXNzKClcIj5cbiAgICAgICAgICA8bmFzLWRhdGVwaWNrZXItY29tYm8gI2RhdGVwaWNrZXJDb21ibyBjb21wYWN0IFxuICAgICAgICAgICAgW291dGJvdW5kSWRdPVwiZGF0ZVBpY2tlck91dGJvdW5kSWRcIiBbaW5ib3VuZElkXT1cImRhdGVQaWNrZXJJbmJvdW5kSWRcIiBbaW5saW5lRmxleF09XCJpbmxpbmVGbGV4XCIgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXCJcbiAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcIiBbYXZhaWxhYmlsaXR5XT1cImF2YWlsYWJpbGl0eVwiXG4gICAgICAgICAgICBbYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cImF2YWlsYWJsZUZsaWdodHNMYWJlbFwiIFtkYXRlRGlzcGxheUZvcm1hdF09XCJkYXRlRGlzcGxheUZvcm1hdFwiXG4gICAgICAgICAgICBbZGlzYWJsZVBhc3RTZWxlY3Rpb25dPVwiZGlzYWJsZVBhc3RTZWxlY3Rpb25cIiBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIiBbaW5ib3VuZEF2YWlsYWJsZURhdGVzXT1cImluYm91bmRBdmFpbGFibGVEYXRlc1wiXG4gICAgICAgICAgICBbaW5ib3VuZExhYmVsXT1cImluYm91bmRMYWJlbFwiIFtub0F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgICAgICBbb3V0Ym91bmRBdmFpbGFibGVEYXRlc109XCJvdXRib3VuZEF2YWlsYWJsZURhdGVzXCIgW291dGJvdW5kTGFiZWxdPVwib3V0Ym91bmRMYWJlbFwiXG4gICAgICAgICAgICBbdGltZURpc3BsYXlGb3JtYXRdPVwidGltZURpc3BsYXlGb3JtYXRcIiBbdGltZXNdPVwidGltZXNcIiBbb3V0Ym91bmREaXNhYmxlZF09XCJvdXRib3VuZERpc2FibGVkXCJcbiAgICAgICAgICAgIFtpbmJvdW5kRGlzYWJsZWRdPVwiaW5ib3VuZERpc2FibGVkXCIgW291dGJvdW5kT25seV09XCJ0cmlwVHlwZSA9PT0gMVwiIFtpZ25vcmVPbkZvY3VzSW5ib3VuZERhdGVdPVwidHJpcFR5cGUgPT09IDNcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsTmV4dE1vbnRoXT1cImFyaWFMYWJlbE5leHRNb250aFwiIChmb2N1c09uTmV4dENoYW5nZSk9XCJvbkZvY3VzT25OZXh0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzT25QcmV2aW91c0NoYW5nZSk9XCJvbkRhdGVwaWNrZXJGb2N1c09uUHJldmlvdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW5ib3VuZE1vbnRoQ2hhbmdlKT1cIm9uSW5ib3VuZE1vbnRoQ2hhbmdlKCRldmVudClcIiAob3V0Ym91bmRNb250aENoYW5nZSk9XCJvbk91dGJvdW5kTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKG91dGJvdW5kT3BlbildPVwib3V0Ym91bmRPcGVuXCIgWyhpbmJvdW5kT3BlbildPVwiaW5ib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kU2VsZWN0ZWREYXRlKV09XCJpbmJvdW5kU2VsZWN0ZWREYXRlXCIgWyhvdXRib3VuZFNlbGVjdGVkRGF0ZSldPVwib3V0Ym91bmRTZWxlY3RlZERhdGVcIj5cbiAgICAgICAgICA8L25hcy1kYXRlcGlja2VyLWNvbWJvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZVBhc3NlbmdlcnNTZWxlY3QgfHwgZW5hYmxlVHJhbnNpdFN3aXRjaFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZHJvcGRvd24td3JhcHBlcicpXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZVBhc3NlbmdlcnNTZWxlY3RcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMnKVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAjcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24gKGNsaWNrKT1cIm9uUGFzc2VuZ2VyU2VsZWN0T3BlbigkZXZlbnQpXCIgW2lkXT1cInBhc3NlbmdlclNlbGVjdElkXCJcbiAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdwYXNzZW5nZXJzLWJ1dHRvbicsIG9wZW5QYXNzZW5nZXJTZWxlY3QgJiYgJ2FjdGl2ZScpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCI+XG4gICAgICAgICAgICAgICAgPHAgW25hc0NsYXNzXT1cImdldENsYXNzKCdidXR0b24tdGl0bGUnKVwiPnt7cGFzc2VuZ2Vyc1RpdGxlTGFiZWx9fTwvcD5cbiAgICAgICAgICAgICAgICA8cD57e3Bhc3NlbmdlclNlbGVjdExhYmVsfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygndHJhdmVsZXItaWNvbicpXCI+PG5hcy1pY29uIFtpY29uXT1cIidteS1wcm9maWxlLWNvbXBhY3QnXCJcbiAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidzbWFsbCdcIj48L25hcy1pY29uPjwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlblBhc3NlbmdlclNlbGVjdFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygncGFzc2VuZ2Vycy1zZWxlY3Rpb24nKVwiPlxuICAgICAgICAgICAgICA8bmFzLXBhc3Nlbmdlci1zZWxlY3QgI3Bhc3NlbmdlclNlbGVjdCBbYXJpYUxhYmVsQWRkXT1cImFyaWFMYWJlbEFkZFwiIFthcmlhTGFiZWxTdWJ0cmFjdF09XCJhcmlhTGFiZWxTdWJ0cmFjdFwiXG4gICAgICAgICAgICAgICAgW2FkdWx0c0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdEFkdWx0c0xhYmVsXCIgW3lvdXRoc0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdFlvdXRoc0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbeW91bmdBZHVsdHNMYWJlbF09XCJwYXNzZW5nZXJTZWxlY3RZb3VuZ0FkdWx0c0xhYmVsXCIgW2NoaWxkcmVuTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0Q2hpbGRyZW5MYWJlbFwiXG4gICAgICAgICAgICAgICAgW2luZmFudHNMYWJlbF09XCJwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWxcIiBbbWF4UGF4Q291bnRdPVwibWF4UGF4Q291bnRcIlxuICAgICAgICAgICAgICAgIFttaW5BZHVsdENvdW50XT1cIm1pbkFkdWx0Q291bnRcIiBbdGl0bGVdPVwicGFzc2VuZ2VyU2VsZWN0VGl0bGVcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sR3JvdXBCb29raW5nXT1cIm5hc0Zvcm1Db250cm9sR3JvdXBCb29raW5nXCIgW2dyb3VwQm9va2luZ0xhYmVsXT1cImdyb3VwQm9va2luZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBCb29raW5nTGltaXRdPVwiZ3JvdXBCb29raW5nTGltaXRcIiAoZm9jdXNPbk5leHQpPVwib25QYXNzZW5nZXJzU2VsZWN0Rm9jdXNPbk5leHQoKVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzT25QcmV2aW91cyk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uUHJldmlvdXMoKVwiXG4gICAgICAgICAgICAgICAgWyhwYXNzZW5nZXJzKV09XCJwYXNzZW5nZXJzXCI+PC9uYXMtcGFzc2VuZ2VyLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxuYXMtYmFja2Ryb3AgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICBbc2hvd0JhY2tkcm9wXT1cIm9wZW5QYXNzZW5nZXJTZWxlY3RcIiAoc2hvd0JhY2tkcm9wQ2hhbmdlKT1cIm9uUGFzc2VuZ2VyQmFja2Ryb3BDaGFuZ2UoJGV2ZW50KVwiPjwvbmFzLWJhY2tkcm9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZVRyYW5zaXRTd2l0Y2hcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYW5zaXQtdHlwZScpXCI+XG4gICAgICAgICAgICA8bmFzLWJ1dHRvbiAqbmdJZj1cImRpcmVjdE9ubHlMYWJlbCAmJiBkaXJlY3RUcmFuc2l0TGFiZWxcIiAjdHJhbnNpdFN3aXRjaCBibG9jayBsaWdodFxuICAgICAgICAgICAgICBbaWRdPVwidHJhbnNpdFR5cGVJbnB1dElkXCIgW2ljb25UeXBlXT1cIidjaGV2cm9uLWRvd24nXCIgW2xhYmVsXT1cImdldFRyYW5zaXRMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCd0cmFuc2l0Jywgb3BlblRyYW5zaXRUeXBlU2VsZWN0ICYmICdhY3RpdmUnKVwiXG4gICAgICAgICAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiIChjbGljayk9XCJvblRyYW5zaXRTd2l0Y2hPcGVuKCRldmVudClcIiAoZm9jdXNPbk5leHQpPVwib25UcmFuc2l0U3dpdGNoRm9jdXNOZXh0KCRldmVudClcIj57eyBnZXRUcmFuc2l0TGFiZWwoKSB9fVxuICAgICAgICAgICAgPC9uYXMtYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wZW5UcmFuc2l0VHlwZVNlbGVjdFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygndHJhbnNpdC10eXBlLXNlbGVjdGlvbicpXCIgKGtleWRvd24pPVwidHJhbnNpdEtleURvd24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJ0cmFuc2l0VHlwZUlucHV0SWQgKyAnX19kaXJlY3QnXCIgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgZGlyZWN0T25seSAmJiAnYWN0aXZlJylcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVEaXJlY3RPbmx5IChjbGljayk9XCJvblRyYW5zaXRDaGFuZ2UodHJ1ZSlcIj57eyBkaXJlY3RPbmx5TGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cInRyYW5zaXRUeXBlSW5wdXRJZCArICdfX3RyYW5zaXQnXCIgdHlwZT1cImJ1dHRvblwiICN0cmFuc2l0VHlwZVRyYW5zaXRcbiAgICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdhY3Rpb24nLCAhZGlyZWN0T25seSAmJiAnYWN0aXZlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyYW5zaXRDaGFuZ2UoZmFsc2UpXCI+e3sgZGlyZWN0VHJhbnNpdExhYmVsIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bmFzLWJhY2tkcm9wIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICAgICAgICAgICAgWyhzaG93QmFja2Ryb3ApXT1cIm9wZW5UcmFuc2l0VHlwZVNlbGVjdFwiPjwvbmFzLWJhY2tkcm9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|