@sabstravtech/obtservices 0.0.22051001 → 0.0.26051001
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/angular/components/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +3 -0
- package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +2 -1
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +7 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -85
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +3 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +5 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +6 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -1
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +9 -7
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -5
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +1 -0
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +1 -1
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +18 -7
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/search.service.d.ts +25 -22
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +21 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +4 -0
- package/base/lib/vendor/types/graphql.types.d.ts +245 -84
- package/base/lib/vendor/types/types.d.ts +16 -2
- package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +1 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +366 -176
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +2019 -956
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/components/basket-panel.js +16 -7
- package/esm2015/angular/fetchers.js +4 -1
- package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +296 -70
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +4 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +66 -11
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +108 -61
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +115 -33
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +31 -10
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +196 -57
- package/esm2015/base/lib/vendor/classes/helpers.js +19 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +145 -36
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +100 -30
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +40 -8
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +39 -7
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +131 -20
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
- package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +93 -30
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +77 -102
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +45 -11
- package/esm2015/base/lib/vendor/services/webtoken.service.js +8 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +7 -2
- package/esm2015/base/lib/vendor/types/types.js +31 -14
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +449 -141
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1383 -410
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import moment from 'moment';
|
|
|
4
4
|
import Countries from '../data/countries.json';
|
|
5
5
|
import { BehaviorSubject, forkJoin, of, Subscription } from 'rxjs';
|
|
6
6
|
import { ParkingEnterpriseSearch } from '../classes/parking-enterprise-search';
|
|
7
|
-
import
|
|
7
|
+
import * as graphqlTypes from '../types/graphql.types';
|
|
8
8
|
import { LoungesEnterpriseSearch } from '../classes/lounges-enterprise-search';
|
|
9
9
|
import { HotelEnterpriseSearch } from '../classes/hotel-enterprise-search';
|
|
10
10
|
import { CarhireEnterpriseSearch } from '../classes/carhire-enterprise-search';
|
|
@@ -22,6 +22,7 @@ import _ from 'lodash';
|
|
|
22
22
|
import { EurostarSearchType } from '../classes/eurostar-search-type.enum';
|
|
23
23
|
import { FastTrackEnterpriseSearch } from '../classes/fast-track-enterprise-search';
|
|
24
24
|
import { ModalTypes } from '../classes/modal-types.enum';
|
|
25
|
+
import { ServiceType } from '../types/graphql.types';
|
|
25
26
|
export const MAX_TRAVELLERS = 8;
|
|
26
27
|
export var TravellerSearchTypes;
|
|
27
28
|
(function (TravellerSearchTypes) {
|
|
@@ -60,6 +61,7 @@ export class BaseEnterpriseSearchService {
|
|
|
60
61
|
this.baseSaveFavouriteSearchUpdater = baseSaveFavouriteSearchUpdater;
|
|
61
62
|
this.getRailStationFetcher = getRailStationFetcher;
|
|
62
63
|
this.getIrlSupplierStationFetcher = getIrlSupplierStationFetcher;
|
|
64
|
+
this.baseWebTokenService = baseWebTokenService;
|
|
63
65
|
this.riskAlertsFetcher = riskAlertsFetcher;
|
|
64
66
|
this.getUserRecentSearchesFetcher = getUserRecentSearchesFetcher;
|
|
65
67
|
this.getRailCardsFetcher = getRailCardsFetcher;
|
|
@@ -98,17 +100,17 @@ export class BaseEnterpriseSearchService {
|
|
|
98
100
|
this.eurostations = _.toArray(EuroStations);
|
|
99
101
|
console.log('Enterpise search service being inited');
|
|
100
102
|
this.searches = {
|
|
101
|
-
[ServiceType.Lounge]: new LoungesEnterpriseSearch(loungeFetcher, helpers, basketService, storageService, this),
|
|
102
|
-
[ServiceType.Parking]: new ParkingEnterpriseSearch(parkingFetcher, helpers, basketService, storageService, this),
|
|
103
|
-
[ServiceType.Flight]: new FlightEnterpriseSearch(flightFetcher, helpers, userService, basketService, storageService, this, applyFlightRules, modalService),
|
|
104
|
-
[ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher, applyHotelRulesFetcher),
|
|
105
|
-
[ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
|
|
106
|
-
[ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
|
|
107
|
-
[ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this, getIrlSupplierStationFetcher),
|
|
108
|
-
[ServiceType.FastTrack]: new FastTrackEnterpriseSearch(fasttrackFetcher, helpers, basketService, storageService, this),
|
|
109
|
-
[ServiceType.Coach]: null,
|
|
110
|
-
[ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this, userService, modalService),
|
|
111
|
-
[ServiceType.Eurostar]: new EurostarEnterpriseSearch(eurostarFetcher, helpers, userService, basketService, storageService, this, modalService)
|
|
103
|
+
[graphqlTypes.ServiceType.Lounge]: new LoungesEnterpriseSearch(loungeFetcher, helpers, basketService, storageService, this),
|
|
104
|
+
[graphqlTypes.ServiceType.Parking]: new ParkingEnterpriseSearch(parkingFetcher, helpers, basketService, storageService, this),
|
|
105
|
+
[graphqlTypes.ServiceType.Flight]: new FlightEnterpriseSearch(flightFetcher, helpers, userService, basketService, storageService, this, applyFlightRules, modalService),
|
|
106
|
+
[graphqlTypes.ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher, applyHotelRulesFetcher),
|
|
107
|
+
[graphqlTypes.ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
|
|
108
|
+
[graphqlTypes.ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
|
|
109
|
+
[graphqlTypes.ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this, getIrlSupplierStationFetcher),
|
|
110
|
+
[graphqlTypes.ServiceType.FastTrack]: new FastTrackEnterpriseSearch(fasttrackFetcher, helpers, basketService, storageService, this),
|
|
111
|
+
[graphqlTypes.ServiceType.Coach]: null,
|
|
112
|
+
[graphqlTypes.ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this, userService, modalService),
|
|
113
|
+
[graphqlTypes.ServiceType.Eurostar]: new EurostarEnterpriseSearch(eurostarFetcher, helpers, userService, basketService, storageService, this, modalService)
|
|
112
114
|
};
|
|
113
115
|
console.log('Newly created search objects: ', this.searches);
|
|
114
116
|
this.search_objects = this.helpers.clone(this.init_search_objects());
|
|
@@ -438,6 +440,14 @@ export class BaseEnterpriseSearchService {
|
|
|
438
440
|
return of([]);
|
|
439
441
|
}
|
|
440
442
|
}
|
|
443
|
+
getRailStationById(id) {
|
|
444
|
+
if (id) {
|
|
445
|
+
return this.getRailStationFetcher.fetchList({ id }).pipe(take(1));
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
return of();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
441
451
|
/**
|
|
442
452
|
* @description - get irl station locations
|
|
443
453
|
* @param term - the term to search
|
|
@@ -483,7 +493,7 @@ export class BaseEnterpriseSearchService {
|
|
|
483
493
|
}
|
|
484
494
|
const subs = forkJoin([
|
|
485
495
|
this.getAirportLocations(term, countryCode, isLoading),
|
|
486
|
-
this.getCityLocations(term, countryCode, isLoading, this.userService.userHasServiceProvider(ServiceType.Hotel, ServiceProvider.Confirma)),
|
|
496
|
+
this.getCityLocations(term, countryCode, isLoading, this.userService.userHasServiceProvider(graphqlTypes.ServiceType.Hotel, ServiceProvider.Confirma)),
|
|
487
497
|
this.getStationLocations(term, isLoading),
|
|
488
498
|
this.getConfirmaOffices(term)
|
|
489
499
|
]).pipe(map((results) => {
|
|
@@ -595,6 +605,9 @@ export class BaseEnterpriseSearchService {
|
|
|
595
605
|
updateTravellerInformation() {
|
|
596
606
|
this.storageService.setSessionItem(BaseEnterpriseSearchService.SESSION_TRAVELLER, this.selectedTravellers);
|
|
597
607
|
this.travellerInformation.next([...this.selectedTravellers]);
|
|
608
|
+
if (this.searches[ServiceType.Rail]) {
|
|
609
|
+
this.searches[ServiceType.Rail].railCards = new Array(this.selectedTravellers.length).fill({ name: '', code: '' }, 0, this.selectedTravellers.length);
|
|
610
|
+
}
|
|
598
611
|
}
|
|
599
612
|
/*
|
|
600
613
|
* @desc - determine and return the highest priority value,
|
|
@@ -623,7 +636,8 @@ export class BaseEnterpriseSearchService {
|
|
|
623
636
|
}
|
|
624
637
|
getSelectedOptions() {
|
|
625
638
|
return Object.keys(this.search_objects).reduce((cv, itemIndex) => {
|
|
626
|
-
|
|
639
|
+
var _a;
|
|
640
|
+
if ((_a = this.search_objects[itemIndex]) === null || _a === void 0 ? void 0 : _a.chosen) {
|
|
627
641
|
cv.push(itemIndex);
|
|
628
642
|
}
|
|
629
643
|
return cv;
|
|
@@ -655,13 +669,14 @@ export class BaseEnterpriseSearchService {
|
|
|
655
669
|
}
|
|
656
670
|
canSearch(type) {
|
|
657
671
|
// check that the selected type is chosen, has highest priority and has not already had a booking chosen
|
|
672
|
+
var _a, _b;
|
|
658
673
|
this.determineHighestSearchPriority();
|
|
659
674
|
// firstly check that the type of search exists
|
|
660
675
|
if (this.search_objects[type]) {
|
|
661
676
|
console.log('can search here');
|
|
662
677
|
// now check that the type is chosen has highest priority
|
|
663
|
-
if (this.search_objects[type].chosen &&
|
|
664
|
-
this.hasHighestSearchPriority(this.search_objects[type].priority)) {
|
|
678
|
+
if (((_a = this.search_objects[type]) === null || _a === void 0 ? void 0 : _a.chosen) &&
|
|
679
|
+
this.hasHighestSearchPriority((_b = this.search_objects[type]) === null || _b === void 0 ? void 0 : _b.priority)) {
|
|
665
680
|
console.log(type + ' can be searched');
|
|
666
681
|
return true;
|
|
667
682
|
}
|
|
@@ -677,61 +692,13 @@ export class BaseEnterpriseSearchService {
|
|
|
677
692
|
* travellers (or will do when it's complete) TODO - add Flight, Rail Car
|
|
678
693
|
**/
|
|
679
694
|
getAllErrorMessages() {
|
|
680
|
-
const concattedErrors = this.
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
concattedErrors.push(...this.searches[ServiceType.Car].validationMessages);
|
|
688
|
-
}
|
|
689
|
-
if (this.search_objects[ServiceType.Rail].chosen &&
|
|
690
|
-
this.canSearch(ServiceType.Rail)) {
|
|
691
|
-
concattedErrors.push(...this.searches[ServiceType.Rail].validationMessages);
|
|
692
|
-
}
|
|
693
|
-
if (this.search_objects[ServiceType.Parking].chosen &&
|
|
694
|
-
this.canSearch(ServiceType.Parking)) {
|
|
695
|
-
concattedErrors.push(...this.searches[ServiceType.Parking].validationMessages);
|
|
696
|
-
}
|
|
697
|
-
if (this.search_objects[ServiceType.Cab].chosen &&
|
|
698
|
-
this.canSearch(ServiceType.Cab)) {
|
|
699
|
-
concattedErrors.push(...this.searches[ServiceType.Cab].validationMessages);
|
|
700
|
-
}
|
|
701
|
-
if (this.search_objects[ServiceType.Hotel].chosen &&
|
|
702
|
-
this.canSearch(ServiceType.Hotel)) {
|
|
703
|
-
concattedErrors.push(...this.searches[ServiceType.Hotel].validationMessages);
|
|
704
|
-
}
|
|
705
|
-
if (this.search_objects[ServiceType.FastTrack].chosen &&
|
|
706
|
-
this.canSearch(ServiceType.FastTrack)) {
|
|
707
|
-
concattedErrors.push(...this.searches[ServiceType.FastTrack].validationMessages);
|
|
708
|
-
}
|
|
709
|
-
/*
|
|
710
|
-
if (this.search_objects.hotel.chosen && this.canSearch(TravelTypeEnum.HOTEL)) {
|
|
711
|
-
concattedErrors = concattedErrors.concat(this.hotel.validationMessages);
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
if (this.search_objects.flight.chosen && this.canSearch(TravelTypeEnum.FLIGHT)) {
|
|
717
|
-
concattedErrors = concattedErrors.concat(this.flight.validationMessages);
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
if (this.search_objects.parking.chosen && this.canSearch(TravelTypeEnum.AIR_PARKING)) {
|
|
721
|
-
concattedErrors.push(...this.parking.validationMessages);
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
if (this.search_objects.taxi.chosen && this.canSearch(TravelTypeEnum.TAXI)) {
|
|
725
|
-
concattedErrors.push(...this.taxi.validationMessages);
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
if (this.search_objects.eurostar.chosen && this.canSearch(TravelTypeEnum.EUROSTAR)) {
|
|
729
|
-
concattedErrors.push(...this.eurostar.validationMessages);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
if (this.search_objects.coach.chosen && this.canSearch(TravelTypeEnum.COACH)) {
|
|
733
|
-
concattedErrors.push(...this.coach.validationMessages);
|
|
734
|
-
}*/
|
|
695
|
+
const concattedErrors = Object.entries(this.search_objects).reduce((accum, [type, searchObject]) => {
|
|
696
|
+
if ((searchObject === null || searchObject === void 0 ? void 0 : searchObject.chosen) && this.canSearch(type)) {
|
|
697
|
+
accum.push(...this.searches[type]
|
|
698
|
+
.validationMessages);
|
|
699
|
+
}
|
|
700
|
+
return accum;
|
|
701
|
+
}, this.travellerValidationMessages);
|
|
735
702
|
this.errors.next(concattedErrors);
|
|
736
703
|
return concattedErrors;
|
|
737
704
|
}
|
|
@@ -743,25 +710,25 @@ export class BaseEnterpriseSearchService {
|
|
|
743
710
|
validateTravellers() {
|
|
744
711
|
this.travellerValidationMessages = [];
|
|
745
712
|
switch (this.userService.fullUserDetails.userData.value.booker_type) {
|
|
746
|
-
case BookerType.SelfBook:
|
|
713
|
+
case graphqlTypes.BookerType.SelfBook:
|
|
747
714
|
if (!(this.selectedTravellers.length === 1 && this.travellersContainUser())) {
|
|
748
715
|
// this should never trigger under normal conditions as the user should be loaded in as a traveller on login
|
|
749
716
|
this.travellerValidationMessages.push('Current user must be a traveller');
|
|
750
717
|
}
|
|
751
718
|
break;
|
|
752
|
-
case BookerType.BookerWithSelf:
|
|
719
|
+
case graphqlTypes.BookerType.BookerWithSelf:
|
|
753
720
|
if (!(this.selectedTravellers.length < 1) ||
|
|
754
721
|
!this.travellersContainUser()) {
|
|
755
722
|
this.travellerValidationMessages.push('Please add your self.');
|
|
756
723
|
this.traveller_error = true;
|
|
757
724
|
}
|
|
758
725
|
break;
|
|
759
|
-
case BookerType.Booker:
|
|
760
|
-
case BookerType.Company:
|
|
761
|
-
case BookerType.CompanyGroup:
|
|
762
|
-
case BookerType.Office:
|
|
763
|
-
case BookerType.Tmc:
|
|
764
|
-
case BookerType.Root:
|
|
726
|
+
case graphqlTypes.BookerType.Booker:
|
|
727
|
+
case graphqlTypes.BookerType.Company:
|
|
728
|
+
case graphqlTypes.BookerType.CompanyGroup:
|
|
729
|
+
case graphqlTypes.BookerType.Office:
|
|
730
|
+
case graphqlTypes.BookerType.Tmc:
|
|
731
|
+
case graphqlTypes.BookerType.Root:
|
|
765
732
|
if (!(this.selectedTravellers.length >= 1)) {
|
|
766
733
|
this.travellerValidationMessages.push('Please select at least one traveller');
|
|
767
734
|
this.traveller_error = true;
|
|
@@ -825,9 +792,9 @@ export class BaseEnterpriseSearchService {
|
|
|
825
792
|
// }, this.environment.searchTimeout);
|
|
826
793
|
try {
|
|
827
794
|
Promise.all(Object.values(this.searches).map((search) => {
|
|
795
|
+
var _a;
|
|
828
796
|
return !!search &&
|
|
829
|
-
this.search_objects[search.type] &&
|
|
830
|
-
this.search_objects[search.type].chosen
|
|
797
|
+
this.search_objects[search.type] && ((_a = this.search_objects[search.type]) === null || _a === void 0 ? void 0 : _a.chosen)
|
|
831
798
|
? search.startSearch()
|
|
832
799
|
: Promise.resolve(false);
|
|
833
800
|
})).finally(() => {
|
|
@@ -1103,7 +1070,7 @@ export class BaseEnterpriseSearchService {
|
|
|
1103
1070
|
toAddress: null,
|
|
1104
1071
|
toStation: null,
|
|
1105
1072
|
toLocationType: TaxiFormMode.ADDRESS,
|
|
1106
|
-
vehicleType: CabHireVehicleType.Any,
|
|
1073
|
+
vehicleType: graphqlTypes.CabHireVehicleType.Any,
|
|
1107
1074
|
viasFrom: null,
|
|
1108
1075
|
viasTo: null
|
|
1109
1076
|
};
|
|
@@ -1157,11 +1124,11 @@ export class BaseEnterpriseSearchService {
|
|
|
1157
1124
|
const defaultVal = {
|
|
1158
1125
|
adults: 0,
|
|
1159
1126
|
arriveLocation: null,
|
|
1160
|
-
cabinClass: FlightCabinClass.Any,
|
|
1127
|
+
cabinClass: graphqlTypes.FlightCabinClass.Any,
|
|
1161
1128
|
children: 0,
|
|
1162
1129
|
chosenSearchType: null,
|
|
1163
1130
|
departLocation: null,
|
|
1164
|
-
fareType: FareType.Flexible,
|
|
1131
|
+
fareType: graphqlTypes.FareType.Flexible,
|
|
1165
1132
|
inboundDate: momentOutDateTime,
|
|
1166
1133
|
inTimeCriteria: TimeWindow.Depart,
|
|
1167
1134
|
maxConnections: null,
|
|
@@ -1170,7 +1137,7 @@ export class BaseEnterpriseSearchService {
|
|
|
1170
1137
|
outBoundDate: momentInDateTime,
|
|
1171
1138
|
outTimeCriteria: TimeWindow.Depart,
|
|
1172
1139
|
preferredCarriers: [null, null, null, null],
|
|
1173
|
-
returnCabinClass: FlightCabinClass.Any
|
|
1140
|
+
returnCabinClass: graphqlTypes.FlightCabinClass.Any
|
|
1174
1141
|
};
|
|
1175
1142
|
return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['outBoundDate', 'inboundDate']);
|
|
1176
1143
|
}
|
|
@@ -1252,8 +1219,8 @@ export class BaseEnterpriseSearchService {
|
|
|
1252
1219
|
airportExpressStation: null,
|
|
1253
1220
|
applyRailcards: false,
|
|
1254
1221
|
carnetTicket: false,
|
|
1255
|
-
chosenSearchClass: RailClass.All,
|
|
1256
|
-
chosenSearchType: RailSearchJourneyType.ReturnJourney,
|
|
1222
|
+
chosenSearchClass: graphqlTypes.RailClass.All,
|
|
1223
|
+
chosenSearchType: graphqlTypes.RailSearchJourneyType.ReturnJourney,
|
|
1257
1224
|
disableAutoDiscounts: false,
|
|
1258
1225
|
extraTime: false,
|
|
1259
1226
|
inBoundDateTime: time,
|
|
@@ -1268,7 +1235,8 @@ export class BaseEnterpriseSearchService {
|
|
|
1268
1235
|
travellingTo: null,
|
|
1269
1236
|
via: false,
|
|
1270
1237
|
viaLocation: null,
|
|
1271
|
-
railCards:
|
|
1238
|
+
railCards: [],
|
|
1239
|
+
transactionIdentifier: null
|
|
1272
1240
|
};
|
|
1273
1241
|
return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['inBoundDateTime', 'outBoundDateTime']);
|
|
1274
1242
|
}
|
|
@@ -1282,7 +1250,7 @@ export class BaseEnterpriseSearchService {
|
|
|
1282
1250
|
const defaultVal = {
|
|
1283
1251
|
supplier: null,
|
|
1284
1252
|
countryCode: '',
|
|
1285
|
-
journeyType: IrlJourneyType.ReturnJourney,
|
|
1253
|
+
journeyType: graphqlTypes.IrlJourneyType.ReturnJourney,
|
|
1286
1254
|
class: null,
|
|
1287
1255
|
outboundDepartureDateTime: time,
|
|
1288
1256
|
departureLocationId: null,
|
|
@@ -1307,11 +1275,11 @@ export class BaseEnterpriseSearchService {
|
|
|
1307
1275
|
const defaultVal = {
|
|
1308
1276
|
adults: 0,
|
|
1309
1277
|
arriveLocation: null,
|
|
1310
|
-
cabinClass: FlightCabinClass.Any,
|
|
1278
|
+
cabinClass: graphqlTypes.FlightCabinClass.Any,
|
|
1311
1279
|
children: 0,
|
|
1312
1280
|
chosenSearchType: EurostarSearchType.return,
|
|
1313
1281
|
departLocation: null,
|
|
1314
|
-
fareType: FareType.Flexible,
|
|
1282
|
+
fareType: graphqlTypes.FareType.Flexible,
|
|
1315
1283
|
inboundDate: momentOutDateTime,
|
|
1316
1284
|
inTimeCriteria: TimeWindow.Depart,
|
|
1317
1285
|
maxConnections: null,
|
|
@@ -1320,7 +1288,7 @@ export class BaseEnterpriseSearchService {
|
|
|
1320
1288
|
outBoundDate: momentInDateTime,
|
|
1321
1289
|
outTimeCriteria: TimeWindow.Depart,
|
|
1322
1290
|
preferredCarriers: [null, null, null, null],
|
|
1323
|
-
returnCabinClass: FlightCabinClass.Any
|
|
1291
|
+
returnCabinClass: graphqlTypes.FlightCabinClass.Any
|
|
1324
1292
|
};
|
|
1325
1293
|
return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['outBoundDate', 'inboundDate']);
|
|
1326
1294
|
}
|
|
@@ -1402,7 +1370,9 @@ export class BaseEnterpriseSearchService {
|
|
|
1402
1370
|
return this.deleteFavouriteSearchUpdater.updateOne({ id: id });
|
|
1403
1371
|
}
|
|
1404
1372
|
saveRecentSearch(query) {
|
|
1405
|
-
if (query
|
|
1373
|
+
if (query &&
|
|
1374
|
+
!this.selectedTravellers.find((traveller) => traveller.guest)) {
|
|
1375
|
+
// prevent it saving recent searches with guests - atm it's erroring
|
|
1406
1376
|
this.baseSaveRecentSearchUpdater
|
|
1407
1377
|
.updateOne(query)
|
|
1408
1378
|
.pipe(take(1))
|
|
@@ -1435,8 +1405,8 @@ export class BaseEnterpriseSearchService {
|
|
|
1435
1405
|
type = this.userService.getUserFavoriteValue('AgentCanBookFor');
|
|
1436
1406
|
}*/
|
|
1437
1407
|
if (type &&
|
|
1438
|
-
type !== BookerType.SelfBook &&
|
|
1439
|
-
type !== BookerType.Traveller &&
|
|
1408
|
+
type !== graphqlTypes.BookerType.SelfBook &&
|
|
1409
|
+
type !== graphqlTypes.BookerType.Traveller &&
|
|
1440
1410
|
input.length >= 1) {
|
|
1441
1411
|
const inputWords = input.toLowerCase().match(/([\w])+/g);
|
|
1442
1412
|
const args = {};
|
|
@@ -1491,7 +1461,7 @@ export class BaseEnterpriseSearchService {
|
|
|
1491
1461
|
}
|
|
1492
1462
|
submitIrlForm() {
|
|
1493
1463
|
const currentUserEmail = this.userService.getUserEmail();
|
|
1494
|
-
|
|
1464
|
+
const searchParams = this.searches[graphqlTypes.ServiceType.InternationalRail];
|
|
1495
1465
|
let onBehalfOf;
|
|
1496
1466
|
let passengers;
|
|
1497
1467
|
// get passengers
|
|
@@ -1499,8 +1469,8 @@ export class BaseEnterpriseSearchService {
|
|
|
1499
1469
|
passengers = travellers.map((traveller, index) => {
|
|
1500
1470
|
let age;
|
|
1501
1471
|
if (traveller.dob) {
|
|
1502
|
-
|
|
1503
|
-
age = Math.floor(
|
|
1472
|
+
const timeDiff = Math.abs(new Date().getTime() - new Date(traveller.dob).getTime());
|
|
1473
|
+
age = Math.floor(timeDiff / (1000 * 3600 * 24) / 365);
|
|
1504
1474
|
}
|
|
1505
1475
|
return {
|
|
1506
1476
|
name: traveller.name,
|
|
@@ -1509,7 +1479,9 @@ export class BaseEnterpriseSearchService {
|
|
|
1509
1479
|
loyaltyCard: `Loyalty Card ${index + 1}`
|
|
1510
1480
|
};
|
|
1511
1481
|
});
|
|
1512
|
-
onBehalfOf = travellers[0].email
|
|
1482
|
+
onBehalfOf = travellers[0].email
|
|
1483
|
+
? travellers[0].email
|
|
1484
|
+
: currentUserEmail;
|
|
1513
1485
|
}));
|
|
1514
1486
|
// get jrfreference
|
|
1515
1487
|
this.allSubscription.add(searchParams.results.subscribe((irlJourney) => {
|
|
@@ -1529,8 +1501,8 @@ export class BaseEnterpriseSearchService {
|
|
|
1529
1501
|
serviceClass: searchParams.irlClass || 'Any',
|
|
1530
1502
|
offlineReference: this.jrfReference,
|
|
1531
1503
|
notifyEmail: currentUserEmail,
|
|
1532
|
-
onBehalfOf
|
|
1533
|
-
passengers
|
|
1504
|
+
onBehalfOf,
|
|
1505
|
+
passengers
|
|
1534
1506
|
};
|
|
1535
1507
|
console.log(payload);
|
|
1536
1508
|
this.sendOfflineNotification(payload).subscribe((result) => {
|
|
@@ -1546,6 +1518,9 @@ export class BaseEnterpriseSearchService {
|
|
|
1546
1518
|
sendOfflineNotification(jrfReference) {
|
|
1547
1519
|
return this.sendOfflineNotificationFetcher.fetchOne(jrfReference);
|
|
1548
1520
|
}
|
|
1521
|
+
getCountries() {
|
|
1522
|
+
return this.countries;
|
|
1523
|
+
}
|
|
1549
1524
|
}
|
|
1550
1525
|
BaseEnterpriseSearchService.SESSION_TRAVELLER = 'search_travellers';
|
|
1551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEVBSUwsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QscUJBQXFCLEVBRXJCLFdBQVcsRUFFWCxrQkFBa0IsRUFVbEIsZ0JBQWdCLEVBS2hCLGNBQWMsRUFVZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1M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USxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O0FBcmpFTSw2Q0FBaUIsR0FBVyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBDb3VudHJpZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMuanNvbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFya2luZ0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL3BhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaE9iamVjdCxcclxuICBTZWFyY2hPYmplY3RzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQWlycG9ydCxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJvb2tlclR5cGUsXHJcbiAgRmFyZVR5cGUsXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBTZWFyY2hBaXJwb3J0cyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlcyxcclxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lcyxcclxuICBDb25mZXJtYU9mZmljZUluZm8sXHJcbiAgQ29uZmVybWFPZmZpY2VSZXN1bHQsXHJcbiAgQ2FyYm9uQWxsb3dhbmNlLFxyXG4gIFJpc2tBbGVydCxcclxuICBSaXNrTGV2ZWwsXHJcbiAgR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEFpcmxpbmVzLFxyXG4gIEFpcmxpbmVSZXN1bHQsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxTdXBwbGllclN0YXRpb24sXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUXVlcnlWYXJpYWJsZXMsXHJcbiAgR2V0RmxpZ2h0U2VhdE1hcFF1ZXJ5VmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcclxuICBGbGlnaHRTZWF0TWFwUmVzdWx0LFxyXG4gIEZsaWdodFNlYXRNYXBSZXNwb25zZSxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFza2V0LFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIElybE9mZmxpbmVOb3RpZnlSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgQWlybGluZXNTZWFyY2hSZXN1bHQsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lUmVzdWx0LFxyXG4gIEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXksXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHRBcnJheSxcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBTZXJ2aWNlUHJvdmlkZXJcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcixcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY29tcGFueS1vZmZpY2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcixcclxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvbmZlcm1hLXJvb20taW1hZ2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcclxuICBWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFR5cGVcclxufSBmcm9tICcuLi90ZXN0ZXJzL3Bvc3Rjb2RlLXZhbGlkYXRlLnRlc3Rlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hEZXBvdEZldGNoZXIsXHJcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWRlcG90cy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWlybC1zdGF0aW9ucy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcixcclxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIERlbGV0ZVVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtdXNlci1hZGRyZXNzLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcixcclxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWxpdmUtZGVwYXJ0dXJlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7IEhvdGVsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWhvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUmFpbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IExvdW5nZXNUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFBhcmtpbmdUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXHJcbiAgVGF4aUZvcm1Nb2RlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcixcclxuICBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jdXJyZW50LWNhcmJvbi1hbGxvd2FuY2UuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcixcclxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmlzay1hbGVydHMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IElybFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lpcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXJlY2VudC1zZWFyY2hlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXHJcbiAgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1jYXJkcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLFxyXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb3ZpZC1taWNyb3NpdGUtdG9rZW4uZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEV1cm9zdGFyVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXHJcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC11c2Vycy1jYW4tYm9vay1mb3ItZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcixcclxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhdC1tYXAtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQmFzZUhvdGVsUnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktSklULWhvdGVsLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxyXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1mYXZvdXJpdGUtc2VhcmNoZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZURlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRW1haWxCYXNrZXRGZXRjaGVyLFxyXG4gIEVtYWlsQmFza2V0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEZhc3RUcmFja1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcixcclxuICBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcclxuICBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VuZC1vZmZsaW5lLW5vdGlmaWNhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SG90ZWxDaGFpbnNGZXRjaGVyLFxyXG4gIEdldEhvdGVsQ2hhaW5zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1wcm92aWRlcnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcclxuICBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWFsbC1haXJsaW5lcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcclxuaW1wb3J0IHsgQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIsIEdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWlybC1zdXBwbGllci1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9UUkFWRUxMRVJTID0gODtcclxuXHJcbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgbmFtZSA9ICduYW1lJyxcclxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XHJcbiAgaGlnaGVzdDogbnVtYmVyO1xyXG4gIGN1cnJlbnRJdGVtOiBTZWFyY2hPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XHJcbiAgU1BfUSBleHRlbmRzIFNlYXJjaFBvc3Rjb2Rlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JfUSBleHRlbmRzIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlLFxyXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNQQV9RIGV4dGVuZHMgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0ZMX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZSxcclxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBX1EgZXh0ZW5kcyBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FMX1EgZXh0ZW5kcyBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcclxuICBTQ19RIGV4dGVuZHMgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0NfUSBleHRlbmRzIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUkFfUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQV9RIGV4dGVuZHMgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGUsXHJcbiAgU1VfUSBleHRlbmRzIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGUsXHJcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSENfUSBleHRlbmRzIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZSxcclxuICBHQ1JJX1EgZXh0ZW5kcyBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxyXG4gIFNEX1EgZXh0ZW5kcyBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxyXG4gICAgcHJpdmF0ZSBjaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ2l0eUZldGNoZXI8U0NfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hQ2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXI8U0NDX1E+LFxyXG4gICAgcHJpdmF0ZSBwb3N0Y29kZUZldGNoZXI6IEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXI8U1BfUT4sXHJcbiAgICBwcml2YXRlIHJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXI8U1JfUT4sXHJcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcclxuICAgIHByaXZhdGUgdXNlckFkZHJlc3Nlc0ZldGNoZXI6IEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcjxTVV9RPixcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXHJcbiAgICBwcml2YXRlIHNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjxTSENfUT4sXHJcbiAgICBwcml2YXRlIGdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI6IEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyPEdDUklfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcclxuICAgIHByaXZhdGUgZGVwb3RGZXRjaGVyOiBCYXNlU2VhcmNoRGVwb3RGZXRjaGVyPFNEX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcjogQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyPEdPTl9RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFPZmZpY2VGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyPENPX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyOiBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyPERVQV9RPixcclxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcclxuICAgIHByaXZhdGUgYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI8U1JTX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI6IEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxTRlNfUT4sXHJcbiAgICBlbnZpcm9ubWVudDogQmFzZUVudmlyb25tZW50LFxyXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcclxuICAgIHBhcmtpbmdGZXRjaGVyOiBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcjxTUEFfUT4sXHJcbiAgICBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXHJcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXHJcbiAgICBjYXJoaXJlRmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8U0NIX1E+LFxyXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcclxuICAgIHJhaWxGZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxTUkFfUT4sXHJcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT4sXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlOiBCYXNlV2ViVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcclxuICAgIHF1aWNrbGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyPEdVUlNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI6IEJhc2VHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlcjxHQ01URl9RPixcclxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcclxuICAgIHByb3RlY3RlZCBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI6IEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI8U0lTX1E+LFxyXG4gICAgcHJvdGVjdGVkIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjogQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyPEdGU01fUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI6IEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyPEdSTERfRj4sXHJcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxyXG4gICAgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI8R1VGU0ZfUT4sXHJcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcclxuICAgIHByaXZhdGUgZW1haWxCYXNrZXRGZXRjaGVyOiBCYXNlRW1haWxCYXNrZXRGZXRjaGVyPEVCX0Y+LFxyXG4gICAgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXHJcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXHJcbiAgICBwcml2YXRlIGdldEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcjxHSFRfUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxQcm92aWRlcnNGZXRjaGVyOiBCYXNlR2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI8R1JQX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyPEdDSFBfUT5cclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdFbnRlcnBpc2Ugc2VhcmNoIHNlcnZpY2UgYmVpbmcgaW5pdGVkJyk7XHJcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xyXG4gICAgICBbU2VydmljZVR5cGUuTG91bmdlXTogbmV3IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGxvdW5nZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZsaWdodEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkhvdGVsXTogbmV3IEhvdGVsRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBob3RlbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgaHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgICAgIHF1aWNrbGlzdEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXJcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuQ2FiXTogbmV3IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGNhYmhpcmVGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF06IG5ldyBJUkxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGlybEZldGNoZXIsXHJcbiAgICAgICAgaXJsRGlzY291bnRDYXJkc0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZhc3RUcmFja106IG5ldyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZhc3R0cmFja0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcmFpbEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRXVyb3N0YXJdOiBuZXcgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGV1cm9zdGFyRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKVxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKCdOZXdseSBjcmVhdGVkIHNlYXJjaCBvYmplY3RzOiAnLCB0aGlzLnNlYXJjaGVzKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFxyXG4gICAgICBUcmF2ZWxsZXJbXVxyXG4gICAgPihCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIpO1xyXG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcclxuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyU2VydmljZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xyXG4gICAgICAgIGlmIChzZXJ2aWNlcykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgICAgICAgKG9iamVjdHM6IFNlYXJjaE9iamVjdHMsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID1cclxuICAgICAgICAgICAgICAgICEhc2VydmljZXMgJiYgISFzZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvdW50cmllcykpIHtcclxuICAgICAgdGhpcy5jb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFsbFNlYXJjaEl0ZW1zKCkge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIGl0ZW0/LnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlbW92ZUFsbFRyYXZlbGxlcnMoKTtcclxuICAgIHRoaXMucmVzZXRTZWFyY2hPYmplY3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZShcclxuICAgIHVzZXI/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBDYXJib25BbGxvd2FuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSaXNrQWxlcnRzKFxyXG4gICAgbWluTGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIG1heExldmVsOiBSaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSaXNrQWxlcnRbXT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeTogR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBtaW5MZXZlbCxcclxuICAgICAgbWF4TGV2ZWwsXHJcbiAgICAgIGNvdW50cnlJc29Db2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHQ6IFJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICAgIGlmICghIWNvdW50cnlDb2RlKSB7XHJcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc0xvdW5nZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzTG91bmdlID0gaGFzTG91bmdlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzUGFya2luZyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzUGFya2luZyA9IGhhc1Bhcmtpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNGYXN0VHJhY2sgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0Zhc3RUcmFjayA9IGhhc0Zhc3RUcmFjaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmdlbmVyYWxNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhpcyBhcyB0aGlzIGNyZWF0ZXMgZHVwbGljYXRlIGFpcnBvcnRzIGluIHRoZSBsaXN0XHJcbiAgICAgICAgICAgIC8vIGlmIChyZXN1bHRzLmlhdGFNYXRjaCkge1xyXG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcclxuICAgICAgICAgICAgICAgIC8vIC5maWx0ZXIoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgcmV0dXJuICEhY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA6IGFpcnBvcnQ7XHJcbiAgICAgICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogQWlycG9ydCk6IE9CVEFpcnBvcnREZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMucHJvY2Vzc1Rlcm1pbmFscyhhaXJwb3J0LnRlcm1pbmFscyksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJsaW5lc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPE9CVEFpcmxpbmVzRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPj0gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IEFpcmxpbmVSZXN1bHQpOiBPQlRBaXJsaW5lc0RldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYWlybGluZXMubmFtZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxyXG4gICAgaGFzUGFya2luZz86IGJvb2xlYW4sXHJcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgY29uc3QgY29udmVydCA9IChyZXN1bHRzOiBPQlRBaXJwb3J0RGV0YWlsc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0LmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICAgICAgYWlycG9ydDogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgICB0ZXJtLFxyXG4gICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICBoYXNMb3VuZ2UsXHJcbiAgICAgIGhhc1BhcmtpbmcsXHJcbiAgICAgIGhhc0Zhc3RUcmFja1xyXG4gICAgKS5waXBlKG1hcChjb252ZXJ0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGlzQ29uZmlybWE/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29uZmlybWEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2dldENpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5jaXRpZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgIChyZXN1bHQ6IFNlYXJjaENpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQuY29vcmRpbmF0ZXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGNpdHlOYW1lOiB0ZXJtIH07XHJcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcclxuICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdD4gPVxyXG4gICAgICB0aGlzLmNvbmZlcm1hQ2l0aWVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENvbmZlcm1hQ2l0aWVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKCFyZXN1bHRzPy5zdWdnZXN0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcChcclxuICAgICAgICAocmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBjYXIgaGlyZSBkZXBvdHMgYmFzZWQgb24gY2l0eSBjb3Jkc1xyXG4gICAqL1xyXG4gIGdldENhckhpcmVEZXBvdHMoXHJcbiAgICBsYXRpdHVkZTogbnVtYmVyLFxyXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXHJcbiAgICByYWRpdXM/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH07XHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIHF1ZXJ5LnJhZGl1cyA9IHJhZGl1cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5kZXBvdEZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG5cclxuICAgIC8vIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcG9zdGNvZGUgbG9jYXRpb25zLCB0aGVzZSB3aWxsIHVzZSBwYXJ0aWFsIHBvc3Rjb2RlLFxyXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnd2ExNCcgc2hvdWxkIGJyaW5nIGJhY2ssIG91ciBvZmZpY2UsICdtMzMnIHNob2l1bGQgYnJpbmcgYmFjayBteSBhZGRyc1xyXG4gICAqL1xyXG4gIGdldFBvc3Rjb2RlTGlzdCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnBvc3Rjb2RlRmV0Y2hlci5mZXRjaExpc3QoeyBwb3N0Y29kZTogdGVybSB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogU2VhcmNoUG9zdGNvZGVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG5cclxuICAgICAgcmV0dXJuIHN1YnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFBsYWNlQnlJZChwbGFjZUlkOiBzdHJpbmcpOiBBZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGxpc3Qgb2YgT2ZmaWNlIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICAgIHJlc3VsdHM6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5XHJcbiAgICAgICk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICBvZmZpY2U6IHJlc3VsdC5hZGRyZXNzZXNbMF0sXHJcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGhhc1RvZDpib29sZWFuID0gZmFsc2VcclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMucmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7XHJcbiAgICAgICAgICBxdWVyeTogdGVybSxcclxuICAgICAgICAgIGhhc1RvZFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHRBcnJheSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgID8gcmVzdWx0cy5tYXAoKHJlc3VsdDogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBpcmwgc3RhdGlvbiBsb2NhdGlvbnNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgLSBCZWhhdmlvclN1YmplY3Qgc28gd2Uga25vdyBzb21ldGhpbmcgaXMgaGFwcGVuaW5nXHJcbiAgICovXHJcbiAgc2VhcmNoSXJsU3RhdGlvbnNMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7XHJcbiAgICAgICAgICBxdWVyeTogdGVybVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBJcmxTdXBwbGllclN0YXRpb25bXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogSXJsU3VwcGxpZXJTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC5zdXBwbGllcn0pYCxcclxuICAgICAgICAgICAgICAgIHJhaWxzdGF0aW9uOiByZXN1bHRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaG90ZWwgbG9jYXRpb25zLCB0aGVzZSBzaG91bGQgYmUgY2l0eSwgb2ZmaWNlLCBhaXJwb3J0LCByYWlsc3RhdGlvblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoIGJ5IGUuZy4gJ01hbicgc2hvdWxkIGJyaW5nIGJhY2ssIG1hbmNoZXN0ZXIsIG1hbmNoZXN0ZXIgYWlycG9ydCwgbWFuY2hlc3RlciBwaWNhZGlsbHksIGV0Y1xyXG4gICAqL1xyXG4gIGdldEhvdGVsTG9jYXRpb25zTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlOiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaWYgKFJlZ0V4cHMuVUtfUE9TVENPREUudGVzdCh0ZXJtKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvc3Rjb2RlTGlzdCh0ZXJtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xyXG4gICAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgICAgICAgICB0ZXJtLFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJIYXNTZXJ2aWNlUHJvdmlkZXIoXHJcbiAgICAgICAgICAgICAgU2VydmljZVR5cGUuSG90ZWwsXHJcbiAgICAgICAgICAgICAgU2VydmljZVByb3ZpZGVyLkNvbmZpcm1hXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm0pXHJcbiAgICAgICAgXSkucGlwZShcclxuICAgICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogTG9jYXRpb25EZXRhaWxzW10sIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcclxuICAgICAgICByZXR1cm4gc3VicztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0YXRpb25zQW5kQWlycG9ydHNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xyXG4gICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKVxyXG4gICAgICBdKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByZXN1bHQ6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2goLi4ucmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICByZXR1cm4gc3VicztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIEBkZXNjIC0gcmVtb3ZlIGEgc3BlY2lmaWVkIHRyYXZlbGxlciBmcm9tIHRoZSBzZWxlY3RlZCBhcnJheVxyXG4gICoqL1xyXG4gIHJlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcblxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyVG9UZXN0OiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gIVRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVyVG9UZXN0LCB0cmF2ZWxsZXIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWxsVHJhdmVsbGVycygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmUgYWxsIHRyYXZlbGxlcnMgY2FsbGVkIScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXIpICYmXHJcbiAgICAgICF0aGlzLmN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLnB1c2godHJhdmVsbGVyKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjdXJyZW50Tm9PZlRyYXZlbGxlcnNHcmVhdGVyT3JFcXVhbFRvTWF4KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA+PSB0aGlzLm1heFRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIG1heFRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAvKnRoaXMudXNlclNlcnZpY2UudXNlVHJhdmVsbGVyUHJvZmlsZSAmJiovIHRoaXMuY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpXHJcbiAgICAgID8gMVxyXG4gICAgICA6IE1BWF9UUkFWRUxMRVJTO1xyXG4gIH1cclxuICAvKlxyXG4gICAgQGRlc2MgLSBoZWxwZXIgZnVuY3Rpb24gLSBkZXRlcm1pbmVzIGlmIGEgc2VsZWN0ZWQgdHJhdmVsbGVyIGlzIGFscmVhZHkgYWRkZWQgLVxyXG4gICAgdXNlZCB0byBwcmV2ZW50IHNhbWUgdHJhdmVsbGVyIGJlaW5nIGFkZGVkIG1vcmUgdGhhbiBvbmNlXHJcbiAgKiovXHJcbiAgdHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIHNlbGVjdGVkIHRyYXZlbGxlcnMgYW5kIHJldHVybiB0cnVlIGlmIGZvdW5kLCBmYWxzZSBvdGhlciB3aXNlXHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgIFRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVycywgdHJhdmVsbGVyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhblVzZVRyYXZlbGxlclByb2ZpbGUoKTogYm9vbGVhbiB7XHJcbiAgICAvKlxyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuaXNVc2VyRmF2b3JpdGVTZXQoVXNlckZhdm9ydXJpdGUuRG9udFVzZVRyYXZlbGxlclBvbGljeSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF1cclxuICAgICAgICAuZ3Vlc3QgLyomJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF0ucGF4X2lkICE9PSB1c2VyLlBheElkXHJcbiAgICApOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQoWy4uLnRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxyXG4gICAqICAgdGhlIGhpZ2hlc3QgaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IHZhbHVlIG9mIHRoZSBzZWFyY2ggdHlwZSxcclxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cclxuICAgKiovXHJcbiAgZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPVxyXG4gICAgICB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcclxuICB9XHJcblxyXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcclxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogU2VhcmNoT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoYmFza2V0SXRlbXMpLmN1cnJlbnRJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4gPSB7fSBhcyBSZWNvcmQ8XHJcbiAgICAgIFNlcnZpY2VUeXBlLFxyXG4gICAgICBCYXNrZXRJdGVtXHJcbiAgICA+XHJcbiAgKTogSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuICYmIGl0ZW0ucHJpb3JpdHkgPCBoaWdoZXN0KSB7XHJcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBTZXJ2aWNlVHlwZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaGlnaGVzdDogaXRlbS5wcmlvcml0eSwgY3VycmVudEl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2hvc2VuID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGhpZ2hlc3QsIGN1cnJlbnRJdGVtIH07XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaGlnaGVzdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbnRJdGVtOiBudWxsIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZE9wdGlvbnMoKTogU2VydmljZVR5cGVbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChjdiwgaXRlbUluZGV4KSA9PiB7XHJcbiAgICAgIGlmICgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpdGVtSW5kZXhdLmNob3Nlbikge1xyXG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIFNlcnZpY2VUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY3Y7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgc2VsZWN0ZWQgdHJhdmVsbGVycyBjb250YWlucyBhbnkgZ3Vlc3RzIHdpdGhvdXQgYWxsIG9mIGRldGFpbHNcclxuICAgKi9cclxuICBoYXNTaW1wbGVHdWVzdHMoKTogYm9vbGVhbiB7XHJcbiAgICAvKnJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHsgZ3Vlc3QsIHBob25lLCBuYXRpb25hbGl0eSwgZW1haWwgfSkgPT4ge1xyXG4gICAgICByZXR1cm4gZ3Vlc3QgJiYgISghIWVtYWlsICYmICEhcGhvbmUgJiYgISFuYXRpb25hbGl0eSk7XHJcbiAgICB9KTsqL1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc2V0IHRoZSBzZWFyY2ggb2JqZWN0cyB0byB0aGUgZ2V0IG1lIHRoZXJlIG9iamVjdHMgLSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBnZXQgbWUgdGhlcmUgc2VhcmNoZXNcclxuICAgKi9cclxuICBzZXRHZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBHZXRNZVRoZXJlIFNlYXJjaCBPYmplY3RzICsrKycpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWFyY2hQYXJhbXMoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUmVzZXRpbmcgU2VhcmNoIFBhcmFtcyEnKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICApO1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAocHJvZHVjdFNlYXJjaFNlcnZpY2U6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICBwcm9kdWN0U2VhcmNoU2VydmljZS5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuU2VhcmNoKHR5cGU6IFNlcnZpY2VUeXBlIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBzZWxlY3RlZCB0eXBlIGlzIGNob3NlbiwgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIGhhcyBub3QgYWxyZWFkeSBoYWQgYSBib29raW5nIGNob3NlblxyXG5cclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICAvLyBmaXJzdGx5IGNoZWNrIHRoYXQgdGhlIHR5cGUgb2Ygc2VhcmNoIGV4aXN0c1xyXG4gICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW4gc2VhcmNoIGhlcmUnKTtcclxuICAgICAgLy8gbm93IGNoZWNrIHRoYXQgdGhlIHR5cGUgaXMgY2hvc2VuIGhhcyBoaWdoZXN0IHByaW9yaXR5XHJcbiAgICAgIGlmIChcclxuICAgICAgICAodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0eXBlXS5jaG9zZW4gJiZcclxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShcclxuICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLnByaW9yaXR5XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eXBlICsgJyBjYW4gYmUgc2VhcmNoZWQnKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KHByaW9yaXR5VmFsOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICByZXR1cm4gcHJpb3JpdHlWYWwgPD0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gY29uY2F0aW5hdHMgYWxsIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFjcm9zcyBhbGwgc2VsZWN0ZWQgdHlwZXMgK1xyXG4gICAqICAgdHJhdmVsbGVycyAob3Igd2lsbCBkbyB3aGVuIGl0J3MgY29tcGxldGUpIFRPRE8gLSBhZGQgRmxpZ2h0LCBSYWlsIENhclxyXG4gICAqKi9cclxuICBnZXRBbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGNvbmNhdHRlZEVycm9yczogc3RyaW5nW10gPSB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcztcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5Mb3VuZ2UpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYXJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYXIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUmFpbClcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5QYXJraW5nXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUGFya2luZylcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlBhcmtpbmddLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYWJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYWIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYWJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkhvdGVsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GYXN0VHJhY2tdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5GYXN0VHJhY2spXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GYXN0VHJhY2tdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ob3RlbC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uSE9URUwpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5ob3RlbC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZmxpZ2h0LmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5GTElHSFQpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5mbGlnaHQudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5wYXJraW5nLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5BSVJfUEFSS0lORykpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy5wYXJraW5nLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMudGF4aS5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uVEFYSSkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy50YXhpLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZXVyb3N0YXIuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkVVUk9TVEFSKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmV1cm9zdGFyLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuY29hY2guY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkNPQUNIKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmNvYWNoLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9Ki9cclxuICAgIHRoaXMuZXJyb3JzLm5leHQoY29uY2F0dGVkRXJyb3JzKTtcclxuICAgIHJldHVybiBjb25jYXR0ZWRFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5TZWxmQm9vazpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgdHJpZ2dlciB1bmRlciBub3JtYWwgY29uZGl0aW9ucyBhcyB0aGUgdXNlciBzaG91bGQgYmUgbG9hZGVkIGluIGFzIGEgdHJhdmVsbGVyIG9uIGxvZ2luXHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnQ3VycmVudCB1c2VyIG11c3QgYmUgYSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXJXaXRoU2VsZjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA8IDEpIHx8XHJcbiAgICAgICAgICAhdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCB5b3VyIHNlbGYuJyk7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQm9va2VyOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkNvbXBhbnlHcm91cDpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLk9mZmljZTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlRtYzpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlJvb3Q6XHJcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IDEpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgdHJhdmVsbGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdVbnJlY29nbmlzZWQgdXNlciB0eXBlISAtIFBsZWFzZSBjb250YWN0IHN1cHBvcnQuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIGZpbmRQYXhJblRyYXZlbGxlcnModXNlcm5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiB1c2VybmFtZSA9PT0gdHJhdmVsbGVyLmVtYWlsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZvcm1zKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICB0aGlzLmdldEFsbEVycm9yTWVzc2FnZXMoKTtcclxuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcclxuICAgICAgdGhpcy5lcnJvcnMubmV4dChcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10ubWVzc2FnZXMudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVHJhdmVsbGVycygpICYmXHJcbiAgICAgICAgdGhpcy5zZWFyY2hlc1tzZWFyY2hPYmplY3QudHlwZSBhcyBrZXlvZiBTZWFyY2hQYXJhbXNdLmlzVmFsaWQudmFsdWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTZWFyY2hPYnRlY3QoKTogU2VhcmNoT2JqZWN0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5maW5kKChvYmo6IFNlYXJjaE9iamVjdCkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhb2JqICYmIG9iai5wcmlvcml0eSA9PT0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSAmJiBvYmouY2hvc2VuXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoZXModXJsPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld1NlYXJjaFN0YXJ0ZWQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc2VhcmNoX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHNlYXJjaE9iamVjdDogU2VhcmNoT2JqZWN0O1xyXG4gICAgc2VhcmNoT2JqZWN0ID0gdGhpcy5fZmluZFNlYXJjaE9idGVjdCgpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICBzZWFyY2hPYmplY3QuY2hvc2VuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXJsKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoZXMuSU5URVJOQVRJT05BTF9SQUlMKSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRJcmxGb3JtKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHNlYXJjaE9iamVjdCAmJlxyXG4gICAgICAhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKHNlYXJjaE9iamVjdC5yZXN1bHRVcmwpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5yZXN1bHRVcmxdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKklmIHRoZSBzZWFyY2ggZXhjZWVkcyB0aGUgdGltZW91dCB0aW1lLCBjYW5jZWwgc2VhcmNoIGFuZCB0ZWxsIE9CVCB0aGF0IGl0J3MgdGltZWQgb3V0Ki9cclxuICAgIC8vIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGlmIChjb250ZXh0LnNlYXJjaF9sb2FkaW5nKSB7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoVGltZWRPdXQubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0sIHRoaXMuZW52aXJvbm1lbnQuc2VhcmNoVGltZW91dCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5tYXAoXHJcbiAgICAgICAgICAoc2VhcmNoOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXNlYXJjaCAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbc2VhcmNoLnR5cGVdICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0uY2hvc2VuXHJcbiAgICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxyXG4gICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xyXG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgM1xyXG4gICAgICA/IG9mKFtdKVxyXG4gICAgICA6IG9mKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIEFpcnBvdCcsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01BTicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTEgMlBaJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdMb25kb24gSGVhdGhyb3cnLFxyXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTG9uZG9uIEhlYXRocm93IEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ1RXNiAxRVcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzZXMoaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiBvZihbXHJcbiAgICAgIHtcclxuICAgICAgICBIb3VzZTogJ0NlY2lsIENvdXJ0JyxcclxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcclxuICAgICAgICBUb3duOiAnSGFsZScsXHJcbiAgICAgICAgUG9zdENvZGU6ICdXQTE1IDlQQicsXHJcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJBZGRyZXNzZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICBIb3VzZTogcmVzdWx0Lm51bWJlck9yTmFtZSxcclxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxyXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcclxuICAgICAgICAgICAgUG9zdENvZGU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJBZGRyZXNzQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG90ZWxDaGFpbihcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtIH0pO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2VOYW1lcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q29uZmVybWFPZmZpY2VOYW1lc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlci5mZXRjaExpc3QoKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdHMpOiBhbnkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cz8ucmVzdWx0cz8ubWFwKChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZShvZmZpY2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZUluZm8+IHtcclxuICAgIGlmIChvZmZpY2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZUZldGNoZXIuZmV0Y2hPbmUoeyBvZmZpY2VJZCB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBDb25mZXJtYU9mZmljZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBbGxIb3RlbENoYWlucygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldEhvdGVsQ2hhaW5zRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBHZXRIb3RlbENoYWluc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFJhaWxQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldFJhaWxQcm92aWRlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldENhckhpcmVQcm9pdmRlcnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdDogR2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldEFsbEFpcmxpbmVzKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0QWxsQWlybGluZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEFsbEFpcmxpbmVzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsQ2FyZHMoKTogT2JzZXJ2YWJsZTxSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsQ2FyZHNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIGNvbnN0IHJhaWxDYXJkcyA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgICAocmVzdWx0OiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBaXJwb3J0QnlDb2RlKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8QWlycG9ydFNlYXJjaFJlc3VsdHM+IHtcclxuICAgIGlmIChjb2RlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaEFpcnBvcnRzRmV0Y2hlci5mZXRjaE9uZSh7IHF1ZXJ5OiBjb2RlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdDogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVE8gQkUgT1ZFUiBSSURERU4gQlkgT0JUIFNVQkNMQVNTRVNcclxuICBwdWJsaWMgaW5pdF9zZWFyY2hfb2JqZWN0cygpOiBTZWFyY2hPYmplY3RzIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIFNFQVJDSCBPQkpFQ1RTIEZPUiBHRVQgTUUgVEhFUkUgRE9PUiAyIERPT1IgICAgICAgICAgKlxyXG4gICAqIERpZmZlcmVuY2Uocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqIEFsbCBvYmplY3RzIGhhdmUgYSBwcmlvcml0eSBvZiAxIHNvIHRoYXQgdGhleSBhcmUgICAgKlxyXG4gICAqIHNlYXJjaGVkIGF0IHRoZSBzYW1lIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqIFVybHMgY2hhbmdlZCB0byBnZXRtZXRoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gIHByb3RlY3RlZCBnZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiBTZWFyY2hPYmplY3RzIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgLypcclxuICAgKiAgQGRlc2MgLSBnZXRzIGFsbCBzZWxlY3RlZCB0cmF2ZWxsZXJzXHJcbiAgICogICBJbXBsZW1lbnRlZCBmb3IgcmFpbCBjYXJkIHJlYXNvbnMgaW4gTFVcclxuICAgKiovXHJcbiAgZ2V0U2VsZWN0ZWR0cmF2ZWxsZXJzKCk6IFRyYXZlbGxlcltdIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycztcclxuICB9XHJcblxyXG4gIHJlc2V0U2VhcmNoT2JqZWN0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSBhcnJheSBvZiB2YWx1ZXMgZnJvbSBBUEkgYXJlIGV4cHRlY3RlZCBhbmQgZnVuY3Rpb24gbWFuaXB1bGF0ZSB0byBjcmVhdGUgdGhlIGxpc3RcclxuICAgIFtcIk1haW5cIl1cclxuICAgIFtcIjFcIl1cclxuICAgIFtcIjFcIiwgXCIyXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCJdXHJcbiAgICBbXCJTb3V0aFwiLCBcIk5vcnRoXCJdXHJcbiAgKi9cclxuICBwdWJsaWMgcHJvY2Vzc1Rlcm1pbmFscyh0ZXJtaW5hbHM6IHN0cmluZ1tdKTogVGVybWluYWxzVHlwZVtdIHtcclxuICAgIGNvbnN0IHRlbXBUZXJtaW5hbDogVGVybWluYWxzVHlwZVtdID0gW107XHJcbiAgICBpZiAoXHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMScpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMicpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMycpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnNCcpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnNScpXHJcbiAgICApIHtcclxuICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6ICdBbnkgVGVybWluYWwnLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgIHRlcm1pbmFscy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGBUZXJtaW5hbCAke2l0ZW19YCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGVybWluYWxzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHt0ZXJtaW5hbHNbMF19IFRlcm1pbmFsYCwgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICAgIHRlcm1pbmFscy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7aXRlbX0gVGVybWluYWxgLCB2YWx1ZTogYCR7aXRlbX1gIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcFRlcm1pbmFsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZVVzZXJBZGRyZXNzKFxyXG4gICAgYWRkcmVzczogU2F2ZVVzZXJBZGRyZXNzTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKGFkZHJlc3MpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJcclxuICAgICAgICAudXBkYXRlT25lKGFkZHJlc3MpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuQm9vayhzZXJ2aWNlOiBTZXJ2aWNlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuY2FuQm9vayhzZXJ2aWNlKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzUG9zdGNvZGVWYWlsZChwb3N0Y29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIudGVzdCh7IHBvc3Rjb2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIFN0YXJ0ICovXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhYiBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FiSGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhYkhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYWJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FiSGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FiSGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlycG9ydDogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNvdW50cnlDb2RlOiBudWxsLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSxcclxuICAgICAgZnJvbUFkZHJlc3M6IG51bGwsXHJcbiAgICAgIGZyb21TdGF0aW9uOiBudWxsLFxyXG4gICAgICBmcm9tTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgdG9BZGRyZXNzOiBudWxsLFxyXG4gICAgICB0b1N0YXRpb246IG51bGwsXHJcbiAgICAgIHRvTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgdmVoaWNsZVR5cGU6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksXHJcbiAgICAgIHZpYXNGcm9tOiBudWxsLFxyXG4gICAgICB2aWFzVG86IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FiSGlyZVRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydkZXBhcnRzJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSB0aGUgQ2FyIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgLi4uYXJncyBleGFtcGxlIC0gc2VhcmNoU2VydmljZS5zZXRDYXJIaXJlUXVlcnkoZGF0YS5xdWVyeSwgeyBkZXBhcnRzOiBtb21lbnREYXRlVGltZSB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUNhckhpcmVRdWVyeSguLi5hcmdzOiBhbnkpOiBDYXJIaXJlVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYXJIaXJlVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhaXJDb246IG51bGwsXHJcbiAgICAgIGNhckNsYXNzOiBudWxsLFxyXG4gICAgICBjYXJUeXBlOiBudWxsLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuVmVuZG9yOiBudWxsLFxyXG4gICAgICBjaG9zZW5EaXN0YW5jZTogJzUnLFxyXG4gICAgICBjaXR5RHJvcG9mZjogbnVsbCxcclxuICAgICAgY2l0eURyb3BvZmZEZXBvdDogbnVsbCxcclxuICAgICAgY2l0eVBpY2t1cDogbnVsbCxcclxuICAgICAgY2l0eVBpY2t1cERlcG90OiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2NvdW50cnk6ICdHQicsXHJcbiAgICAgIGRyb3BvZmZfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIGRyb3BvZmZfbG9jYXRpb246IG51bGwsXHJcbiAgICAgIGVzdGltYXRlZE1pbGVhZ2U6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uVHlwZTogbnVsbCxcclxuICAgICAgcGlja3VwX2NvdW50cnk6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9kYXRldGltZTogbnVsbCxcclxuICAgICAgcGlja3VwX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmY6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZlJhdzogbnVsbCxcclxuICAgICAgcG9zdGNvZGVQaWNrdXA6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwUmF3OiBudWxsLFxyXG4gICAgICByZXR1cm5fdG9fcGlja3VwOiB0cnVlLFxyXG4gICAgICB0cmFuc21pc3Npb246IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FySGlyZVRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydwaWNrdXBfZGF0ZXRpbWUnLCAnZHJvcG9mZl9kYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRmxpZ2h0IHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hGbGlnaHRzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRmxpZ2h0UXVlcnkoLi4uYXJnczogYW55KTogRmxpZ2h0VGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBGbGlnaHRUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2ZUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IG51bGwsXHJcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxyXG4gICAgICBmYXJlVHlwZTogRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RmxpZ2h0VGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgSG90ZWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VIb3RlbFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoSG90ZWxzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoSG90ZWxzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VIb3RlbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEhvdGVsVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBjaGVja2luX2RhdGU6IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcclxuICAgICAgY2hlY2tvdXRfZGF0ZTogbW9tZW50KCkuYWRkKDEsICdkYXknKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNvdW50cnk6IHsgY0NvZGU6ICdHQicsIGNOYW1lOiAnVW5pdGVkIEtpbmdkb20nIH0sXHJcbiAgICAgIGN1cnJlbmN5OiAnR0JQJyxcclxuICAgICAgZGlzdGFuY2U6IDUsIC8vIGRlZmF1bHQgNSBtaWxlcyByYWRpdXNcclxuICAgICAgaG90ZWxfYXZhaWxhYmlsaXR5OiBudWxsLFxyXG4gICAgICBob3RlbF9jaGFpbjogbnVsbCxcclxuICAgICAgaG90ZWxfbmFtZTogbnVsbCxcclxuICAgICAgbG9jYXRpb25fdHlwZV9zZWxlY3Q6IExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgICAgbG9jYXRpb246IG51bGwsIC8vIG1pZ2h0IHdhbnQgdG8gc3BsaXQgdGhpcyBvdXQgdG8gY2l0eSwgYWlycG9ydCwgb2ZmaWNlLCByYWlsc3RhdGlvbiAtIHRoaXMgd2lsbCBkbyBmb3Igbm93XHJcbiAgICAgIG5vX29mX29jY3VwYW50czogMSwgLy8gc2ltaWxhcmx5IHRoaW5rIHRoaXMgaXMgYSBtYXggb2YgM1xyXG4gICAgICBub19vZl9yb29tczogMSwgLy8gbWF4IG9mIDQgaW4gb2xkIHNhYnMsIG5vdCBzdXJlIGhlcmVcclxuICAgICAgb2ZmaWNlOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZTogbnVsbCxcclxuICAgICAgcHJlZmVyZWRfaG90ZWxzX29ubHk6IGZhbHNlLFxyXG4gICAgICB0cmFpbnNTdGF0aW9uOiBudWxsXHJcbiAgICB9IGFzIEhvdGVsVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxIb3RlbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydjaGVja2luX2RhdGUnLCAnY2hlY2tvdXRfZGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgTG91bmdlcyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUxvdW5nZXNRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaExvdW5nZXNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hMb3VuZ2VzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VMb3VuZ2VzUXVlcnkoLi4uYXJnczogYW55KTogTG91bmdlc1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudCgpLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBMb3VuZ2VzVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxMb3VuZ2VzVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUGFya2luZyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVBhcmtpbmdRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFBhcmtpbmdBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hQYXJraW5nQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VQYXJraW5nUXVlcnkoLi4uYXJnczogYW55KTogUGFya2luZ1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgY2FyUGFya2VkRm9yWW91OiBudWxsLFxyXG4gICAgICBkZXBhcnREYXRldGltZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxyXG4gICAgICBtZWV0QW5kR3JlZXQ6IG51bGwsXHJcbiAgICAgIG9uQWlycG9ydDogbnVsbCxcclxuICAgICAgb3V0RmxpZ2h0TnVtYmVyOiBudWxsLFxyXG4gICAgICBwYXJrQW5kUmlkZTogbnVsbCxcclxuICAgICAgcGFya0FuZFN0cm9sbDogbnVsbCxcclxuICAgICAgcmVjb21tZW5kZWQ6IG51bGwsXHJcbiAgICAgIHRlcm1pbmFsOiBudWxsXHJcbiAgICB9IGFzIFBhcmtpbmdUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFBhcmtpbmdUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJywgJ2RlcGFydERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBSYWlsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZVJhaWxRdWVyeSguLi5hcmdzOiBhbnkpOiBSYWlsVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKSwgMzApO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogUmFpbFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFpcnBvcnRFeHByZXNzU3RhdGlvbjogbnVsbCxcclxuICAgICAgYXBwbHlSYWlsY2FyZHM6IGZhbHNlLFxyXG4gICAgICBjYXJuZXRUaWNrZXQ6IGZhbHNlLFxyXG4gICAgICBjaG9zZW5TZWFyY2hDbGFzczogUmFpbENsYXNzLkFsbCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksXHJcbiAgICAgIGRpc2FibGVBdXRvRGlzY291bnRzOiBmYWxzZSxcclxuICAgICAgZXh0cmFUaW1lOiBmYWxzZSxcclxuICAgICAgaW5Cb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpc0FpcnBvcnRFeHByZXNzOiBmYWxzZSxcclxuICAgICAgbm9PZkFkdWx0czogMCxcclxuICAgICAgbm9PZkNoaWxkcmVuOiAwLFxyXG4gICAgICBvdXRib3VuZENyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICBvdXRCb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBwcmlvcml0aXNlQnlQcmljZTogZmFsc2UsXHJcbiAgICAgIHJldHVybkNyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICB0cmF2ZWxsaW5nRnJvbTogbnVsbCxcclxuICAgICAgdHJhdmVsbGluZ1RvOiBudWxsLFxyXG4gICAgICB2aWE6IGZhbHNlLFxyXG4gICAgICB2aWFMb2NhdGlvbjogbnVsbCxcclxuICAgICAgcmFpbENhcmRzOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFJhaWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnaW5Cb3VuZERhdGVUaW1lJywgJ291dEJvdW5kRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBJcmxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcclxuICAgICAgam91cm5leVR5cGU6IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogbnVsbCwgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGltZSxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogbnVsbCxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPElybFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydyZXR1cm5EZXBhcnR1cmVEYXRlVGltZScsICdvdXRib3VuZERlcGFydHVyZURhdGVUaW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBFdXJvc3RhciBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUV1cm9zdGFyUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7RXVyb3N0YXJUZW1wUGFyYW1zfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hFdXJvc3RhckFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRXVyb3N0YXJRdWVyeSguLi5hcmdzOiBhbnkpOiBFdXJvc3RhclRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRXVyb3N0YXJUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2ZUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sXHJcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxyXG4gICAgICBmYXJlVHlwZTogRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RXVyb3N0YXJUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnb3V0Qm91bmREYXRlJywgJ2luYm91bmREYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBGYXN0VHJhY2sgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGYXN0VHJhY2tRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaExvdW5nZXNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hMb3VuZ2VzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VGYXN0VHJhY2tRdWVyeSguLi5hcmdzOiBhbnkpOiBGYXN0VHJhY2tUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbFxyXG4gICAgfSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZhc3RUcmFja1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIEVuZCAqL1xyXG5cclxuICBzaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvTG9nb3V0Q29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBPdmVyd3JpdGUgaWYgdGhlIE9CVCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2ZmaWNlcyBpbnN0ZWFkIG9mIHNlYXJjaGluZyBvbiB0aGVtXHJcbiAgICovXHJcbiAgcHVibGljIHNob3VsZEZldGNoQWxsT2ZmaWNlcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNGbGlnaHRzR3JvdXBlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgZ2V0Q291bnRyeUZ1bGxOYW1lRnJvbUNvdW50cnlDb2RlKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnVsbE5hbWUgPSAnVW5rbm93bic7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5jb3VudHJpZXNbaV07XHJcblxyXG4gICAgICBpZiAoY291bnRyeS5jQ29kZSA9PT0gY29kZSkge1xyXG4gICAgICAgIHJldHVybiBjb3VudHJ5LmNOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZ1bGxOYW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclJlY2VudFNlYXJjaGVzKFxyXG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmVjZW50U2VhcmNoW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAoXHJcbiAgICAgIHJlc3VsdHM6IEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5XHJcbiAgICApOiBSZWNlbnRTZWFyY2hbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IFJlY2VudFNlYXJjaFtdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdDogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0KTogUmVjZW50U2VhcmNoID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVzdWx0LnNlcnZpY2VUeXBlLFxyXG4gICAgICAgICAgICBzZWFyY2hBcmdzOiByZXN1bHQuc2VhcmNoQXJncyxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiByZXN1bHQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IHJlc3VsdC51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIHRyYXZlbERhdGU6IHJlc3VsdC50cmF2ZWxEYXRlLFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzOiByZXN1bHQudHJhdmVsbGVyc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzKFxyXG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgdGFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlY2VudFNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG4gIGRlbGV0ZUZhdm91cml0ZVNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlUmVjZW50U2VhcmNoKHF1ZXJ5OiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMpOiB2b2lkIHtcclxuICAgIGlmIChxdWVyeSkge1xyXG4gICAgICB0aGlzLmJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgbGlzdCBvZiBldXJvc3RhciBzdGF0aW9uIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgbG9va3VwRXVyb3N0YXJTdGF0aW9ucyh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zb2xlLmxvZygndGVybXwgJywgdGVybSk7XHJcbiAgICBpZiAodGVybSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuZXVyb3N0YXRpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihcclxuICAgICAgICB0aGlzLmV1cm9zdGF0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAodikgPT4gdi5kZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybS50b0xvd2VyQ2FzZSgpKSA+IC0xXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoVHJhdmVsbGVycyhcclxuICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICBzZWFyY2hUcmF2ZWxsZXJzQnk6IFRyYXZlbGxlclNlYXJjaFR5cGVzXHJcbiAgKTogT2JzZXJ2YWJsZTxUcmF2ZWxsZXJbXT4ge1xyXG4gICAgY29uc3QgdHlwZTogQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5TZWxmQm9vayAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlRyYXZlbGxlciAmJlxyXG4gICAgICBpbnB1dC5sZW5ndGggPj0gMVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlucHV0V29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oW1xcd10pKy9nKTtcclxuICAgICAgY29uc3QgYXJnczogU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5jbG9uZShkYXRhKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZSA/IC0xIDogYS5zdXJuYW1lID4gYi5zdXJuYW1lID8gMSA6IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICk6IE9ic2VydmFibGU8R2V0RmxpZ2h0RmFyZVJ1bGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0IH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbExpdmVEZXBhcnR1cmVzKFxyXG4gICAgc3RhdGlvbjogc3RyaW5nLFxyXG4gICAgZGF0ZVRpbWU/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlci5mZXRjaExpc3Qoe1xyXG4gICAgICBzdGF0aW9uQ29kZTogc3RhdGlvbixcclxuICAgICAgZGVwYXJ0RGF0ZVRpbWU6IGRhdGVUaW1lXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEZsaWdodFNlYXRNYXAoXHJcbiAgICBmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICk6IE9ic2VydmFibGU8RmxpZ2h0U2VhdE1hcFJlc3BvbnNlW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodFNlYXRNYXBGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodDogZmxpZ2h0IH0pLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogRmxpZ2h0U2VhdE1hcFJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHRzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzYXZlRmF2b3VyaXRlU2VhcmNoKFxyXG4gICAgc2VhcmNoOiBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoc2VhcmNoKTtcclxuICB9XHJcblxyXG4gIGdldENvbmZlcm1hUm9vbUltYWdlcyhob3RlbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFN0cmluZ1tdPiB7XHJcbiAgICBpZiAoaG90ZWxJZCkge1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlci5mZXRjaExpc3QoeyBob3RlbElkIH0pO1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWFpbEJhc2tldChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmVtYWlsQmFza2V0RmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdElybEZvcm0oKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlckVtYWlsID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRW1haWwoKTtcclxuICAgIGxldCBzZWFyY2hQYXJhbXMgPSB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTtcclxuICAgIGxldCBvbkJlaGFsZk9mOiBzdHJpbmc7XHJcbiAgICBsZXQgcGFzc2VuZ2Vyczoge307XHJcblxyXG4gICAgLy8gZ2V0IHBhc3NlbmdlcnNcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGxldCBhZ2U6IG51bWJlcjtcclxuICAgICAgICBpZiAodHJhdmVsbGVyLmRvYil7XHJcbiAgICAgICAgICBsZXQgdGltZURpZmYgPSBNYXRoLmFicyhuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHRyYXZlbGxlci5kb2IpLmdldFRpbWUoKSk7XHJcbiAgICAgICAgICBhZ2UgPSBNYXRoLmZsb29yKCh0aW1lRGlmZiAvICgxMDAwICogMzYwMCAqIDI0KSkvMzY1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHRyYXZlbGxlci5uYW1lLFxyXG4gICAgICAgICAgYWdlOiBhZ2U/LnRvU3RyaW5nKCkgfHwgJ05vdCBzcGVjaWZpZWQnLFxyXG4gICAgICAgICAgZGlzY291bnRDYXJkOiBgRGlzY291bnQgQ2FyZCAke2luZGV4KzF9YCxcclxuICAgICAgICAgIGxveWFsdHlDYXJkOiBgTG95YWx0eSBDYXJkICR7aW5kZXgrMX1gXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBvbkJlaGFsZk9mID0gdHJhdmVsbGVyc1swXS5lbWFpbCA/IHRyYXZlbGxlcnNbMF0uZW1haWwgOiBjdXJyZW50VXNlckVtYWlsO1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIGdldCBqcmZyZWZlcmVuY2VcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgc2VhcmNoUGFyYW1zLnJlc3VsdHMuc3Vic2NyaWJlKChpcmxKb3VybmV5OiBJcmxKb3VybmV5T3B0aW9uc1tdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5qcmZSZWZlcmVuY2UgPSBpcmxKb3VybmV5WzBdPy5qcmZyZWZlcmVuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5qcmZSZWZlcmVuY2UgJiYgcGFzc2VuZ2Vycykge1xyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIHRyYWluTnVtYmVyOiBzZWFyY2hQYXJhbXMudHJhaW5OdW1iZXIgfHwgJ0FueScsXHJcbiAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdGcm9tLm5hbWUsXHJcbiAgICAgICAgZGVzdGluYXRpb25TdGF0aW9uOiBzZWFyY2hQYXJhbXMudHJhdmVsbGluZ1RvLm5hbWUsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBzZWFyY2hQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogc2VhcmNoUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIGFkZGl0aW9uYWxJbmZvOlxyXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLmFkZGl0aW9uYWxJbnN0cnVjdGlvbnMgfHwgJ05vIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zJyxcclxuICAgICAgICBzZXJ2aWNlQ2xhc3M6IHNlYXJjaFBhcmFtcy5pcmxDbGFzcyB8fCAnQW55JyxcclxuICAgICAgICBvZmZsaW5lUmVmZXJlbmNlOiB0aGlzLmpyZlJlZmVyZW5jZSxcclxuICAgICAgICBub3RpZnlFbWFpbDogY3VycmVudFVzZXJFbWFpbCwgXHJcbiAgICAgICAgb25CZWhhbGZPZjogb25CZWhhbGZPZixcclxuICAgICAgICBwYXNzZW5nZXJzOiBwYXNzZW5nZXJzXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHBheWxvYWQpO1xyXG5cclxuICAgICAgdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdDogSXJsT2ZmbGluZU5vdGlmeVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5PZmZsaW5lUmVxdWVzdERpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnIH0sXHJcbiAgICAgICAgICAgICAgeyBqcmZSZWZlcmVuY2U6IHRoaXMuanJmUmVmZXJlbmNlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5Nb2RhbEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICB7IGVycm9yOiAnVW5hYmxlIHRvIHNlbmQgb2ZmbGluZSBub3RpZmljYXRpb24nIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihcclxuICAgIGpyZlJlZmVyZW5jZTogYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxJcmxPZmZsaW5lTm90aWZ5UmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXIuZmV0Y2hPbmUoanJmUmVmZXJlbmNlKTtcclxuICB9XHJcbn1cclxuIl19
|
|
1526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1MLGFBQWEsRUFrQ2IsZUFBZSxFQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBeUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7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S0FBSztnQkFDNUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ25DLFdBQVcsRUFBRSxnQkFBZ0I7Z0JBQzdCLFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQzdDLENBQUMsTUFBMkMsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixVQUFVLENBQUMsNkJBQTZCLEVBQ3hDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQzlCLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsVUFBVSxDQUFDLG1CQUFtQixFQUM5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFDbEIsRUFBRSxLQUFLLEVBQUUscUNBQXFDLEVBQUUsQ0FDakQsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLFlBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOztBQS9nRU0sNkNBQWlCLEdBQVcsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgQ291bnRyaWVzIGZyb20gJy4uL2RhdGEvY291bnRyaWVzLmpzb24nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hPYmplY3QsXHJcbiAgU2VhcmNoT2JqZWN0c1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcclxuaW1wb3J0ICogYXMgZ3JhcGhxbFR5cGVzIGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEhvdGVsRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaCxcclxuICBUaW1lV2luZG93XHJcbn0gZnJvbSAnLi4vY2xhc3Nlcy9mbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbEVudGVycHJpc2VTZWFyY2gsXHJcbiAgUmFpbFNlYXJjaENyaXRlcmlhXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyLCBUcmF2ZWxsZXJPYmplY3QgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9oZWxwZXJzJztcclxuaW1wb3J0IHsgQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9ob3RlbC1hdmFsbGliaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VFbnZpcm9ubWVudCB9IGZyb20gJy4uL2NsYXNzZXMvZW52aXJvbWVudCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcixcclxuICBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXBvc3Rjb2Rlcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzRm9ybSxcclxuICBBaXJwb3J0U2VhcmNoUmVzdWx0cyxcclxuICBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheSxcclxuICBDb3VudHJ5Q29kZSxcclxuICBMb2NhdGlvbkRldGFpbHMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBSYWlsQWlycG9ydCxcclxuICBSb3V0ZXIsXHJcbiAgU2VhcmNoQ2l0aWVzUmVzdWx0LFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdCxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0QXJyYXksXHJcbiAgVGVybWluYWxzVHlwZSxcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheSxcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHQsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdCxcclxuICBBaXJsaW5lc1NlYXJjaFJlc3VsdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdCxcclxuICBDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0LFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcclxuICBHZXRIb3RlbENoYWluc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0LFxyXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBHZXRBbGxBaXJsaW5lc1Jlc3VsdCxcclxuICBHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHQsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5LFxyXG4gIFNlcnZpY2VQcm92aWRlclxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hSYWlsU3RhdGlvbnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLXN0YXRpb25zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VMb3VuZ2VRdW90ZUZldGNoZXIsXHJcbiAgTG91bmdlUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2xvdW5nZS1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcixcclxuICBQYXJraW5nUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3BhcmtpbmctcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZsaWdodFF1b3RlRmV0Y2hlcixcclxuICBGbGlnaHRRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VIb3RlbFF1b3RlRmV0Y2hlcixcclxuICBIb3RlbFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ob3RlbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcixcclxuICBDYXJIaXJlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLWF2YWlsYWJpbGl0eS1kZXRhaWwuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhYmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYWJoaXJlLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VSYWlsUXVvdGVGZXRjaGVyLFxyXG4gIFJhaWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsUXVvdGVGZXRjaGVyLFxyXG4gIElybFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7IFJlZ0V4cHMgfSBmcm9tICcuLi9tb2RlbHMvcmVnZXhwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICBTZWFyY2hQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEFpcnBvcnRzRmV0Y2hlcixcclxuICBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlycG9ydHMtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcixcclxuICBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlybGluZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgVXNlclNlcnZpY2VzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoQ2l0eUZldGNoZXIsXHJcbiAgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXIsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWNvbmZlcm1hLWNpdGllcy5mZXRjaGVyJztcclxuaW1wb3J0IHsgQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2h0dHAtY2FsbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSG90ZWxBdmFsaW5pbGl0eUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtYXZhbGlhYmlsaXR5LWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS11c2VyLWFkZHJlc3MudXBkYXRlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyLFxyXG4gIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWFkZHJlc3Nlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLFxyXG4gIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLW5hbWVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyLFxyXG4gIENvbmZlcm1hT2ZmaWNlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jb25mZXJtYS1vZmZpY2UuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLFxyXG4gIEdldFVzZXJDb21wYW55T2ZmaWNlc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jb21wYW55LW9mZmljZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcixcclxuICBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLFxyXG4gIEdldENvbmZlcm1hUm9vbUltYWdlc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY29uZmVybWEtcm9vbS1pbWFnZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLFxyXG4gIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZVxyXG59IGZyb20gJy4uL3Rlc3RlcnMvcG9zdGNvZGUtdmFsaWRhdGUudGVzdGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaERlcG90RmV0Y2hlcixcclxuICBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtZGVwb3RzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyLFxyXG4gIFNlYXJjaElybFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaXJsLXN0YXRpb25zLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxyXG4gIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jb25mZXJtYS1xdWlja2xpc3QuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIsXHJcbiAgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS11c2VyLWFkZHJlc3MtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLFxyXG4gIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcixcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLWZhdm91cml0ZS1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLFxyXG4gIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtbGl2ZS1kZXBhcnR1cmVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHsgSG90ZWxUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBSYWlsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGbGlnaHRUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgTG91bmdlc1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lsb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUGFya2luZ1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lwYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBDYWJIaXJlVGVtcFBhcmFtcyxcclxuICBUYXhpRm9ybU1vZGVcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FySGlyZVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLFxyXG4gIEdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWN1cnJlbnQtY2FyYm9uLWFsbG93YW5jZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgQmFzZVdlYlRva2VuU2VydmljZSB9IGZyb20gJy4vd2VidG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyLFxyXG4gIEdldFJpc2tBbGVydHNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yaXNrLWFsZXJ0cy5mZXRjaGVyJztcclxuaW1wb3J0IHsgSXJsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElSTEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItcmVjZW50LXNlYXJjaGVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbGNhcmRzRmV0Y2hlcixcclxuICBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWNhcmRzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXIsXHJcbiAgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvdmlkLW1pY3Jvc2l0ZS10b2tlbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyLFxyXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2V1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRXVyb3N0YXJUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgRXVyb1N0YXRpb25zIGZyb20gJy4uL2RhdGEvZXVyby1zdGF0aW9ucy5qc29uJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXVzZXJzLWNhbi1ib29rLWZvci1mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcixcclxuICBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2lybC1kaXNjb3VudC1jYXJkLWZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcixcclxuICBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LWZhcmUtcnVsZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyLFxyXG4gIEdldEZsaWdodFNlYXRNYXBUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWZsaWdodC1zZWF0LW1hcC1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBBcHBseUhvdGVsUnVsZXNGZXRjaGVyVHlwZSxcclxuICBCYXNlSG90ZWxSdWxlc0ZldGNoZXJcclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1KSVQtaG90ZWwtcnVsZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWZhdm91cml0ZS1zZWFyY2hlcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VFbWFpbEJhc2tldEZldGNoZXIsXHJcbiAgRW1haWxCYXNrZXRGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2VtYWlsLWJhc2tldC5mZXRjaGVyJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZhc3QtdHJhY2stZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyLFxyXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9mYXN0LXRyYWNrLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyLFxyXG4gIFNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZW5kLW9mZmxpbmUtbm90aWZpY2F0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1ob3RlbC1jaGFpbnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyLFxyXG4gIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXByb3ZpZGVycy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0QWxsQWlybGluZXNGZXRjaGVyLFxyXG4gIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWxsLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY2FyLWhpcmUtcHJvdmlkZXJzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxyXG4gIEdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWlybC1zdXBwbGllci1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQgeyBTZXJ2aWNlVHlwZSB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9UUkFWRUxMRVJTID0gODtcclxuXHJcbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgbmFtZSA9ICduYW1lJyxcclxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XHJcbiAgaGlnaGVzdDogbnVtYmVyO1xyXG4gIGN1cnJlbnRJdGVtOiBTZWFyY2hPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XHJcbiAgU1BfUSBleHRlbmRzIFNlYXJjaFBvc3Rjb2Rlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JfUSBleHRlbmRzIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlLFxyXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNQQV9RIGV4dGVuZHMgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0ZMX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZSxcclxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBX1EgZXh0ZW5kcyBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FMX1EgZXh0ZW5kcyBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcclxuICBTQ19RIGV4dGVuZHMgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0NfUSBleHRlbmRzIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUkFfUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQV9RIGV4dGVuZHMgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGUsXHJcbiAgU1VfUSBleHRlbmRzIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGUsXHJcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSENfUSBleHRlbmRzIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZSxcclxuICBHQ1JJX1EgZXh0ZW5kcyBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxyXG4gIFNEX1EgZXh0ZW5kcyBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBzZWFyY2hBaXJwb3J0c0ZldGNoZXI6IEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXI8U0FfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlybGluZXNGZXRjaGVyOiBCYXNlU2VhcmNoQWlybGluZXNGZXRjaGVyPFNBTF9RPixcclxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByb3RlY3RlZCBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJvdGVjdGVkIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlOiBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2U8SEFfUT4sXHJcbiAgICBwcml2YXRlIGNpdGllc0ZldGNoZXI6IEJhc2VTZWFyY2hDaXR5RmV0Y2hlcjxTQ19RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFDaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFDaXR5RmV0Y2hlcjxTQ0NfUT4sXHJcbiAgICBwcml2YXRlIHBvc3Rjb2RlRmV0Y2hlcjogQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcjxTUF9RPixcclxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcclxuICAgIHByaXZhdGUgc2F2ZVVzZXJBZGRyZXNzVXBkYXRlcjogQmFzZVNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI8U1VBX1E+LFxyXG4gICAgcHJpdmF0ZSB1c2VyQWRkcmVzc2VzRmV0Y2hlcjogQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyPFNVX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcjogQmFzZUdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI8R1VDT19RPixcclxuICAgIHByaXZhdGUgc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyOiBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyPFNIQ19RPixcclxuICAgIHByaXZhdGUgZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcjogQmFzZUdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI8R0NSSV9RPixcclxuICAgIHByaXZhdGUgYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyOiBCYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXI8SVBWX1E+LFxyXG4gICAgcHJpdmF0ZSBkZXBvdEZldGNoZXI6IEJhc2VTZWFyY2hEZXBvdEZldGNoZXI8U0RfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXI8R09OX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZUZldGNoZXI6IEJhc2VDb25mZXJtYU9mZmljZUZldGNoZXI8Q09fUT4sXHJcbiAgICBwcml2YXRlIGJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI8RFVBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcjogQmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI8RFJTX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcjxTUlNfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjogQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjxVQ0FfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjogQmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPFNGU19RPixcclxuICAgIGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnQsXHJcbiAgICBsb3VuZ2VGZXRjaGVyOiBCYXNlTG91bmdlUXVvdGVGZXRjaGVyPFNMX1E+LFxyXG4gICAgcGFya2luZ0ZldGNoZXI6IEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyPFNQQV9RPixcclxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXHJcbiAgICBmbGlnaHRGZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPFNGTF9RPixcclxuICAgIGhvdGVsRmV0Y2hlcjogQmFzZUhvdGVsUXVvdGVGZXRjaGVyPFNIT19RPixcclxuICAgIGNhcmhpcmVGZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxTQ0hfUT4sXHJcbiAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXHJcbiAgICBjYWJoaXJlRmV0Y2hlcjogQmFzZUNhYmhpcmVRdW90ZUZldGNoZXI8U1RIX1E+LFxyXG4gICAgcmFpbEZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFNSQV9RPixcclxuICAgIGlybEZldGNoZXI6IEJhc2VJcmxRdW90ZUZldGNoZXI8U0lfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyPEdSU19RPixcclxuICAgIHByb3RlY3RlZCBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyOiBCYXNlR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjxHSVNTRl9RPixcclxuICAgIHByaXZhdGUgYmFzZVdlYlRva2VuU2VydmljZTogQmFzZVdlYlRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgcmlza0FsZXJ0c0ZldGNoZXI6IEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcjxHUkFfUT4sXHJcbiAgICBxdWlja2xpc3RGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyPFFMX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcjxHVVJTRl9RPixcclxuICAgIHByb3RlY3RlZCBnZXRSYWlsQ2FyZHNGZXRjaGVyOiBCYXNlR2V0UmFpbGNhcmRzRmV0Y2hlcjxHUkNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyOiBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI8R0NNVEZfUT4sXHJcbiAgICBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcclxuICAgIHB1YmxpYyBzZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyOiBCYXNlU2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlcjxTVUNCRj4sXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyOiBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyPFNJU19RPixcclxuICAgIHByb3RlY3RlZCBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcjogQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXI8R0lERl9RPixcclxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjogQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXI8R0ZGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXI6IEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjxHRlNNX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyOiBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcjxHUkxEX0Y+LFxyXG4gICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlcjogQmFzZUhvdGVsUnVsZXNGZXRjaGVyPEFIUl9RPixcclxuICAgIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBRlJfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyPEdVRlNGX1E+LFxyXG4gICAgcHJpdmF0ZSBkZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyOiBCYXNlRGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxERlNfUT4sXHJcbiAgICBwcml2YXRlIGVtYWlsQmFza2V0RmV0Y2hlcjogQmFzZUVtYWlsQmFza2V0RmV0Y2hlcjxFQl9GPixcclxuICAgIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxyXG4gICAgcHJpdmF0ZSBzZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXI6IEJhc2VTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXI8U09OX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXI8R0hUX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyPEdSUF9RPixcclxuICAgIHByaXZhdGUgZ2V0QWxsQWlybGluZXNGZXRjaGVyOiBCYXNlR2V0QWxsQWlybGluZXNGZXRjaGVyPEdBQV9RPixcclxuICAgIHByaXZhdGUgZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjxHQ0hQX1E+XHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnRW50ZXJwaXNlIHNlYXJjaCBzZXJ2aWNlIGJlaW5nIGluaXRlZCcpO1xyXG4gICAgdGhpcy5zZWFyY2hlcyA9IHtcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb3VuZ2VdOiBuZXcgTG91bmdlc0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgbG91bmdlRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GbGlnaHRdOiBuZXcgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBmbGlnaHRGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGFwcGx5RmxpZ2h0UnVsZXMsXHJcbiAgICAgICAgbW9kYWxTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuSG90ZWxdOiBuZXcgSG90ZWxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGhvdGVsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGVudmlyb25tZW50LFxyXG4gICAgICAgIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBodHRwQ2FsbFNlcnZpY2UsXHJcbiAgICAgICAgcXVpY2tsaXN0RmV0Y2hlcixcclxuICAgICAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgICAgICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclxyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhYl06IG5ldyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYWJoaXJlRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbmV3IElSTEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgaXJsRmV0Y2hlcixcclxuICAgICAgICBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyXHJcbiAgICAgICksXHJcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbmV3IEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5SYWlsXTogbmV3IFJhaWxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIHJhaWxGZXRjaGVyLFxyXG4gICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5FdXJvc3Rhcl06IG5ldyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgZXVyb3N0YXJGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApXHJcbiAgICB9O1xyXG4gICAgY29uc29sZS5sb2coJ05ld2x5IGNyZWF0ZWQgc2VhcmNoIG9iamVjdHM6ICcsIHRoaXMuc2VhcmNoZXMpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8XHJcbiAgICAgIFRyYXZlbGxlcltdXHJcbiAgICA+KEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUik7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgdXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJTZXJ2aWNlcy5zdWJzY3JpYmUoXHJcbiAgICAgIChzZXJ2aWNlczogVXNlclNlcnZpY2VzKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlcnZpY2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAgICAgICAob2JqZWN0czogU2VhcmNoT2JqZWN0cywga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAob2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldLmVuYWJsZWQgPVxyXG4gICAgICAgICAgICAgICAgISFzZXJ2aWNlcyAmJiAhIXNlcnZpY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY291bnRyaWVzKSkge1xyXG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYS5jTmFtZSA8IGIuY05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPiBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJhc2VXZWJUb2tlblNlcnZpY2UuYXV0b0xvZ291dENvbmZpZyA9IHRoaXMuZ2V0QXV0b0xvZ291dENvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5hbGxTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5yZXNldEFsbFNlYXJjaEl0ZW1zKCk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0QWxsU2VhcmNoSXRlbXMoKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgaXRlbT8ucmVzZXQoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVtb3ZlQWxsVHJhdmVsbGVycygpO1xyXG4gICAgdGhpcy5yZXNldFNlYXJjaE9iamVjdHMoKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlKFxyXG4gICAgdXNlcj86IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLkNhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Umlza0FsZXJ0cyhcclxuICAgIG1pbkxldmVsOiBncmFwaHFsVHlwZXMuUmlza0xldmVsLFxyXG4gICAgbWF4TGV2ZWw6IGdyYXBocWxUeXBlcy5SaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuUmlza0FsZXJ0W10+IHtcclxuICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5HZXRSaXNrQWxlcnRzUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIG1pbkxldmVsLFxyXG4gICAgICBtYXhMZXZlbCxcclxuICAgICAgY291bnRyeUlzb0NvZGVcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucmlza0FsZXJ0c0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdDogZ3JhcGhxbFR5cGVzLlJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBncmFwaHFsVHlwZXMuU2VhcmNoQWlycG9ydHMuVmFyaWFibGVzID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgICBpZiAoISFjb3VudHJ5Q29kZSkge1xyXG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNMb3VuZ2UgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0xvdW5nZSA9IGhhc0xvdW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc1BhcmtpbmcgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc1BhcmtpbmcgPSBoYXNQYXJraW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzRmFzdFRyYWNrID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBxdWVyeS5oYXNGYXN0VHJhY2sgPSBoYXNGYXN0VHJhY2s7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgYXMgdGhpcyBjcmVhdGVzIGR1cGxpY2F0ZSBhaXJwb3J0cyBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgICAvLyBpZiAocmVzdWx0cy5pYXRhTWF0Y2gpIHtcclxuICAgICAgICAgICAgLy8gICBnZW5lcmFsTWF0Y2hlcy5wdXNoKHJlc3VsdHMuaWF0YU1hdGNoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGdlbmVyYWxNYXRjaGVzXHJcbiAgICAgICAgICAgICAgICAvLyAuZmlsdGVyKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIHJldHVybiAhIWNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgPyBjb3VudHJ5Q29kZSA9PT0gYWlycG9ydC5kZXRhaWxzLmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBhaXJwb3J0O1xyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIC5tYXAoKGFpcnBvcnQ6IGdyYXBocWxUeXBlcy5BaXJwb3J0KTogT0JUQWlycG9ydERldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQudGVybWluYWxzKSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcmxpbmVzTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlybGluZXNEZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBxdWVyeTogZ3JhcGhxbFR5cGVzLlNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IGdyYXBocWxUeXBlcy5BaXJsaW5lUmVzdWx0KTogT0JUQWlybGluZXNEZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IGFpcmxpbmVzLmlhdGEsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmxpbmVzLm5hbWVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJwb3J0TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGNvbnN0IGNvbnZlcnQgPSAocmVzdWx0czogT0JUQWlycG9ydERldGFpbHNbXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IE9CVEFpcnBvcnREZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdC5kZXN0aW5hdGlvbixcclxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgICAgICAgIGFpcnBvcnQ6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmdldEFpcnBvcnRzTGlzdChcclxuICAgICAgdGVybSxcclxuICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgIGlzTG9hZGluZyxcclxuICAgICAgaGFzTG91bmdlLFxyXG4gICAgICBoYXNQYXJraW5nLFxyXG4gICAgICBoYXNGYXN0VHJhY2tcclxuICAgICkucGlwZShtYXAoY29udmVydCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBpc0NvbmZpcm1hPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbmZpcm1hKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dldENpdHlMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgIGlmIChjb3VudHJ5Q29kZSkge1xyXG4gICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFNlYXJjaENpdGllc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuY2l0aWVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBTZWFyY2hDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5jb29yZGluYXRlcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogcmVzdWx0LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBjaXR5TmFtZTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQ+ID1cclxuICAgICAgdGhpcy5jb25mZXJtYUNpdGllc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghcmVzdWx0cz8uc3VnZ2VzdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5zdWdnZXN0aW9ucy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgY2FyIGhpcmUgZGVwb3RzIGJhc2VkIG9uIGNpdHkgY29yZHNcclxuICAgKi9cclxuICBnZXRDYXJIaXJlRGVwb3RzKFxyXG4gICAgbGF0aXR1ZGU6IG51bWJlcixcclxuICAgIGxvbmdpdHVkZTogbnVtYmVyLFxyXG4gICAgcmFkaXVzPzogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxDYXJIaXJlRGVwb3RSZXN1bHRBcnJheT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSB9O1xyXG4gICAgaWYgKHJhZGl1cykge1xyXG4gICAgICBxdWVyeS5yYWRpdXMgPSByYWRpdXM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZGVwb3RGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIG9iczsgLy8gLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuXHJcbiAgICAvLyByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHBvc3Rjb2RlIGxvY2F0aW9ucywgdGhlc2Ugd2lsbCB1c2UgcGFydGlhbCBwb3N0Y29kZSxcclxuICAgKiAgZnVsbCBhbmQgdGhlbiBncmFiYmluZyB0aGVtIHdpbGwgbGV0IHVzIGZpbGwgaW4gdGhlIGFkZHJlc3MgZm9ybVxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoIGJ5IGUuZy4gJ3dhMTQnIHNob3VsZCBicmluZyBiYWNrLCBvdXIgb2ZmaWNlLCAnbTMzJyBzaG9pdWxkIGJyaW5nIGJhY2sgbXkgYWRkcnNcclxuICAgKi9cclxuICBnZXRQb3N0Y29kZUxpc3QodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKFJlZ0V4cHMuVUtfUE9TVENPREUudGVzdCh0ZXJtKSkge1xyXG4gICAgICBjb25zdCBzdWJzID0gdGhpcy5wb3N0Y29kZUZldGNoZXIuZmV0Y2hMaXN0KHsgcG9zdGNvZGU6IHRlcm0gfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdEFycmF5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcclxuXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRvU2VsZWN0ZWRQbGFjZXMoYWRkcmVzczogZ3JhcGhxbFR5cGVzLkFkZHJlc3MpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQbGFjZXMucHVzaChhZGRyZXNzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUGxhY2VCeUlkKHBsYWNlSWQ6IHN0cmluZyk6IGdyYXBocWxUeXBlcy5BZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IGdyYXBocWxUeXBlcy5Db25mZXJtYU9mZmljZU5hbWVzKTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLk9mZmljZSxcclxuICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIE9mZmljZSBsb2NhdGlvbnMgYmFzZWQgb24gc2VhcmNoIHRlcm0gZ2l2ZW5cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgc28gdGhhdCBpdCBhY3R1YWxseSBwZXJmb3JtcyBhIGh0dHAgY2FsbFxyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gd2Ugd2FudCB0byBzZWFyY2ggYnlcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldE9mZmljZUxvY2F0aW9ucyh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICAgICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgICByZXN1bHRzOiBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheVxyXG4gICAgICApOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgb2ZmaWNlOiByZXN1bHQuYWRkcmVzc2VzWzBdLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRpb25Mb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNUb2Q6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5yYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtLFxyXG4gICAgICAgICAgaGFzVG9kXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgPyByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbFN0YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SYWlsU3RhdGlvbj4ge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KS5waXBlKHRha2UoMSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHNlYXJjaElybFN0YXRpb25zTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaElybFN0YXRpb25zRmV0Y2hlclxyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xyXG4gICAgICAgICAgcXVlcnk6IHRlcm1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIG1hcChcclxuICAgICAgICAgICAgKHJlc3VsdHM6IGdyYXBocWxUeXBlcy5JcmxTdXBwbGllclN0YXRpb25bXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBncmFwaHFsVHlwZXMuSXJsU3VwcGxpZXJTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC5zdXBwbGllcn0pYCxcclxuICAgICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGhvdGVsIGxvY2F0aW9ucywgdGhlc2Ugc2hvdWxkIGJlIGNpdHksIG9mZmljZSwgYWlycG9ydCwgcmFpbHN0YXRpb25cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgZm9yIHRoZSBvdGhlciBsb2NhdGlvbiB0eXBlcywgbWF5IG5lZWQgdG8gbWVyZ2VNYXAgdGhlbSBvciBzb21lIG90aGVyIHJ4anMgbWFnaWNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICdNYW4nIHNob3VsZCBicmluZyBiYWNrLCBtYW5jaGVzdGVyLCBtYW5jaGVzdGVyIGFpcnBvcnQsIG1hbmNoZXN0ZXIgcGljYWRpbGx5LCBldGNcclxuICAgKi9cclxuICBnZXRIb3RlbExvY2F0aW9uc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmIChSZWdFeHBzLlVLX1BPU1RDT0RFLnRlc3QodGVybSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3N0Y29kZUxpc3QodGVybSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3VicyA9IGZvcmtKb2luKFtcclxuICAgICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgICAgICAgICAgdGVybSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlzTG9hZGluZyxcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VySGFzU2VydmljZVByb3ZpZGVyKFxyXG4gICAgICAgICAgICAgIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbCxcclxuICAgICAgICAgICAgICBTZXJ2aWNlUHJvdmlkZXIuQ29uZmlybWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDb25maXJtYU9mZmljZXModGVybSlcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbnNBbmRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQGRlc2MgLSByZW1vdmUgYSBzcGVjaWZpZWQgdHJhdmVsbGVyIGZyb20gdGhlIHNlbGVjdGVkIGFycmF5XHJcbiAgKiovXHJcbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXJUb1Rlc3Q6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZSBhbGwgdHJhdmVsbGVycyBjYWxsZWQhJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMudHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcikgJiZcclxuICAgICAgIXRoaXMuY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcclxuICAgICAgPyAxXHJcbiAgICAgIDogTUFYX1RSQVZFTExFUlM7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICBAZGVzYyAtIGhlbHBlciBmdW5jdGlvbiAtIGRldGVybWluZXMgaWYgYSBzZWxlY3RlZCB0cmF2ZWxsZXIgaXMgYWxyZWFkeSBhZGRlZCAtXHJcbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcclxuICAqKi9cclxuICB0cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cclxuICAgICAgVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJzLCB0cmF2ZWxsZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5pc1VzZXJGYXZvcml0ZVNldChVc2VyRmF2b3J1cml0ZS5Eb250VXNlVHJhdmVsbGVyUG9saWN5KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXVxyXG4gICAgICAgIC5ndWVzdCAvKiYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgIT09IHVzZXIuUGF4SWRcclxuICAgICk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xyXG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnJhaWxDYXJkcyA9IG5ldyBBcnJheShcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGhcclxuICAgICAgKS5maWxsKHsgbmFtZTogJycsIGNvZGU6ICcnIH0sIDAsIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxyXG4gICAqICAgdGhlIGhpZ2hlc3QgaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IHZhbHVlIG9mIHRoZSBzZWFyY2ggdHlwZSxcclxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cclxuICAgKiovXHJcbiAgZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPVxyXG4gICAgICB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcclxuICB9XHJcblxyXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcclxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8Z3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLCBncmFwaHFsVHlwZXMuQmFza2V0SXRlbT5cclxuICApOiBTZWFyY2hPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXHJcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPFxyXG4gICAgICBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUsXHJcbiAgICAgIGdyYXBocWxUeXBlcy5CYXNrZXRJdGVtXHJcbiAgICA+ID0ge30gYXMgUmVjb3JkPGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSwgZ3JhcGhxbFR5cGVzLkJhc2tldEl0ZW0+XHJcbiAgKTogSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuICYmIGl0ZW0ucHJpb3JpdHkgPCBoaWdoZXN0KSB7XHJcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBncmFwaHFsVHlwZXMuU2VydmljZVR5cGVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGhpZ2hlc3Q6IGl0ZW0ucHJpb3JpdHksIGN1cnJlbnRJdGVtOiBpdGVtIH07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLmNob3NlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9O1xyXG4gICAgICB9LFxyXG4gICAgICB7IGhpZ2hlc3Q6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW50SXRlbTogbnVsbCB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRPcHRpb25zKCk6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZVtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcclxuICAgICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2l0ZW1JbmRleF0/LmNob3Nlbikge1xyXG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN2O1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHNlbGVjdGVkIHRyYXZlbGxlcnMgY29udGFpbnMgYW55IGd1ZXN0cyB3aXRob3V0IGFsbCBvZiBkZXRhaWxzXHJcbiAgICovXHJcbiAgaGFzU2ltcGxlR3Vlc3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgLypyZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh7IGd1ZXN0LCBwaG9uZSwgbmF0aW9uYWxpdHksIGVtYWlsIH0pID0+IHtcclxuICAgICAgcmV0dXJuIGd1ZXN0ICYmICEoISFlbWFpbCAmJiAhIXBob25lICYmICEhbmF0aW9uYWxpdHkpO1xyXG4gICAgfSk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNldCB0aGUgc2VhcmNoIG9iamVjdHMgdG8gdGhlIGdldCBtZSB0aGVyZSBvYmplY3RzIC0gY2FsbGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZ2V0IG1lIHRoZXJlIHNlYXJjaGVzXHJcbiAgICovXHJcbiAgc2V0R2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnKysrIFNldHRpbmcgR2V0TWVUaGVyZSBTZWFyY2ggT2JqZWN0cyArKysnKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5nZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U2VhcmNoUGFyYW1zKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ1Jlc2V0aW5nIFNlYXJjaCBQYXJhbXMhJyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1xyXG4gICAgKTtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hlcykuZm9yRWFjaChcclxuICAgICAgKHByb2R1Y3RTZWFyY2hTZXJ2aWNlOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgcHJvZHVjdFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhblNlYXJjaCh0eXBlOiBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXHJcblxyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXHJcbiAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xyXG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdPy5jaG9zZW4gJiZcclxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShcclxuICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdPy5wcmlvcml0eVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2codHlwZSArICcgY2FuIGJlIHNlYXJjaGVkJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShwcmlvcml0eVZhbDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xyXG4gICAgcmV0dXJuIHByaW9yaXR5VmFsIDw9IHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGNvbmNhdGluYXRzIGFsbCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcyBhY3Jvc3MgYWxsIHNlbGVjdGVkIHR5cGVzICtcclxuICAgKiAgIHRyYXZlbGxlcnMgKG9yIHdpbGwgZG8gd2hlbiBpdCdzIGNvbXBsZXRlKSBUT0RPIC0gYWRkIEZsaWdodCwgUmFpbCBDYXJcclxuICAgKiovXHJcbiAgZ2V0QWxsRXJyb3JNZXNzYWdlcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjb25jYXR0ZWRFcnJvcnM6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICkucmVkdWNlKFxyXG4gICAgICAoYWNjdW06IHN0cmluZ1tdLCBbdHlwZSwgc2VhcmNoT2JqZWN0XTogW3N0cmluZywgU2VhcmNoT2JqZWN0XSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWFyY2hPYmplY3Q/LmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaCh0eXBlKSkge1xyXG4gICAgICAgICAgYWNjdW0ucHVzaChcclxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hlc1t0eXBlIGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZV1cclxuICAgICAgICAgICAgICAudmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZXJyb3JzLm5leHQoY29uY2F0dGVkRXJyb3JzKTtcclxuICAgIHJldHVybiBjb25jYXR0ZWRFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuU2VsZkJvb2s6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIShcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmIHRoaXMudHJhdmVsbGVyc0NvbnRhaW5Vc2VyKClcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMgYXMgdGhlIHVzZXIgc2hvdWxkIGJlIGxvYWRlZCBpbiBhcyBhIHRyYXZlbGxlciBvbiBsb2dpblxyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICAgJ0N1cnJlbnQgdXNlciBtdXN0IGJlIGEgdHJhdmVsbGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSkgfHxcclxuICAgICAgICAgICF0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQm9va2VyOlxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkNvbXBhbnk6XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLk9mZmljZTpcclxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5UbWM6XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuUm9vdDpcclxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPj0gMSkpIHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybXMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIHRoaXMuZ2V0QWxsRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICB0aGlzLmVycm9ycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5tZXNzYWdlcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgJiZcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZpbmQoKG9iajogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISFvYmogJiYgb2JqLnByaW9yaXR5ID09PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ICYmIG9iai5jaG9zZW5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hlcyh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubmV3U2VhcmNoU3RhcnRlZC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3Q7XHJcbiAgICBzZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XHJcbiAgICAgIHNlYXJjaE9iamVjdC5jaG9zZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hlcy5JTlRFUk5BVElPTkFMX1JBSUwpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdElybEZvcm0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgc2VhcmNoT2JqZWN0ICYmXHJcbiAgICAgICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnJlc3VsdFVybF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qSWYgdGhlIHNlYXJjaCBleGNlZWRzIHRoZSB0aW1lb3V0IHRpbWUsIGNhbmNlbCBzZWFyY2ggYW5kIHRlbGwgT0JUIHRoYXQgaXQncyB0aW1lZCBvdXQqL1xyXG4gICAgLy8gY29uc3QgY29udGV4dCA9IHRoaXM7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgaWYgKGNvbnRleHQuc2VhcmNoX2xvYWRpbmcpIHtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hUaW1lZE91dC5uZXh0KHRydWUpO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgdGhpcy5lbnZpcm9ubWVudC5zZWFyY2hUaW1lb3V0KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcChcclxuICAgICAgICAgIChzZWFyY2g6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXT8uY2hvc2VuXHJcbiAgICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxyXG4gICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xyXG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgM1xyXG4gICAgICA/IG9mKFtdKVxyXG4gICAgICA6IG9mKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIEFpcnBvdCcsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01BTicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTEgMlBaJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdMb25kb24gSGVhdGhyb3cnLFxyXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTG9uZG9uIEhlYXRocm93IEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ1RXNiAxRVcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzZXMoaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiBvZihbXHJcbiAgICAgIHtcclxuICAgICAgICBIb3VzZTogJ0NlY2lsIENvdXJ0JyxcclxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcclxuICAgICAgICBUb3duOiAnSGFsZScsXHJcbiAgICAgICAgUG9zdENvZGU6ICdXQTE1IDlQQicsXHJcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJBZGRyZXNzZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICBIb3VzZTogcmVzdWx0Lm51bWJlck9yTmFtZSxcclxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxyXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcclxuICAgICAgICAgICAgUG9zdENvZGU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJBZGRyZXNzQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG90ZWxDaGFpbihcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtIH0pO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2VOYW1lcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlTmFtZXNbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM/LnJlc3VsdHM/Lm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogZ3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlTmFtZXMpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZShvZmZpY2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuQ29uZmVybWFPZmZpY2VJbmZvPiB7XHJcbiAgICBpZiAob2ZmaWNlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmVybWFPZmZpY2VGZXRjaGVyLmZldGNoT25lKHsgb2ZmaWNlSWQgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogZ3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbEhvdGVsQ2hhaW5zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0SG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmFpbFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Z2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FySGlyZVByb2l2ZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQWlybGluZXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRBbGxBaXJsaW5lc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0QWxsQWlybGluZXNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsQ2FyZHNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIGNvbnN0IHJhaWxDYXJkcyA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgICAocmVzdWx0OiBncmFwaHFsVHlwZXMuUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiByZXN1bHQuY29kZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gcmFpbENhcmRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWlycG9ydEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFpcnBvcnRTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICBpZiAoY29kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUoeyBxdWVyeTogY29kZSB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQ6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPIEJFIE9WRVIgUklEREVOIEJZIE9CVCBTVUJDTEFTU0VTXHJcbiAgcHVibGljIGluaXRfc2VhcmNoX29iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBTRUFSQ0ggT0JKRUNUUyBGT1IgR0VUIE1FIFRIRVJFIERPT1IgMiBET09SICAgICAgICAgICpcclxuICAgKiBEaWZmZXJlbmNlKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBBbGwgb2JqZWN0cyBoYXZlIGEgcHJpb3JpdHkgb2YgMSBzbyB0aGF0IHRoZXkgYXJlICAgICpcclxuICAgKiBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBVcmxzIGNoYW5nZWQgdG8gZ2V0bWV0aGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBwcm90ZWN0ZWQgZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZ2V0cyBhbGwgc2VsZWN0ZWQgdHJhdmVsbGVyc1xyXG4gICAqICAgSW1wbGVtZW50ZWQgZm9yIHJhaWwgY2FyZCByZWFzb25zIGluIExVXHJcbiAgICoqL1xyXG4gIGdldFNlbGVjdGVkdHJhdmVsbGVycygpOiBUcmF2ZWxsZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnM7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgYXJyYXkgb2YgdmFsdWVzIGZyb20gQVBJIGFyZSBleHB0ZWN0ZWQgYW5kIGZ1bmN0aW9uIG1hbmlwdWxhdGUgdG8gY3JlYXRlIHRoZSBsaXN0XHJcbiAgICBbXCJNYWluXCJdXHJcbiAgICBbXCIxXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiXVxyXG4gICAgW1wiU291dGhcIiwgXCJOb3J0aFwiXVxyXG4gICovXHJcbiAgcHVibGljIHByb2Nlc3NUZXJtaW5hbHModGVybWluYWxzOiBzdHJpbmdbXSk6IFRlcm1pbmFsc1R5cGVbXSB7XHJcbiAgICBjb25zdCB0ZW1wVGVybWluYWw6IFRlcm1pbmFsc1R5cGVbXSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzEnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzInKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzMnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzQnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzUnKVxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgVGVybWluYWwgJHtpdGVtfWAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRlcm1pbmFscy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7dGVybWluYWxzWzBdfSBUZXJtaW5hbGAsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke2l0ZW19IFRlcm1pbmFsYCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVVc2VyQWRkcmVzcyhcclxuICAgIGFkZHJlc3M6IGdyYXBocWxUeXBlcy5TYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUoYWRkcmVzcylcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5Cb29rKHNlcnZpY2U6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuY2FuQm9vayhzZXJ2aWNlKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzUG9zdGNvZGVWYWlsZChwb3N0Y29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIudGVzdCh7IHBvc3Rjb2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIFN0YXJ0ICovXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhYiBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FiSGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhYkhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYWJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FiSGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FiSGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlycG9ydDogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNvdW50cnlDb2RlOiBudWxsLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSxcclxuICAgICAgZnJvbUFkZHJlc3M6IG51bGwsXHJcbiAgICAgIGZyb21TdGF0aW9uOiBudWxsLFxyXG4gICAgICBmcm9tTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgdG9BZGRyZXNzOiBudWxsLFxyXG4gICAgICB0b1N0YXRpb246IG51bGwsXHJcbiAgICAgIHRvTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgdmVoaWNsZVR5cGU6IGdyYXBocWxUeXBlcy5DYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxyXG4gICAgICB2aWFzRnJvbTogbnVsbCxcclxuICAgICAgdmlhc1RvOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhYkhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnZGVwYXJ0cyddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhciBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FySGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhckhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYXJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FySGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FySGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlyQ29uOiBudWxsLFxyXG4gICAgICBjYXJDbGFzczogbnVsbCxcclxuICAgICAgY2FyVHlwZTogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblZlbmRvcjogbnVsbCxcclxuICAgICAgY2hvc2VuRGlzdGFuY2U6ICc1JyxcclxuICAgICAgY2l0eURyb3BvZmY6IG51bGwsXHJcbiAgICAgIGNpdHlEcm9wb2ZmRGVwb3Q6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXA6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXBEZXBvdDogbnVsbCxcclxuICAgICAgZHJvcG9mZl9jb3VudHJ5OiAnR0InLFxyXG4gICAgICBkcm9wb2ZmX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBlc3RpbWF0ZWRNaWxlYWdlOiBudWxsLFxyXG4gICAgICBsb2NhdGlvblR5cGU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9jb3VudHJ5OiBudWxsLFxyXG4gICAgICBwaWNrdXBfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmZSYXc6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cFJhdzogbnVsbCxcclxuICAgICAgcmV0dXJuX3RvX3BpY2t1cDogdHJ1ZSxcclxuICAgICAgdHJhbnNtaXNzaW9uOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhckhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncGlja3VwX2RhdGV0aW1lJywgJ2Ryb3BvZmZfZGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZsaWdodCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEZsaWdodHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZsaWdodFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZsaWdodFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmxpZ2h0VGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogbnVsbCxcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZsaWdodFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEhvdGVsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEhvdGVsc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEhvdGVsc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlSG90ZWxRdWVyeSguLi5hcmdzOiBhbnkpOiBIb3RlbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgY2hlY2tpbl9kYXRlOiBtb21lbnQoKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudCgpLmFkZCgxLCAnZGF5Jykuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxyXG4gICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgIGRpc3RhbmNlOiA1LCAvLyBkZWZhdWx0IDUgbWlsZXMgcmFkaXVzXHJcbiAgICAgIGhvdGVsX2F2YWlsYWJpbGl0eTogbnVsbCxcclxuICAgICAgaG90ZWxfY2hhaW46IG51bGwsXHJcbiAgICAgIGhvdGVsX25hbWU6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uX3R5cGVfc2VsZWN0OiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXHJcbiAgICAgIGxvY2F0aW9uOiBudWxsLCAvLyBtaWdodCB3YW50IHRvIHNwbGl0IHRoaXMgb3V0IHRvIGNpdHksIGFpcnBvcnQsIG9mZmljZSwgcmFpbHN0YXRpb24gLSB0aGlzIHdpbGwgZG8gZm9yIG5vd1xyXG4gICAgICBub19vZl9vY2N1cGFudHM6IDEsIC8vIHNpbWlsYXJseSB0aGluayB0aGlzIGlzIGEgbWF4IG9mIDNcclxuICAgICAgbm9fb2Zfcm9vbXM6IDEsIC8vIG1heCBvZiA0IGluIG9sZCBzYWJzLCBub3Qgc3VyZSBoZXJlXHJcbiAgICAgIG9mZmljZTogbnVsbCxcclxuICAgICAgcG9zdGNvZGU6IG51bGwsXHJcbiAgICAgIHByZWZlcmVkX2hvdGVsc19vbmx5OiBmYWxzZSxcclxuICAgICAgdHJhaW5zU3RhdGlvbjogbnVsbFxyXG4gICAgfSBhcyBIb3RlbFRlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SG90ZWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnY2hlY2tpbl9kYXRlJywgJ2NoZWNrb3V0X2RhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIExvdW5nZXMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlTG91bmdlc1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IExvdW5nZXNUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgTG91bmdlc1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8TG91bmdlc1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFBhcmtpbmcgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hQYXJraW5nQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUGFya2luZ0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUGFya2luZ1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFBhcmtpbmdUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGNhclBhcmtlZEZvcllvdTogbnVsbCxcclxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgbWVldEFuZEdyZWV0OiBudWxsLFxyXG4gICAgICBvbkFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIG91dEZsaWdodE51bWJlcjogbnVsbCxcclxuICAgICAgcGFya0FuZFJpZGU6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRTdHJvbGw6IG51bGwsXHJcbiAgICAgIHJlY29tbWVuZGVkOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBQYXJraW5nVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxQYXJraW5nVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZScsICdkZXBhcnREYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VSYWlsUXVlcnkoLi4uYXJnczogYW55KTogUmFpbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IFJhaWxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhaXJwb3J0RXhwcmVzc1N0YXRpb246IG51bGwsXHJcbiAgICAgIGFwcGx5UmFpbGNhcmRzOiBmYWxzZSxcclxuICAgICAgY2FybmV0VGlja2V0OiBmYWxzZSxcclxuICAgICAgY2hvc2VuU2VhcmNoQ2xhc3M6IGdyYXBocWxUeXBlcy5SYWlsQ2xhc3MuQWxsLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBncmFwaHFsVHlwZXMuUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksXHJcbiAgICAgIGRpc2FibGVBdXRvRGlzY291bnRzOiBmYWxzZSxcclxuICAgICAgZXh0cmFUaW1lOiBmYWxzZSxcclxuICAgICAgaW5Cb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpc0FpcnBvcnRFeHByZXNzOiBmYWxzZSxcclxuICAgICAgbm9PZkFkdWx0czogMCxcclxuICAgICAgbm9PZkNoaWxkcmVuOiAwLFxyXG4gICAgICBvdXRib3VuZENyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICBvdXRCb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBwcmlvcml0aXNlQnlQcmljZTogZmFsc2UsXHJcbiAgICAgIHJldHVybkNyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICB0cmF2ZWxsaW5nRnJvbTogbnVsbCxcclxuICAgICAgdHJhdmVsbGluZ1RvOiBudWxsLFxyXG4gICAgICB2aWE6IGZhbHNlLFxyXG4gICAgICB2aWFMb2NhdGlvbjogbnVsbCxcclxuICAgICAgcmFpbENhcmRzOiBbXSxcclxuICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFJhaWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnaW5Cb3VuZERhdGVUaW1lJywgJ291dEJvdW5kRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBJcmxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcclxuICAgICAgam91cm5leVR5cGU6IGdyYXBocWxUeXBlcy5JcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LCAvLyBJUkxKb3VybmV5VHlwZSFcclxuICAgICAgY2xhc3M6IG51bGwsIC8vIElSTENsYXNzXHJcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFycml2YWxMb2NhdGlvbklkOiBudWxsLFxyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICByZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogdGltZSxcclxuICAgICAgaXJsRGlzY291bnRDYXJkczogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxJcmxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUnLCAnb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRXVyb3N0YXIgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge0V1cm9zdGFyVGVtcFBhcmFtc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRXVyb3N0YXJBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUV1cm9zdGFyUXVlcnkoLi4uYXJnczogYW55KTogRXVyb3N0YXJUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEV1cm9zdGFyVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybixcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEV1cm9zdGFyVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRmFzdFRyYWNrIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRmFzdFRyYWNrUXVlcnkoLi4uYXJnczogYW55KTogRmFzdFRyYWNrVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGxcclxuICAgIH0gYXMgRmFzdFRyYWNrVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGYXN0VHJhY2tUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qIENyZWF0ZSBRdWVyeSBEZWZhdWx0cyBFbmQgKi9cclxuXHJcbiAgc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0b0xvZ291dENvbmZpZygpIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3ZlcndyaXRlIGlmIHRoZSBPQlQgZGlzcGxheXMgYSBsaXN0IG9mIG9mZmljZXMgaW5zdGVhZCBvZiBzZWFyY2hpbmcgb24gdGhlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaG91bGRGZXRjaEFsbE9mZmljZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGlzRmxpZ2h0c0dyb3VwZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGdldENvdW50cnlGdWxsTmFtZUZyb21Db3VudHJ5Q29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZ1bGxOYW1lID0gJ1Vua25vd24nO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY291bnRyeSA9IHRoaXMuY291bnRyaWVzW2ldO1xyXG5cclxuICAgICAgaWYgKGNvdW50cnkuY0NvZGUgPT09IGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gY291bnRyeS5jTmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdWxsTmFtZTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJSZWNlbnRTZWFyY2hlcyhcclxuICAgIHNlcnZpY2VUeXBlPzogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgdGFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlY2VudFNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG4gIGRlbGV0ZUZhdm91cml0ZVNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlUmVjZW50U2VhcmNoKFxyXG4gICAgcXVlcnk6IGdyYXBocWxUeXBlcy5TYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgcXVlcnkgJiZcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmd1ZXN0KVxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHByZXZlbnQgaXQgc2F2aW5nIHJlY2VudCBzZWFyY2hlcyB3aXRoIGd1ZXN0cyAtIGF0bSBpdCdzIGVycm9yaW5nXHJcbiAgICAgIHRoaXMuYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyXHJcbiAgICAgICAgLnVwZGF0ZU9uZShxdWVyeSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvdmlkTWljcm9zaXRlVG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcihcclxuICAgICAgICAgICh2KSA9PiB2LmRlc3RpbmF0aW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTFcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWFyY2hUcmF2ZWxsZXJzKFxyXG4gICAgaW5wdXQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFRyYXZlbGxlcnNCeTogVHJhdmVsbGVyU2VhcmNoVHlwZXNcclxuICApOiBPYnNlcnZhYmxlPFRyYXZlbGxlcltdPiB7XHJcbiAgICBjb25zdCB0eXBlOiBncmFwaHFsVHlwZXMuQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuU2VsZkJvb2sgJiZcclxuICAgICAgdHlwZSAhPT0gZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuVHJhdmVsbGVyICYmXHJcbiAgICAgIGlucHV0Lmxlbmd0aCA+PSAxXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaW5wdXRXb3JkcyA9IGlucHV0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhbXFx3XSkrL2cpO1xyXG4gICAgICBjb25zdCBhcmdzOiBncmFwaHFsVHlwZXMuU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5jbG9uZShkYXRhKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZSA/IC0xIDogYS5zdXJuYW1lID4gYi5zdXJuYW1lID8gMSA6IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBmbGlnaHQ6IGdyYXBocWxUeXBlcy5JbnB1dEZsaWdodEpvdXJuZXlcclxuICApOiBPYnNlcnZhYmxlPEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5PiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodCB9KTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxMaXZlRGVwYXJ0dXJlcyhcclxuICAgIHN0YXRpb246IHN0cmluZyxcclxuICAgIGRhdGVUaW1lPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxTZWFyY2hSYWlsTGl2ZURlcGFydHVyZXNSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3RhdGlvbkNvZGU6IHN0YXRpb24sXHJcbiAgICAgIGRlcGFydERhdGVUaW1lOiBkYXRlVGltZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRTZWF0TWFwKFxyXG4gICAgZmxpZ2h0OiBncmFwaHFsVHlwZXMuSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuRmxpZ2h0U2VhdE1hcFJlc3BvbnNlW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodFNlYXRNYXBGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodDogZmxpZ2h0IH0pLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogZ3JhcGhxbFR5cGVzLkZsaWdodFNlYXRNYXBSZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGEucmVzdWx0cztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUZhdm91cml0ZVNlYXJjaChcclxuICAgIHNlYXJjaDogZ3JhcGhxbFR5cGVzLlNhdmVGYXZvdXJpdGVTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShzZWFyY2gpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmVybWFSb29tSW1hZ2VzKGhvdGVsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcclxuICAgIGlmIChob3RlbElkKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLmZldGNoTGlzdCh7IGhvdGVsSWQgfSk7XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtYWlsQmFza2V0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5CYXNrZXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmVtYWlsQmFza2V0RmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdElybEZvcm0oKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlckVtYWlsID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRW1haWwoKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XHJcbiAgICAgIHRoaXMuc2VhcmNoZXNbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTtcclxuICAgIGxldCBvbkJlaGFsZk9mOiBzdHJpbmc7XHJcbiAgICBsZXQgcGFzc2VuZ2Vyczoge307XHJcblxyXG4gICAgLy8gZ2V0IHBhc3NlbmdlcnNcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGFnZTogbnVtYmVyO1xyXG4gICAgICAgICAgaWYgKHRyYXZlbGxlci5kb2IpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZURpZmYgPSBNYXRoLmFicyhcclxuICAgICAgICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHRyYXZlbGxlci5kb2IpLmdldFRpbWUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhZ2UgPSBNYXRoLmZsb29yKHRpbWVEaWZmIC8gKDEwMDAgKiAzNjAwICogMjQpIC8gMzY1KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRyYXZlbGxlci5uYW1lLFxyXG4gICAgICAgICAgICBhZ2U6IGFnZT8udG9TdHJpbmcoKSB8fCAnTm90IHNwZWNpZmllZCcsXHJcbiAgICAgICAgICAgIGRpc2NvdW50Q2FyZDogYERpc2NvdW50IENhcmQgJHtpbmRleCArIDF9YCxcclxuICAgICAgICAgICAgbG95YWx0eUNhcmQ6IGBMb3lhbHR5IENhcmQgJHtpbmRleCArIDF9YFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBvbkJlaGFsZk9mID0gdHJhdmVsbGVyc1swXS5lbWFpbFxyXG4gICAgICAgICAgPyB0cmF2ZWxsZXJzWzBdLmVtYWlsXHJcbiAgICAgICAgICA6IGN1cnJlbnRVc2VyRW1haWw7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGdldCBqcmZyZWZlcmVuY2VcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgc2VhcmNoUGFyYW1zLnJlc3VsdHMuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpcmxKb3VybmV5OiBncmFwaHFsVHlwZXMuSXJsSm91cm5leU9wdGlvbnNbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmpyZlJlZmVyZW5jZSA9IGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuanJmUmVmZXJlbmNlICYmIHBhc3NlbmdlcnMpIHtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICB0cmFpbk51bWJlcjogc2VhcmNoUGFyYW1zLnRyYWluTnVtYmVyIHx8ICdBbnknLFxyXG4gICAgICAgIGRlcGFydHVyZVN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nRnJvbS5uYW1lLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdUby5uYW1lLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogc2VhcmNoUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgaW5ib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICBhZGRpdGlvbmFsSW5mbzpcclxuICAgICAgICAgIHNlYXJjaFBhcmFtcy5hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zIHx8ICdObyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucycsXHJcbiAgICAgICAgc2VydmljZUNsYXNzOiBzZWFyY2hQYXJhbXMuaXJsQ2xhc3MgfHwgJ0FueScsXHJcbiAgICAgICAgb2ZmbGluZVJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UsXHJcbiAgICAgICAgbm90aWZ5RW1haWw6IGN1cnJlbnRVc2VyRW1haWwsXHJcbiAgICAgICAgb25CZWhhbGZPZixcclxuICAgICAgICBwYXNzZW5nZXJzXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHBheWxvYWQpO1xyXG5cclxuICAgICAgdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdDogZ3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuT2ZmbGluZVJlcXVlc3REaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJyB9LFxyXG4gICAgICAgICAgICAgIHsganJmUmVmZXJlbmNlOiB0aGlzLmpyZlJlZmVyZW5jZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgeyBlcnJvcjogJ1VuYWJsZSB0byBzZW5kIG9mZmxpbmUgbm90aWZpY2F0aW9uJyB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZE9mZmxpbmVOb3RpZmljYXRpb24oXHJcbiAgICBqcmZSZWZlcmVuY2U6IGFueVxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlci5mZXRjaE9uZShqcmZSZWZlcmVuY2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q291bnRyaWVzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvdW50cmllcztcclxuICB9XHJcbn1cclxuIl19
|