@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
|
@@ -3,7 +3,7 @@ import moment from 'moment';
|
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
4
|
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
5
5
|
import { FareType, FlightCabinClass, FlightPassengerType, ServiceType } from '../types/graphql.types';
|
|
6
|
-
import { FlightDirectionEnum, OBTFlightCabinClass } from '../types/types';
|
|
6
|
+
import { DifferentInvokdedUserReasons, FlightDirectionEnum, OBTFlightCabinClass } from '../types/types';
|
|
7
7
|
import { DEFAULT_FLIGHT_FILTERS, FlightDisplayTypes } from '../interfaces/Iflight-enterprise-search';
|
|
8
8
|
import { FlightSearchType } from './flight-search-type.enum';
|
|
9
9
|
import { UserFavorurite } from './user-favourite.enum';
|
|
@@ -30,11 +30,10 @@ export var FlightSortTypes;
|
|
|
30
30
|
})(FlightSortTypes || (FlightSortTypes = {}));
|
|
31
31
|
export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
32
32
|
constructor(flightfetcher, helpers, userService, basketService, storageService, searchService, applyFlightRules, modalService) {
|
|
33
|
-
super(storageService, helpers);
|
|
33
|
+
super(storageService, helpers, searchService);
|
|
34
34
|
this.flightfetcher = flightfetcher;
|
|
35
35
|
this.userService = userService;
|
|
36
36
|
this.basketService = basketService;
|
|
37
|
-
this.searchService = searchService;
|
|
38
37
|
this.applyFlightRules = applyFlightRules;
|
|
39
38
|
this.modalService = modalService;
|
|
40
39
|
this.type = ServiceType.Flight;
|
|
@@ -600,6 +599,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
600
599
|
inlegsCount: 0,
|
|
601
600
|
dataSource: '',
|
|
602
601
|
preferred: false,
|
|
602
|
+
preferredMessage: '',
|
|
603
603
|
outboundFlightNumber: '',
|
|
604
604
|
operator: '',
|
|
605
605
|
operatorFull: '',
|
|
@@ -620,7 +620,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
620
620
|
}
|
|
621
621
|
// ! using a reduce because not all flights actually exist and we were seeing undefined in the flight list
|
|
622
622
|
brands[brand].forEach((flightNum) => {
|
|
623
|
-
var _a, _b;
|
|
623
|
+
var _a, _b, _c, _d, _e, _f;
|
|
624
624
|
const flight = groupedObject[flightNum];
|
|
625
625
|
if (flight) {
|
|
626
626
|
if (isOutBound || treatOutboundsAsOutbounds) {
|
|
@@ -640,7 +640,13 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
640
640
|
returnObject.maxPrice > maxprice
|
|
641
641
|
? returnObject.maxPrice
|
|
642
642
|
: maxprice;
|
|
643
|
-
|
|
643
|
+
returnObject.preferred =
|
|
644
|
+
((_a = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _a === void 0 ? void 0 : _a.companyPreferred) || ((_b = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _b === void 0 ? void 0 : _b.companyPreferred) ||
|
|
645
|
+
false;
|
|
646
|
+
returnObject.preferredMessage =
|
|
647
|
+
((_c = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _c === void 0 ? void 0 : _c.companyPreferredMessage) || ((_d = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _d === void 0 ? void 0 : _d.companyPreferredMessage) ||
|
|
648
|
+
'';
|
|
649
|
+
if ((_f = (_e = returnObject.classes[correctBrand]) === null || _e === void 0 ? void 0 : _e.flights) === null || _f === void 0 ? void 0 : _f.length) {
|
|
644
650
|
returnObject.classes[correctBrand].flights.push(flight);
|
|
645
651
|
returnObject.classes[correctBrand].minprice = Math.min(returnObject.classes[correctBrand].minprice, minprice);
|
|
646
652
|
returnObject.classes[correctBrand].maxprice = Math.max(returnObject.classes[correctBrand].maxprice, maxprice);
|
|
@@ -1039,6 +1045,101 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1039
1045
|
updateFromPreviousSearches(_previousItems) {
|
|
1040
1046
|
// Flights can not be search after other products so no defaults can be set.
|
|
1041
1047
|
}
|
|
1048
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
1049
|
+
const searchFlightsQuery = basketItem.searchQuery;
|
|
1050
|
+
if (searchFlightsQuery.outboundDate) {
|
|
1051
|
+
let outboundTimeWindow = searchFlightsQuery.outboundDepartureTimeWindow
|
|
1052
|
+
? searchFlightsQuery.outboundDepartureTimeWindow
|
|
1053
|
+
: searchFlightsQuery.outboundArrivalTimeWindow;
|
|
1054
|
+
this.outBoundDate = this.convertRecentSearchDateTime(searchFlightsQuery.outboundDate, outboundTimeWindow);
|
|
1055
|
+
}
|
|
1056
|
+
if (searchFlightsQuery.returnDate) {
|
|
1057
|
+
let returnTimeWindow = searchFlightsQuery.returnDepartureTimeWindow
|
|
1058
|
+
? searchFlightsQuery.returnDepartureTimeWindow
|
|
1059
|
+
: searchFlightsQuery.returnArrivalTimeWindow;
|
|
1060
|
+
this.inboundDate = this.convertRecentSearchDateTime(searchFlightsQuery.returnDate, returnTimeWindow);
|
|
1061
|
+
}
|
|
1062
|
+
this.fareType = searchFlightsQuery.fareType;
|
|
1063
|
+
this.maxConnections = searchFlightsQuery.maxConnections;
|
|
1064
|
+
if (searchFlightsQuery.outboundCabinClass) {
|
|
1065
|
+
this.cabinClass =
|
|
1066
|
+
searchFlightsQuery.outboundCabinClass;
|
|
1067
|
+
}
|
|
1068
|
+
if (searchFlightsQuery.returnCabinClass) {
|
|
1069
|
+
this.returnCabinClass =
|
|
1070
|
+
searchFlightsQuery.returnCabinClass;
|
|
1071
|
+
}
|
|
1072
|
+
this.includeNearbyAirports = searchFlightsQuery.includeNearbyAirports
|
|
1073
|
+
? true
|
|
1074
|
+
: false;
|
|
1075
|
+
this.chosenSearchType = searchFlightsQuery.returnTrip
|
|
1076
|
+
? FlightSearchType.return
|
|
1077
|
+
: FlightSearchType.oneWay;
|
|
1078
|
+
if (searchFlightsQuery.outboundDepartureTimeWindow) {
|
|
1079
|
+
this.outTimeCriteria = TimeWindow.Depart;
|
|
1080
|
+
}
|
|
1081
|
+
else if (searchFlightsQuery.outboundArrivalTimeWindow) {
|
|
1082
|
+
this.outTimeCriteria = TimeWindow.Arrive;
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
this.outTimeCriteria = TimeWindow.Anytime;
|
|
1086
|
+
}
|
|
1087
|
+
if (searchFlightsQuery.returnDepartureTimeWindow) {
|
|
1088
|
+
this.inTimeCriteria = TimeWindow.Depart;
|
|
1089
|
+
}
|
|
1090
|
+
else if (searchFlightsQuery.returnArrivalTimeWindow) {
|
|
1091
|
+
this.inTimeCriteria = TimeWindow.Arrive;
|
|
1092
|
+
}
|
|
1093
|
+
else {
|
|
1094
|
+
this.inTimeCriteria = TimeWindow.Anytime;
|
|
1095
|
+
}
|
|
1096
|
+
combineLatest([
|
|
1097
|
+
this.searchService.getAirportByCode(searchFlightsQuery.originAirport),
|
|
1098
|
+
this.searchService.getAirportByCode(searchFlightsQuery.destinationAirport)
|
|
1099
|
+
]).subscribe(([departLocation, arriveLocation]) => {
|
|
1100
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
1101
|
+
if (departLocation && arriveLocation) {
|
|
1102
|
+
this.departLocation = {
|
|
1103
|
+
destination: departLocation.iataMatch.name,
|
|
1104
|
+
gateway: departLocation.iataMatch.iata,
|
|
1105
|
+
terminals: this.searchService.processTerminals(departLocation.iataMatch.terminals),
|
|
1106
|
+
country: (_b = (_a = departLocation.iataMatch) === null || _a === void 0 ? void 0 : _a.locationDetails) === null || _b === void 0 ? void 0 : _b.country,
|
|
1107
|
+
postcode: (_d = (_c = departLocation.iataMatch) === null || _c === void 0 ? void 0 : _c.locationDetails) === null || _d === void 0 ? void 0 : _d.postcode,
|
|
1108
|
+
countryCode: (_f = (_e = departLocation.iataMatch) === null || _e === void 0 ? void 0 : _e.locationDetails) === null || _f === void 0 ? void 0 : _f.countryCode
|
|
1109
|
+
};
|
|
1110
|
+
this.arriveLocation = {
|
|
1111
|
+
destination: arriveLocation.iataMatch.name,
|
|
1112
|
+
gateway: arriveLocation.iataMatch.iata,
|
|
1113
|
+
terminals: this.searchService.processTerminals(arriveLocation.iataMatch.terminals),
|
|
1114
|
+
country: (_h = (_g = arriveLocation.iataMatch) === null || _g === void 0 ? void 0 : _g.locationDetails) === null || _h === void 0 ? void 0 : _h.country,
|
|
1115
|
+
postcode: (_k = (_j = arriveLocation.iataMatch) === null || _j === void 0 ? void 0 : _j.locationDetails) === null || _k === void 0 ? void 0 : _k.postcode,
|
|
1116
|
+
countryCode: (_m = (_l = arriveLocation.iataMatch) === null || _l === void 0 ? void 0 : _l.locationDetails) === null || _m === void 0 ? void 0 : _m.countryCode
|
|
1117
|
+
};
|
|
1118
|
+
if (searchFlightsQuery.preferredCarriers) {
|
|
1119
|
+
let carriers = searchFlightsQuery.preferredCarriers;
|
|
1120
|
+
const preferredCarriers = [];
|
|
1121
|
+
carriers.map((preferredCarry) => {
|
|
1122
|
+
this.searchService
|
|
1123
|
+
.getAirlinesList(preferredCarry)
|
|
1124
|
+
.subscribe((items) => {
|
|
1125
|
+
items.map((item) => {
|
|
1126
|
+
if (item.code === preferredCarry) {
|
|
1127
|
+
preferredCarriers.push(item);
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
this.preferredCarriers = preferredCarriers;
|
|
1131
|
+
});
|
|
1132
|
+
});
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
});
|
|
1136
|
+
// add Travellers
|
|
1137
|
+
if (basketItem.users) {
|
|
1138
|
+
basketItem.users.forEach((user) => {
|
|
1139
|
+
this.searchService.addTraveller(user);
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1042
1143
|
getTotalBaggage(result) {
|
|
1043
1144
|
let total = 0;
|
|
1044
1145
|
const parsedAdditional = JSON.parse(result.additional);
|
|
@@ -1276,21 +1377,30 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1276
1377
|
})));
|
|
1277
1378
|
};
|
|
1278
1379
|
const selectedRuleSummary = this._ruleActionSummary.dualSingleWhenSelected[(_b = this.selectedGroupFlight) === null || _b === void 0 ? void 0 : _b.journeyHash] || {};
|
|
1380
|
+
const hasField = (flight, field, def) => {
|
|
1381
|
+
return (this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
1382
|
+
'journeyWhenSelected',
|
|
1383
|
+
flight.journeyHash,
|
|
1384
|
+
field
|
|
1385
|
+
]) ||
|
|
1386
|
+
this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
1387
|
+
'whenSelectedAlone',
|
|
1388
|
+
flight.journeyHash,
|
|
1389
|
+
field
|
|
1390
|
+
]) ||
|
|
1391
|
+
this.helpers.fieldFromObject(selectedRuleSummary, [
|
|
1392
|
+
flight.journeyHash,
|
|
1393
|
+
field
|
|
1394
|
+
]) ||
|
|
1395
|
+
def);
|
|
1396
|
+
};
|
|
1279
1397
|
const setSelected = (flight) => {
|
|
1280
|
-
var _a
|
|
1398
|
+
var _a;
|
|
1281
1399
|
flight.selected = flight.uid === ((_a = this.selectedGroupFlight) === null || _a === void 0 ? void 0 : _a.uid);
|
|
1282
|
-
flight.unavailable =
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
flight.
|
|
1286
|
-
((_e = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _e === void 0 ? void 0 : _e.unavailableMessage) || ((_f = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _f === void 0 ? void 0 : _f.unavailableMessage) ||
|
|
1287
|
-
'';
|
|
1288
|
-
flight.requiresReason =
|
|
1289
|
-
((_g = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _g === void 0 ? void 0 : _g.requiresReason) || ((_h = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _h === void 0 ? void 0 : _h.requiresReason) || ((_j = selectedRuleSummary[flight.journeyHash]) === null || _j === void 0 ? void 0 : _j.requiresReason) ||
|
|
1290
|
-
false;
|
|
1291
|
-
flight.requiresReasonMessage =
|
|
1292
|
-
((_k = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _k === void 0 ? void 0 : _k.requiresReasonMessage) || ((_l = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _l === void 0 ? void 0 : _l.requiresReasonMessage) ||
|
|
1293
|
-
'';
|
|
1400
|
+
flight.unavailable = hasField(flight, 'unavailable', false);
|
|
1401
|
+
flight.unavailableMessage = hasField(flight, 'unavailableMessage', '');
|
|
1402
|
+
flight.requiresReason = hasField(flight, 'requiresReason', false);
|
|
1403
|
+
flight.requiresReasonMessage = hasField(flight, 'requiresReasonMessage', '');
|
|
1294
1404
|
return flight;
|
|
1295
1405
|
};
|
|
1296
1406
|
if (this.isGroupedFlights(this.fullResults)) {
|
|
@@ -1483,24 +1593,30 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1483
1593
|
}, selectedFlight.outboundFlights[0].dateTimeDeparting);
|
|
1484
1594
|
}
|
|
1485
1595
|
doBooking(intBasket, selectedFlight, schemaDetails, outboundDate, inboundDate) {
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1596
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1597
|
+
const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
|
|
1598
|
+
const booking = {
|
|
1599
|
+
adults: this.adults,
|
|
1600
|
+
basket: intBasket.id,
|
|
1601
|
+
children: this.children,
|
|
1602
|
+
co2PerItem,
|
|
1603
|
+
co2PerPassenger,
|
|
1604
|
+
currency: total.currency,
|
|
1605
|
+
detail: schemaDetails,
|
|
1606
|
+
price: total.price,
|
|
1607
|
+
searchQuery: this.resultQuery,
|
|
1608
|
+
service: sourceId.toString(),
|
|
1609
|
+
outboundDate
|
|
1610
|
+
};
|
|
1611
|
+
if (inboundDate) {
|
|
1612
|
+
booking.inboundDate = inboundDate;
|
|
1613
|
+
}
|
|
1614
|
+
const whatHappened = yield this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, selectedFlight.requiresReason);
|
|
1615
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
1616
|
+
this.performSearch();
|
|
1617
|
+
}
|
|
1618
|
+
return whatHappened;
|
|
1619
|
+
});
|
|
1504
1620
|
}
|
|
1505
1621
|
makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
|
|
1506
1622
|
return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
|
|
@@ -1512,7 +1628,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1512
1628
|
addFlightJourneysToBasket(flightQuote) {
|
|
1513
1629
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1514
1630
|
if (flightQuote.unavailable) {
|
|
1515
|
-
return Promise.resolve(
|
|
1631
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
1516
1632
|
}
|
|
1517
1633
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
1518
1634
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
@@ -1556,7 +1672,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1556
1672
|
}
|
|
1557
1673
|
return this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, flightQuote.requiresReason);
|
|
1558
1674
|
}
|
|
1559
|
-
return Promise.resolve(
|
|
1675
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel); // TODO should this throw an error?
|
|
1560
1676
|
});
|
|
1561
1677
|
}
|
|
1562
1678
|
setFlightDisplayType(displayType) {
|
|
@@ -1566,26 +1682,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1566
1682
|
_applyFilter() {
|
|
1567
1683
|
this.applyFilters(this.currentFilters, this.currentSort);
|
|
1568
1684
|
}
|
|
1569
|
-
openFlightFareRules(rules, flights) {
|
|
1685
|
+
openFlightFareRules(rules, flights, options = null, flightDetail = null) {
|
|
1570
1686
|
// first check if there are rules
|
|
1571
1687
|
const doCall = !Object.values(rules).find((rule) => rule.length);
|
|
1572
1688
|
if (doCall) {
|
|
1573
1689
|
const rulesFromCall = this.searchService.getFlightFareRules(flights[0]);
|
|
1574
1690
|
rulesFromCall.subscribe((data) => {
|
|
1575
|
-
this.modalService.open(ModalTypes.ModalFlightFareComponent,
|
|
1691
|
+
this.modalService.open(ModalTypes.ModalFlightFareComponent, options, {
|
|
1576
1692
|
rules: data.results[0],
|
|
1577
1693
|
from: flights[0].originAirport,
|
|
1578
|
-
to: flights[flights.length - 1].destinationAirport
|
|
1694
|
+
to: flights[flights.length - 1].destinationAirport,
|
|
1695
|
+
flight: flightDetail
|
|
1579
1696
|
});
|
|
1580
1697
|
}, (err) => {
|
|
1581
1698
|
console.log(err);
|
|
1582
1699
|
});
|
|
1583
1700
|
}
|
|
1584
1701
|
else {
|
|
1585
|
-
this.modalService.open(ModalTypes.ModalFlightFareComponent,
|
|
1702
|
+
this.modalService.open(ModalTypes.ModalFlightFareComponent, options, {
|
|
1586
1703
|
rules,
|
|
1587
1704
|
from: flights[0].originAirport,
|
|
1588
|
-
to: flights[flights.length - 1].destinationAirport
|
|
1705
|
+
to: flights[flights.length - 1].destinationAirport,
|
|
1706
|
+
flight: flightDetail
|
|
1589
1707
|
});
|
|
1590
1708
|
}
|
|
1591
1709
|
}
|
|
@@ -1737,33 +1855,54 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1737
1855
|
}
|
|
1738
1856
|
applyFavourite(fav) {
|
|
1739
1857
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1740
|
-
this.chosenSearchType = fav.multiDestination
|
|
1858
|
+
this.chosenSearchType = fav.multiDestination
|
|
1859
|
+
? FlightSearchType.multiCity
|
|
1860
|
+
: fav.returnTrip
|
|
1861
|
+
? FlightSearchType.return
|
|
1862
|
+
: FlightSearchType.oneWay;
|
|
1741
1863
|
if (this.chosenSearchType == FlightSearchType.multiCity) {
|
|
1742
1864
|
const multi = yield Promise.all(fav.multiDestination.map((a) => __awaiter(this, void 0, void 0, function* () {
|
|
1743
|
-
let destination = {
|
|
1744
|
-
|
|
1745
|
-
|
|
1865
|
+
let destination = {
|
|
1866
|
+
date: undefined,
|
|
1867
|
+
dest: undefined,
|
|
1868
|
+
orig: undefined
|
|
1869
|
+
};
|
|
1870
|
+
destination.orig = yield this.searchService
|
|
1871
|
+
.getAirportsList(a.orig)
|
|
1872
|
+
.toPromise()
|
|
1873
|
+
.then((origResults) => {
|
|
1874
|
+
return origResults.find((b) => b.gateway == a.orig);
|
|
1746
1875
|
});
|
|
1747
|
-
destination.dest = yield this.searchService
|
|
1748
|
-
|
|
1876
|
+
destination.dest = yield this.searchService
|
|
1877
|
+
.getAirportsList(a.dest)
|
|
1878
|
+
.toPromise()
|
|
1879
|
+
.then((destResults) => {
|
|
1880
|
+
return destResults.find((b) => b.gateway == a.dest);
|
|
1749
1881
|
});
|
|
1750
1882
|
return destination;
|
|
1751
1883
|
})));
|
|
1752
1884
|
this.multiDestination = multi;
|
|
1753
1885
|
}
|
|
1754
1886
|
else {
|
|
1755
|
-
this.searchService
|
|
1756
|
-
|
|
1887
|
+
this.searchService
|
|
1888
|
+
.getAirportsList(fav.originAirport)
|
|
1889
|
+
.subscribe((results) => {
|
|
1890
|
+
this.departLocation = results.find((a) => a.gateway == fav.originAirport);
|
|
1757
1891
|
});
|
|
1758
|
-
this.searchService
|
|
1759
|
-
|
|
1892
|
+
this.searchService
|
|
1893
|
+
.getAirportsList(fav.destinationAirport)
|
|
1894
|
+
.subscribe((results) => {
|
|
1895
|
+
this.arriveLocation = results.find((a) => a.gateway == fav.destinationAirport);
|
|
1760
1896
|
});
|
|
1761
1897
|
}
|
|
1762
1898
|
this.cabinClass = fav.outboundCabinClass[0];
|
|
1763
|
-
this.returnCabinClass =
|
|
1899
|
+
this.returnCabinClass =
|
|
1900
|
+
this.chosenSearchType != FlightSearchType.return
|
|
1901
|
+
? null
|
|
1902
|
+
: fav.returnCabinClass[0];
|
|
1764
1903
|
this.includeNearbyAirports = fav.includeNearbyAirports;
|
|
1765
|
-
this.adults = fav.passengers.filter((a) => a.type ==
|
|
1766
|
-
this.children = fav.passengers.filter((a) => a.type ==
|
|
1904
|
+
this.adults = fav.passengers.filter((a) => a.type == 'ADULT').length;
|
|
1905
|
+
this.children = fav.passengers.filter((a) => a.type == 'CHILD').length;
|
|
1767
1906
|
// this.preferredCarriers = fav.preferredCarriers.map((a: any) => {
|
|
1768
1907
|
// })
|
|
1769
1908
|
});
|
|
@@ -1785,4 +1924,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1785
1924
|
}
|
|
1786
1925
|
FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
|
|
1787
1926
|
FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
|
|
1788
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsbUJBQW1CLEVBWW5CLG1CQUFtQixFQU1wQixNQUFNLGdCQUFnQixDQUFDO0FBVXhCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBR25CLE1BQU0seUNBQXlDLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBYW5CLE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsa0NBQW9CLENBQUE7SUFDcEIsa0NBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFVWDtBQVZELFdBQVksZUFB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Q0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBN2xGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgRmxpZ2h0VGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKChfdXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtcclxuICAgICAgICBUaW1lV2luZG93LkFueXRpbWUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5BcnJpdmUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgXSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xyXG4gICAgICB0aGlzLmZsaWdodE9wZXJhdG9ycy5uZXh0KFt7IGNvZGU6ICdCQScsIG5hbWU6ICdCcml0aXNoIEFpcndheXMnIH1dKTsgLy8gRmV0Y2ggdGhlc2UgZnJvbSBEQlxyXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG5cclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0XHJcbiAgKTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBpZiAoIXJlc3VsdHMpIHtcclxuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xyXG4gICAgICB0aGlzLm11bHRpID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAge1xyXG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICB9LFxyXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcclxuICAgIHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnMpO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICByZXN1bHRzLmpvdXJuZXlzLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxyXG4gICAgICAoXHJcbiAgICAgICAgcHJldmlvdXNJdGVtczoge1xyXG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ10gPVxyXG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzSXRlbXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xyXG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMuaW5ib3VuZCksXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kdXJhbFNpbmdsZUZpbHRlci5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwge1xyXG4gICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcclxuICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcclxuICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxyXG4gICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICBjb25zdCByZXR1cm5zID0gKFxyXG4gICAgICAgIChyZXN1bHRzLmpvdXJuZXlzIGFzIHVua25vd24gYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSkgfHwgW11cclxuICAgICAgKS5yZWR1Y2UoXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IChyZXN1bHRzLmdyb3VwZWQgfHwgW10pLnJlZHVjZShcclxuICAgICAgICB0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhyZXR1cm5zKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFPdXRib3VuZDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPSAoXHJcbiAgICAgICAgcmVzdWx0cy5ncm91cGVkIHx8IFtdXHJcbiAgICAgIClcclxuICAgICAgICAucmVkdWNlKHRoaXMubWFrZUdyb3VwZWRPYmplY3RzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkdWFsRGF0YUluYm91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5pbmJvdW5kLCB0cnVlKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0MTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEyID0gWy4uLnJldHVybkRhdGEsIC4uLmR1YWxEYXRhT3V0Ym91bmQsIC4uLmR1YWxEYXRhSW5ib3VuZF07XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzZWQgR3JvdXBlZCBkYXRhJywgZGF0YTIpO1xyXG4gICAgICByZXR1cm4gZGF0YTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cyA/IFtyZXN1bHRzXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG1ha2VHcm91cGVkT2JqZWN0cyhcclxuICAgIGdyb3VwZWRPYmplY3Q6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgIHRyZWF0T3V0Ym91bmRzQXNPdXRib3VuZHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYWNjOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSxcclxuICAgICAgaXRlbTogR3JvdXBlZEZpZWxkc0ZyYWdtZW50XHJcbiAgICApOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzT3V0Qm91bmQgPSBpdGVtLmJvdW5kSW5kaWNhdG9yID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kO1xyXG4gICAgICBjb25zdCByZXR1cm5PYmplY3Q6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9IHtcclxuICAgICAgICB0eXBlOiAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JyxcclxuICAgICAgICBkaXJlY3Rpb246IGl0ZW0uYm91bmRJbmRpY2F0b3IsXHJcbiAgICAgICAgY2xhc3Nlczoge1xyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0OiAnJyxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXBhcnREYXRlVGltZTogJycsXHJcbiAgICAgICAgYXJyaXZhbERhdGVUaW1lOiAnJyxcclxuICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgb3V0bGVnczogbnVsbCxcclxuICAgICAgICBpbmxlZ3M6IG51bGwsXHJcbiAgICAgICAgb3V0bGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGlubGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGRhdGFTb3VyY2U6ICcnLFxyXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIG9wZXJhdG9yOiAnJyxcclxuICAgICAgICBvcGVyYXRvckZ1bGw6ICcnLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIGlzUmV0dXJuOiBmYWxzZSxcclxuICAgICAgICBtaW5QcmljZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgICAgbWF4UHJpY2U6IDAsXHJcbiAgICAgICAgY28yUGVySXRlbTogMCxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IDAsXHJcbiAgICAgICAgZ2lkOiBpdGVtLnJlZmVyZW5jZUlEXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJyYW5kczogTWF0Y2hpbmdGbGlnaHRzID0gaXRlbS5mbGlnaHRzO1xyXG5cclxuICAgICAgT2JqZWN0LmtleXMoYnJhbmRzKVxyXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiBrZXlbMF0gIT09ICdfJylcclxuICAgICAgICAuZm9yRWFjaCgoYnJhbmQ6IEZsaWdodEdyb3VwcykgPT4ge1xyXG4gICAgICAgICAgaWYgKCFicmFuZHNbYnJhbmRdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAhIHVzaW5nIGEgcmVkdWNlIGJlY2F1c2Ugbm90IGFsbCBmbGlnaHRzIGFjdHVhbGx5IGV4aXN0IGFuZCB3ZSB3ZXJlIHNlZWluZyB1bmRlZmluZWQgaW4gdGhlIGZsaWdodCBsaXN0XHJcbiAgICAgICAgICBicmFuZHNbYnJhbmRdLmZvckVhY2goKGZsaWdodE51bTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodCA9IGdyb3VwZWRPYmplY3RbZmxpZ2h0TnVtXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmbGlnaHQpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNPdXRCb3VuZCB8fCB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVySXRlbSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlclBhc3NlbmdlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RCcmFuZDogT0JURmxpZ2h0Q2FiaW5DbGFzcyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMuRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgIGJyYW5kLFxyXG4gICAgICAgICAgICAgICAgICAhIWZsaWdodC5iYXNlRmFyZUlkICYmIGZsaWdodC5iYXNlRmFyZUlkICE9PSBmbGlnaHQudWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnByaWNlID0gTWF0aC5mbG9vcihmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heHByaWNlID0gTWF0aC5jZWlsKGZsaWdodC50b3RhbC5wcmljZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1pblByaWNlID1cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA8IG1pbnByaWNlXHJcbiAgICAgICAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0Lm1pblByaWNlXHJcbiAgICAgICAgICAgICAgICAgIDogbWlucHJpY2U7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5tYXhQcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPiBtYXhwcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5tYXhQcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1heHByaWNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICBpc0dyb3VwZWRGbGlnaHRzKFxyXG4gICAgdG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcclxuICAgIHJldHVybiB0b1Rlc3RbMF0/LnR5cGUgPT09ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgdGhlIHJlc3VsdHMsIHRoZW4gc29ydCB0aGUgcmVtYWluZGVyXHJcbiAgICogQHRvZG8gLSBBZGQgZmlsdGVycyBmb3IgdHJhdmVsIHBvbGljeSwgZmFyZSB0eXBlcyBhbmQgYW5jaWxsaWFyaWVzXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHNvcnRWYWx1ZTogRmxpZ2h0U29ydFR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gZmlsdGVycztcclxuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIEFwcGx5aW5nIEZpbHRlcnMgdG8gZmxpZ2h0czogJywgZmlsdGVycywgJyArKysnKTtcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXHJcbiAgICAgIGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sXHJcbiAgICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxyXG4gICAgKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICAgID8gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmluYm91bmRGbGlnaHRzPy5sZW5ndGhcclxuICAgICAgICA/IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNIb3VyQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc1RpbWVCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgLy8gbm93IGF0dGVtcHQgdG8gZ2V0IHRoZSBtaW4gLSBtYXkgbmVlZCB0byBub3JtYWxpc2UgdGhpc1xyXG4gICAgICAgIGNvbnN0IHZhbDIgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnbWludXRlJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKFxyXG4gICAgICAgICAgYCR7dmFsfS4ke3RoaXMuaGVscGVycy5ub3JtYWxpc2VNaW51dGVUb0Jhc2UxMCh2YWwyKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZykgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID09PSB0b1Rlc3Q7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XHJcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgY29uc3QgaW5EdWFsSXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5zdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoID09PVxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnSU5CT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlLm1hcChcclxuICAgICAgICAgICAgKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSlcclxuICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpXHJcbiAgICApO1xyXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBncm91cEluZGV4OiBudW1iZXJcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBpbkl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgICAgXSB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udW5hdmFpbGFibGUgfHxcclxuICAgICAgICBzZWxlY3RlZFJ1bGVTdW1tYXJ5W2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG5cclxuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb24gfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnJlcXVpcmVzUmVhc29uIHx8XHJcbiAgICAgICAgc2VsZWN0ZWRSdWxlU3VtbWFyeVtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbiB8fFxyXG4gICAgICAgIGZhbHNlO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb25NZXNzYWdlIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgfHxcclxuICAgICAgICAnJztcclxuXHJcbiAgICAgIHJldHVybiBmbGlnaHQ7XHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNHcm91cGVkRmxpZ2h0cyh0aGlzLmZ1bGxSZXN1bHRzKSkge1xyXG4gICAgICBjb25zdCBncm91cGVkRmxpZ2h0czogR3JvdXBGbGlnaHRzID0gdGhpcy5fZ3JvdXBlZC5maW5kKFxyXG4gICAgICAgIChpdGVtOiBHcm91cEZsaWdodHMpID0+IGl0ZW0ucmVmZXJlbmNlSUQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgLmNsb25lPEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdPih0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDE7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCk6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVySXRpbmVyYXJpZXMgPVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICA/IG91dEZpbHRlckl0aW5lcmFyaWVzXHJcbiAgICAgICAgICAgICAgICAgIDogcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcclxuICAgICAgICAgICAgICAgICAgPyBpbkR1YWxGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IGluRmlsdGVySXRpbmVyYXJpZXM7XHJcblxyXG4gICAgICAgICAgICAgIHJlc3VsdDIuY2xhc3NlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3VsdDIuY2xhc3NlcykucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPixcclxuICAgICAgICAgICAgICAgICAgW2tleSwgdmFsdWVdOiBbT0JURmxpZ2h0Q2FiaW5DbGFzcywgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3NdXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmZsaWdodHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEpvdXJuZXlzID0gdmFsdWUuZmxpZ2h0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiAhIWZsaWdodEl0aW5lcmFyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRGbGlnaHRzPy5mbGlnaHRzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLk9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0gfHwgW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJJdGluZXJhcmllcylcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoc2V0U2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEpvdXJuZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFjY3VtW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGlnaHRzOiBmaWx0ZXJlZEpvdXJuZXlzXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge30gYXMgUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0MiAmJiBPYmplY3Qua2V5cyhyZXN1bHQyLmNsYXNzZXMpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnNvcnQodGhpcy5fc29ydEdyb3VwZWRSb3V0aW5lc1tzb3J0VmFsdWVdKSBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzXHJcbiAgICAgICAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgICAubWFwKChyZXN1bHQ0OiBGbGlnaHRBbGxRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdKb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5mbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChvdXRGbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IGZpbHRlcnMuZmxpZ2h0TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChpbkZsaWdodCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5GbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cyB8fCBpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5Kb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3SW5Kb3VybmV5cyA9IG5ld0luSm91cm5leXMuZmlsdGVyKGluRmlsdGVySXRpbmVyYXJpZXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSB0aGlzLm1lcmdlT3V0SW5Cb3VuZChuZXdKb3VybmV5cywgbmV3SW5Kb3VybmV5cyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0pvdXJuZXlzLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIGpvdXJuZXlzOiA8RmxpZ2h0SXRpbmVyYXJ5W10+bmV3Sm91cm5leXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVyZ2VPdXRJbkJvdW5kKFxyXG4gICAgb3V0Ym91bmQ6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID0gT2JqZWN0LnZhbHVlcyhcclxuICAgICAgWy4uLm91dGJvdW5kLCAuLi5pbmJvdW5kXS5yZWR1Y2UoKHJlc3VsdCwgeyB1aWQsIC4uLnJlc3QgfSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0W3VpZF0pIHtcclxuICAgICAgICAgIHJlc3VsdFt1aWRdID0ge1xyXG4gICAgICAgICAgICAuLi4ocmVzdWx0W3VpZF0gfHwge30pLFxyXG4gICAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICAgIC4uLnJlc3RcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBmbGlnaHRzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgam91cm5leXMgPSAocmVzdWx0c1swXSBhcyBGbGlnaHRBbGxRdW90ZVJlc3VsdCkuam91cm5leXM7XHJcbiAgICBpZiAoIWpvdXJuZXlzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEZsaWdodChcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICAgIGdyb3VwSWQ6IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkgJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICApIHtcclxuICAgICAgLy8gVE9ETyBiZWNvdXNlIHBvcC11cCBpcyBub3QgcmVhZHkgSSBjb21tZW50ZWQgdGhlIGNvZGUuXHJcbiAgICAgIC8vIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oIE1vZGFsVHlwZXMuRmxpZ2h0RXh0cmFzRGlhbG9nQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0sIHsgZmxpZ2h0OiBzZWxlY3RlZEZsaWdodCB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCB8fFxyXG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IC0xO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gZ3JvdXBJZDtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkID0gIXNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnb3V0Ym91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnaW5ib3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQpO1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdXBkYXRlVHJhdmVsUG9saWNpZXMoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgfHxcclxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuam91cm5leUhhc2hcclxuICAgICAgXSB8fFxyXG4gICAgICAhdGhpcy5tdWx0aSB8fFxyXG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoYWNjOiBGbGlnaHRJdGluZXJhcnlbXSwgaXRlbTogRmxpZ2h0TXVsdGkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSxcclxuICAgICAgW11cclxuICAgICk7XHJcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xyXG4gICAgICAgIC5mZXRjaE9uZSh7XHJcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXHJcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHMoXHJcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnksXHJcbiAgICAgICAgICAgICAgcnVsZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYm9va1NpbmdsZUZsaWdodChcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApIHtcclxuICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICBpbnRCYXNrZXQsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICksXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb0Jvb2tpbmcoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxyXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gc2VsZWN0ZWRGbGlnaHQ7XHJcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgYm9va2luZyxcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQucmVxdWlyZXNSZWFzb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMocnVsZXM6IEZhcmVDb25kaXRpb25zLCBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiB2b2lkIHtcclxuICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBydWxlc1xyXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoXHJcbiAgICAgIChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSk6IG51bWJlciA9PiBydWxlLmxlbmd0aFxyXG4gICAgKTtcclxuICAgIGlmIChkb0NhbGwpIHtcclxuICAgICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICAgICAgZmxpZ2h0c1swXSBhcyBJbnB1dEZsaWdodEpvdXJuZXlcclxuICAgICAgKTtcclxuICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcclxuICAgICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICBydWxlcyxcclxuICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcclxuICBnZXRUZXJtc0FuZENvbmQoZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb24gPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSA6IGZhdi5yZXR1cm5UcmlwID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheVxyXG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSl7XHJcbiAgICAgIGNvbnN0IG11bHRpID0gYXdhaXQgUHJvbWlzZS5hbGwoZmF2Lm11bHRpRGVzdGluYXRpb24ubWFwKGFzeW5jIChhOiB7ZGF0ZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcsIG9yaWc6IHN0cmluZ30pID0+IHtcclxuICAgICAgICBsZXQgZGVzdGluYXRpb246IHtkYXRlOiBtb21lbnQuTW9tZW50LCBkZXN0OiBhbnksIG9yaWc6IGFueX0gPSB7IGRhdGU6IHVuZGVmaW5lZCwgZGVzdDogdW5kZWZpbmVkLCBvcmlnOiB1bmRlZmluZWR9XHJcbiAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKS50b1Byb21pc2UoKS50aGVuKG9yaWdSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAob3JpZ1Jlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5vcmlnKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0KS50b1Byb21pc2UoKS50aGVuKGRlc3RSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5kZXN0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXHJcbiAgICAgIH0pKVxyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2Lm9yaWdpbkFpcnBvcnQpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2Lm9yaWdpbkFpcnBvcnQpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmRlc3RpbmF0aW9uQWlycG9ydCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChhID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXVxyXG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5jaG9zZW5TZWFyY2hUeXBlICE9IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuID8gbnVsbCA6IGZhdi5yZXR1cm5DYWJpbkNsYXNzWzBdXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSBcIkFEVUxUXCIpLmxlbmd0aFxyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gXCJDSElMRFwiKS5sZW5ndGhcclxuICAgIC8vIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBmYXYucHJlZmVycmVkQ2FycmllcnMubWFwKChhOiBhbnkpID0+IHtcclxuICAgICAgXHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogSUZsaWdodFNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5OlxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm11bHRpRGVzdGluYXRpb25EZXRhaWwgPSB0aGlzLm11bHRpRGVzdGluYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm46XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb25EZXRhaWwgPSB0aGlzLmRlcGFydExvY2F0aW9uO1xyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uRGV0YWlsID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1927
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVluQixtQkFBbUIsRUFNcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2hELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQWFuQixNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLGtDQUFvQixDQUFBO0lBQ3BCLGtDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBVVg7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LGdCQUFnQixFQUFFO1lBQzdCLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDN0IsV0FBVyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0QsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzdCLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDMUIsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUN2RCxNQUFNO1NBQ1Q7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOztBQXJ3RmUsNkNBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLDhDQUF1QixHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFnZ2FnZUFsbG93YW5jZSxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBEZXN0aW5hdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25FbnRyeSxcclxuICBGYXJlQ29uZGl0aW9ucyxcclxuICBGYXJlVHlwZSxcclxuICBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeSxcclxuICBGbGlnaHRKb3VybmV5LFxyXG4gIEZsaWdodFBhc3Nlbmdlck9iamVjdCxcclxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxyXG4gIEdyb3VwZWRGaWVsZHNGcmFnbWVudCxcclxuICBHcm91cEZsaWdodHMsXHJcbiAgSW5wdXRGbGlnaHRKb3VybmV5LFxyXG4gIEl0aW5lcmFyeVN1bW1hcnksXHJcbiAgTWF0Y2hpbmdGbGlnaHRzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT4sXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogRmxpZ2h0VGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXNcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoX3VzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVDcml0ZXJpYU9wdGlvbnMubmV4dChbXHJcbiAgICAgICAgVGltZVdpbmRvdy5Bbnl0aW1lLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuQXJyaXZlLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgIF0pOyAvLyBUT0RPIHVwZGF0ZSB3aXRoIGFueSBVRnNcclxuICAgICAgdGhpcy5mbGlnaHRPcGVyYXRvcnMubmV4dChbeyBjb2RlOiAnQkEnLCBuYW1lOiAnQnJpdGlzaCBBaXJ3YXlzJyB9XSk7IC8vIEZldGNoIHRoZXNlIGZyb20gREJcclxuICAgICAgdGhpcy51cGRhdGVBdmFsaWFibGVDbGFzc2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLm5lZ290aWF0ZWQgPVxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPT09IEZhcmVUeXBlLk5lZ290aWF0ZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdFxyXG4gICk6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgaWYgKCFyZXN1bHRzKSB7XHJcbiAgICAgIHRoaXMuX2dyb3VwZWQgPSBbXTtcclxuICAgICAgdGhpcy5tdWx0aSA9IFtdO1xyXG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZ3JvdXBlZCA9IHJlc3VsdHMuZ3JvdXBlZCB8fCBbXTtcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIHtcclxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICBkdWFsU2luZ2xlV2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cclxuICAgICAgfSxcclxuICAgICAgcmVzdWx0cy5ydWxlQWN0aW9uU3VtbWFyeVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMubXVsdGk7XHJcbiAgICB0aGlzLnNldEZsaWdodERpc3BsYXlUeXBlKEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zKTtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgICAgcmVzdWx0cy5qb3VybmV5cyxcclxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICAgKTtcclxuICAgIHRoaXMuZmlsdGVycy5uZXh0KHRoaXMuY3VycmVudEZpbHRlcnMpO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLnJlc3VsdFF1ZXJ5LndpdGhHcm91cGVkO1xyXG4gICAgY29uc3QgZHVhbFNpbmdsZXMgPSByZXN1bHRzLm11bHRpLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByZXZpb3VzSXRlbXM6IHtcclxuICAgICAgICAgIG91dGJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XHJcbiAgICAgICAgICBpbmJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XHJcbiAgICAgICAgfSxcclxuICAgICAgICBuZXh0SXRlbTogSXRpbmVyYXJ5U3VtbWFyeVxyXG4gICAgICApID0+IHtcclxuICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddID1cclxuICAgICAgICAgIG5leHRJdGVtLnJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgICAgICk6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiA9PiB7XHJcbiAgICAgICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZsaWdodFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91c0l0ZW1zO1xyXG4gICAgICB9LFxyXG4gICAgICB7IG91dGJvdW5kOiB7fSwgaW5ib3VuZDoge30gfVxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGR1YWxTaW5nbGVzKTtcclxuICAgIGNvbnN0IGR1YWxJbmJvdW5kRmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLmluYm91bmQpLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZHVyYWxTaW5nbGVGaWx0ZXIubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIHtcclxuICAgICAgICAuLi5ERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gICAgICAgIGFycml2YWxSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIHJldHVybkFycml2YWxUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbFRpbWUsXHJcbiAgICAgICAgcmV0dXJuRHVyYXRpb246IGR1YWxJbmJvdW5kRmlsdGVycy5kdXJhdGlvbixcclxuICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXJ0dXJlVGltZVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGlmIChyZXN1bHRzICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgcmV0dXJucyA9IChcclxuICAgICAgICAocmVzdWx0cy5qb3VybmV5cyBhcyB1bmtub3duIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW10pIHx8IFtdXHJcbiAgICAgICkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge31cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGEgPSAocmVzdWx0cy5ncm91cGVkIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBlZE9iamVjdHMocmV0dXJucyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGR1YWxEYXRhT3V0Ym91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQxO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFJbmJvdW5kOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9IChcclxuICAgICAgICByZXN1bHRzLmdyb3VwZWQgfHwgW11cclxuICAgICAgKVxyXG4gICAgICAgIC5yZWR1Y2UodGhpcy5tYWtlR3JvdXBlZE9iamVjdHMoZHVhbFNpbmdsZXMuaW5ib3VuZCwgdHJ1ZSksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkYXRhMiA9IFsuLi5yZXR1cm5EYXRhLCAuLi5kdWFsRGF0YU91dGJvdW5kLCAuLi5kdWFsRGF0YUluYm91bmRdO1xyXG4gICAgICBjb25zb2xlLmxvZygnUHJvY2Vzc2VkIEdyb3VwZWQgZGF0YScsIGRhdGEyKTtcclxuICAgICAgcmV0dXJuIGRhdGEyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMgPyBbcmVzdWx0c10gOiBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBtYWtlR3JvdXBlZE9iamVjdHMoXHJcbiAgICBncm91cGVkT2JqZWN0OiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGFjYzogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10sXHJcbiAgICAgIGl0ZW06IEdyb3VwZWRGaWVsZHNGcmFnbWVudFxyXG4gICAgKTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPT4ge1xyXG4gICAgICBjb25zdCBpc091dEJvdW5kID0gaXRlbS5ib3VuZEluZGljYXRvciA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZDtcclxuICAgICAgY29uc3QgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPSB7XHJcbiAgICAgICAgdHlwZTogJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgZGlyZWN0aW9uOiBpdGVtLmJvdW5kSW5kaWNhdG9yLFxyXG4gICAgICAgIGNsYXNzZXM6IHtcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3JpZ2luQWlycG9ydDogJycsXHJcbiAgICAgICAgb3JpZ2luQWlycG9ydE5hbWU6ICcnLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVwYXJ0RGF0ZVRpbWU6ICcnLFxyXG4gICAgICAgIGFycml2YWxEYXRlVGltZTogJycsXHJcbiAgICAgICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiAwLFxyXG4gICAgICAgIGluYm91bmRUb3RhbER1cmF0aW9uOiAwLFxyXG4gICAgICAgIG91dGxlZ3M6IG51bGwsXHJcbiAgICAgICAgaW5sZWdzOiBudWxsLFxyXG4gICAgICAgIG91dGxlZ3NDb3VudDogMCxcclxuICAgICAgICBpbmxlZ3NDb3VudDogMCxcclxuICAgICAgICBkYXRhU291cmNlOiAnJyxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBvcGVyYXRvcjogJycsXHJcbiAgICAgICAgb3BlcmF0b3JGdWxsOiAnJyxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBpc1JldHVybjogZmFsc2UsXHJcbiAgICAgICAgbWluUHJpY2U6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgICAgIG1heFByaWNlOiAwLFxyXG4gICAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAwLFxyXG4gICAgICAgIGdpZDogaXRlbS5yZWZlcmVuY2VJRFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBicmFuZHM6IE1hdGNoaW5nRmxpZ2h0cyA9IGl0ZW0uZmxpZ2h0cztcclxuXHJcbiAgICAgIE9iamVjdC5rZXlzKGJyYW5kcylcclxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5WzBdICE9PSAnXycpXHJcbiAgICAgICAgLmZvckVhY2goKGJyYW5kOiBGbGlnaHRHcm91cHMpID0+IHtcclxuICAgICAgICAgIGlmICghYnJhbmRzW2JyYW5kXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gISB1c2luZyBhIHJlZHVjZSBiZWNhdXNlIG5vdCBhbGwgZmxpZ2h0cyBhY3R1YWxseSBleGlzdCBhbmQgd2Ugd2VyZSBzZWVpbmcgdW5kZWZpbmVkIGluIHRoZSBmbGlnaHQgbGlzdFxyXG4gICAgICAgICAgYnJhbmRzW2JyYW5kXS5mb3JFYWNoKChmbGlnaHROdW06IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmbGlnaHQgPSBncm91cGVkT2JqZWN0W2ZsaWdodE51bV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZmxpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzT3V0Qm91bmQgfHwgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBjb3JyZWN0QnJhbmQ6IE9CVEZsaWdodENhYmluQ2xhc3MgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLkZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICBicmFuZCxcclxuICAgICAgICAgICAgICAgICAgISFmbGlnaHQuYmFzZUZhcmVJZCAmJiBmbGlnaHQuYmFzZUZhcmVJZCAhPT0gZmxpZ2h0LnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBtaW5wcmljZSA9IE1hdGguZmxvb3IoZmxpZ2h0LnRvdGFsLnByaWNlKTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhwcmljZSA9IE1hdGguY2VpbChmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWluUHJpY2UgPCBtaW5wcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5taW5QcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1pbnByaWNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1heFByaWNlID4gbWF4cHJpY2VcclxuICAgICAgICAgICAgICAgICAgPyByZXR1cm5PYmplY3QubWF4UHJpY2VcclxuICAgICAgICAgICAgICAgICAgOiBtYXhwcmljZTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LnByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5wcmVmZXJyZWRNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAnJztcclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGF0ZSkge1xyXG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm1heENvbm5lY3Rpb25zO1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkNhYmluQ2xhc3MgYXMgRmxpZ2h0Q2FiaW5DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNlYXJjaEZsaWdodHNRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVyblRyaXBcclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkFpcnBvcnQpLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBsZXQgY2FycmllcnM6IHN0cmluZ1tdID1cclxuICAgICAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XHJcbiAgICAgICAgICBjYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIGlzR3JvdXBlZEZsaWdodHMoXHJcbiAgICB0b1Rlc3Q6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICApOiB0b1Rlc3QgaXMgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRvVGVzdFswXT8udHlwZSA9PT0gJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCc7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciB0aGUgcmVzdWx0cywgdGhlbiBzb3J0IHRoZSByZW1haW5kZXJcclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgc29ydFZhbHVlOiBGbGlnaHRTb3J0VHlwZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHNvcnRWYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgQXBwbHlpbmcgRmlsdGVycyB0byBmbGlnaHRzOiAnLCBmaWx0ZXJzLCAnICsrKycpO1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJTZWxlY3RlZEZsaWdodHM6IChcclxuICAgICAgZ3JvdXBzVG9TaG93OiBudW1iZXJbXSxcclxuICAgICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgICApID0+IChmOiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4gPSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICAgPyB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aFxyXG4gICAgICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDogKF9ncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRlc3RlciA9IChcclxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcclxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXHJcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcclxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXHJcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArXHJcbiAgICAgICAgICAgICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPj0gbWlubWF4Lm1pbiAmJiB2YWwgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc0hvdXJCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWx9LiR7dGhpcy5oZWxwZXJzLm5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKHZhbDIpfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHRvVGVzdDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcclxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcclxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMuZHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCA9PT1cclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF0/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRKb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgYWNjID0gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSdWxlU3VtbWFyeTogUmVjb3JkUnVsZUFjdGlvbiA9XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0Py5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgICBkZWY6IFRcclxuICAgICk6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcclxuICAgICAgICAgIGZsaWdodC5qb3VybmV5SGFzaCxcclxuICAgICAgICAgIGZpZWxkXHJcbiAgICAgICAgXSkgfHxcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXHJcbiAgICAgICAgICAnd2hlblNlbGVjdGVkQWxvbmUnLFxyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3Qoc2VsZWN0ZWRSdWxlU3VtbWFyeSwgW1xyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIGRlZlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZU1lc3NhZ2UnLCAnJyk7XHJcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbiA9IGhhc0ZpZWxkKGZsaWdodCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoXHJcbiAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLFxyXG4gICAgICAgICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZmxpZ2h0O1xyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmlzR3JvdXBlZEZsaWdodHModGhpcy5mdWxsUmVzdWx0cykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZEZsaWdodHM6IEdyb3VwRmxpZ2h0cyA9IHRoaXMuX2dyb3VwZWQuZmluZChcclxuICAgICAgICAoaXRlbTogR3JvdXBGbGlnaHRzKSA9PiBpdGVtLnJlZmVyZW5jZUlEID09PSB0aGlzLnNlbGVjdGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAgIC5jbG9uZTxGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXT4odGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQxO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0aW5lcmFyaWVzID1cclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICByZXN1bHQyLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgPyBvdXRGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXHJcbiAgICAgICAgICAgICAgICAgID8gaW5EdWFsRmlsdGVySXRpbmVyYXJpZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbkZpbHRlckl0aW5lcmFyaWVzO1xyXG5cclxuICAgICAgICAgICAgICByZXN1bHQyLmNsYXNzZXMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQyLmNsYXNzZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz4sXHJcbiAgICAgICAgICAgICAgICAgIFtrZXksIHZhbHVlXTogW09CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzXVxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbGlnaHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRKb3VybmV5cyA9IHZhbHVlLmZsaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gISFmbGlnaHRJdGluZXJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkRmxpZ2h0cz8uZmxpZ2h0c1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5PQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySXRpbmVyYXJpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRKb3VybmV5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhY2N1bVtrZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0czogZmlsdGVyZWRKb3VybmV5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDIgJiYgT2JqZWN0LmtleXMocmVzdWx0Mi5jbGFzc2VzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRHcm91cGVkUm91dGluZXNbc29ydFZhbHVlXSkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgICAgLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0RmxpZ2h0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5GbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMgfHwgaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuICAgICAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlT3V0SW5Cb3VuZChcclxuICAgIG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IE9iamVjdC52YWx1ZXMoXHJcbiAgICAgIFsuLi5vdXRib3VuZCwgLi4uaW5ib3VuZF0ucmVkdWNlKChyZXN1bHQsIHsgdWlkLCAuLi5yZXN0IH0pID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdFt1aWRdKSB7XHJcbiAgICAgICAgICByZXN1bHRbdWlkXSA9IHtcclxuICAgICAgICAgICAgLi4uKHJlc3VsdFt1aWRdIHx8IHt9KSxcclxuICAgICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgICAuLi5yZXN0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LCBbXSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmxpZ2h0cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgICBncm91cElkOiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFRPRE8gYmVjb3VzZSBwb3AtdXAgaXMgbm90IHJlYWR5IEkgY29tbWVudGVkIHRoZSBjb2RlLlxyXG4gICAgICAvLyB0aGlzLm1vZGFsU2VydmljZS5vcGVuKCBNb2RhbFR5cGVzLkZsaWdodEV4dHJhc0RpYWxvZ0NvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9LCB7IGZsaWdodDogc2VsZWN0ZWRGbGlnaHQgfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBzZWxlY3RlZEZsaWdodDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCA9ICFzZWxlY3RlZEZsaWdodC5zZWxlY3RlZDtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXHJcbiAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0KTtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmpvdXJuZXlIYXNoXHJcbiAgICAgIF0gfHxcclxuICAgICAgIXRoaXMubXVsdGkgfHxcclxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZShcclxuICAgICAgKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocnVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKFxyXG4gICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LFxyXG4gICAgICAgICAgICAgIHJ1bGVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJvb2tTaW5nbGVGbGlnaHQoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAge1xyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcclxuICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcclxuICAgICAgfSxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICAgIHNjaGVtYURldGFpbHM6IGFueSxcclxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxyXG4gICAgaW5ib3VuZERhdGU/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgIG91dGJvdW5kRGF0ZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBydWxlczogRmFyZUNvbmRpdGlvbnMsXHJcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBvcHRpb25zOiBhbnkgPSBudWxsLFxyXG4gICAgZmxpZ2h0RGV0YWlsOiBGbGlnaHRJdGluZXJhcnkgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICAvLyBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgcnVsZXNcclxuICAgIGNvbnN0IGRvQ2FsbCA9ICFPYmplY3QudmFsdWVzKHJ1bGVzKS5maW5kKFxyXG4gICAgICAocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pOiBudW1iZXIgPT4gcnVsZS5sZW5ndGhcclxuICAgICk7XHJcbiAgICBpZiAoZG9DYWxsKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICAgIGZsaWdodHNbMF0gYXMgSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgICAgICk7XHJcbiAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XHJcbiAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xyXG4gICAgICAgIHJ1bGVzLFxyXG4gICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFbGlnaWJpbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgICxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2Vhc29uYWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhbnNmZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3VyY2hhcmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NhbGVzwqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGRyZW7CoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FsbMKgT3RoZXLCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91cnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBvc2l0cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05lZ290aWF0ZWTCoEZhcmVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb25cclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICA6IGZhdi5yZXR1cm5UcmlwXHJcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcclxuICAgICAgY29uc3QgbXVsdGkgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmYXYubXVsdGlEZXN0aW5hdGlvbi5tYXAoXHJcbiAgICAgICAgICBhc3luYyAoYTogeyBkYXRlOiBzdHJpbmc7IGRlc3Q6IHN0cmluZzsgb3JpZzogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uOiB7IGRhdGU6IG1vbWVudC5Nb21lbnQ7IGRlc3Q6IGFueTsgb3JpZzogYW55IH0gPSB7XHJcbiAgICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGRlc3Q6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICBvcmlnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKVxyXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgIC50aGVuKChvcmlnUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZCgoYikgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcclxuICAgICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAudGhlbigoZGVzdFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoKGIpID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPSBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogZmF2LnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0NISUxEJykubGVuZ3RoO1xyXG4gICAgLy8gdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IGZhdi5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKGE6IGFueSkgPT4ge1xyXG5cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICApOiBJRmxpZ2h0U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5jaG9zZW5TZWFyY2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkubXVsdGlEZXN0aW5hdGlvbkRldGFpbCA9IHRoaXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBhcnRMb2NhdGlvbkRldGFpbCA9IHRoaXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcbn1cclxuIl19
|