@sabstravtech/obtservices 0.0.26051001 → 0.1.6161600
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/fetchers.d.ts +2 -0
- package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -4
- package/angular/lib/vendor/services/logon.service.d.ts +2 -2
- package/angular/lib/vendor/services/user.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +389 -508
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/base/fetchers.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +3 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +5 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +11 -4
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +11 -0
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +4 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +9 -4
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -2
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -1
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
- package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +6 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +3 -0
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +10 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
- package/base/lib/vendor/models/traveller.object.d.ts +11 -1
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +9 -7
- package/base/lib/vendor/services/logon.service.d.ts +3 -3
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +3 -2
- package/base/lib/vendor/services/user.service.d.ts +18 -3
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -4
- package/base/lib/vendor/types/graphql.types.d.ts +379 -508
- package/base/lib/vendor/types/types.d.ts +35 -7
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.js +300 -201
- 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 +2143 -597
- 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/fetchers.js +3 -1
- package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +25 -25
- package/esm2015/angular/lib/vendor/services/logon.service.js +7 -7
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +13 -7
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +2 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +808 -1231
- package/esm2015/base/fetchers.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +6 -3
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +1 -3
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +155 -9
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +129 -8
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +351 -20
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +8 -5
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +94 -14
- package/esm2015/base/lib/vendor/classes/helpers.js +15 -2
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +86 -21
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +123 -18
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +63 -8
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +56 -33
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +109 -6
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +81 -7
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +17 -1
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- 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/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +42 -19
- package/esm2015/base/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/search.service.js +32 -24
- package/esm2015/base/lib/vendor/services/user.service.js +47 -3
- package/esm2015/base/lib/vendor/services/webtoken.service.js +12 -6
- package/esm2015/base/lib/vendor/types/graphql.types.js +15 -1
- package/esm2015/base/lib/vendor/types/types.js +4 -3
- package/fesm2015/sabstravtech-obtservices-angular.js +948 -1334
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1984 -472
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -22,7 +22,7 @@ export var RailJourneyFareType;
|
|
|
22
22
|
})(RailJourneyFareType || (RailJourneyFareType = {}));
|
|
23
23
|
export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
24
24
|
constructor(Railfetcher, getRailStationFetcher, helpers, basketService, storageService, searchService, userService, modalService) {
|
|
25
|
-
super(storageService, helpers, searchService);
|
|
25
|
+
super(storageService, helpers, searchService, userService);
|
|
26
26
|
this.Railfetcher = Railfetcher;
|
|
27
27
|
this.getRailStationFetcher = getRailStationFetcher;
|
|
28
28
|
this.basketService = basketService;
|
|
@@ -996,6 +996,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
996
996
|
if (basket) {
|
|
997
997
|
const outboundLegs = this.getLegsFromRailJourneyOption(outbound);
|
|
998
998
|
const inboundLegs = this.getLegsFromRailJourneyOption(inbound);
|
|
999
|
+
const lowestTicket = this.findCheapestTicket();
|
|
999
1000
|
const basketItem = {
|
|
1000
1001
|
basket: basket.id,
|
|
1001
1002
|
service: serviceId,
|
|
@@ -1065,7 +1066,11 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1065
1066
|
co2PerItem: outbound.co2PerItem,
|
|
1066
1067
|
co2PerPassenger: outbound.co2PerPassenger,
|
|
1067
1068
|
outboundDate: outbound.arriveDateTime,
|
|
1068
|
-
inboundDate: inbound.arriveDateTime
|
|
1069
|
+
inboundDate: inbound.arriveDateTime,
|
|
1070
|
+
lowestPrice: lowestTicket.amount != Number(outboundFare.price + inboundFare.price) || lowestTicket.currencyCode != outboundFare.currency ?
|
|
1071
|
+
lowestTicket.amount : null,
|
|
1072
|
+
lowestPriceCurrency: (lowestTicket.amount != Number(outboundFare.price + inboundFare.price) || lowestTicket.currencyCode != outboundFare.currency) ?
|
|
1073
|
+
lowestTicket.currencyCode : null
|
|
1069
1074
|
};
|
|
1070
1075
|
// if inTicketExtras or outTicketExtras exists add the object to basketItem
|
|
1071
1076
|
if (inTicketExtras) {
|
|
@@ -1084,7 +1089,49 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1084
1089
|
});
|
|
1085
1090
|
}
|
|
1086
1091
|
findCheapestTicket() {
|
|
1087
|
-
|
|
1092
|
+
if (this.cheapestPrice)
|
|
1093
|
+
return this.cheapestPrice;
|
|
1094
|
+
let cheapestOutboundTicket;
|
|
1095
|
+
let cheapestOpenReturnTicket;
|
|
1096
|
+
this.fullResults[0].outbound.forEach(element => {
|
|
1097
|
+
Object.keys(element.dualSingleJourneyFares).forEach(key => {
|
|
1098
|
+
const cheapestOnJourney = element.dualSingleJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
|
|
1099
|
+
if (cheapestOnJourney && (!cheapestOutboundTicket || cheapestOutboundTicket.price > cheapestOnJourney.price))
|
|
1100
|
+
cheapestOutboundTicket = cheapestOnJourney;
|
|
1101
|
+
});
|
|
1102
|
+
Object.keys(element.returnJourneyFares).forEach(key => {
|
|
1103
|
+
const cheapestOnJourney = element.returnJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
|
|
1104
|
+
if (cheapestOnJourney && (!cheapestOpenReturnTicket || cheapestOpenReturnTicket.price > cheapestOnJourney.price))
|
|
1105
|
+
cheapestOpenReturnTicket = cheapestOnJourney;
|
|
1106
|
+
});
|
|
1107
|
+
});
|
|
1108
|
+
let cheapestReturnTicket;
|
|
1109
|
+
if (this.fullResults[0].return) {
|
|
1110
|
+
this.fullResults[0].return.forEach(element => {
|
|
1111
|
+
Object.keys(element.dualSingleJourneyFares).forEach(key => {
|
|
1112
|
+
const cheapestOnJourney = element.dualSingleJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
|
|
1113
|
+
if (cheapestOnJourney && (!cheapestReturnTicket || cheapestReturnTicket.price > cheapestOnJourney.price))
|
|
1114
|
+
cheapestReturnTicket = cheapestOnJourney;
|
|
1115
|
+
});
|
|
1116
|
+
Object.keys(element.returnJourneyFares).forEach(key => {
|
|
1117
|
+
const cheapestOnJourney = element.returnJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
|
|
1118
|
+
if (cheapestOnJourney && (!cheapestOpenReturnTicket || cheapestOpenReturnTicket.price > cheapestOnJourney.price))
|
|
1119
|
+
cheapestOpenReturnTicket = cheapestOnJourney;
|
|
1120
|
+
});
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
if (cheapestOpenReturnTicket) {
|
|
1124
|
+
if (cheapestReturnTicket) {
|
|
1125
|
+
if (cheapestOutboundTicket.price + cheapestReturnTicket.price < cheapestOpenReturnTicket.price && cheapestOutboundTicket.currency == cheapestReturnTicket.currency)
|
|
1126
|
+
return { amount: cheapestOutboundTicket.price + cheapestReturnTicket.price, currencyCode: cheapestOutboundTicket.currency };
|
|
1127
|
+
}
|
|
1128
|
+
else if (cheapestOutboundTicket.price < cheapestOpenReturnTicket.price)
|
|
1129
|
+
return { amount: cheapestOutboundTicket.price, currencyCode: cheapestOutboundTicket.currency };
|
|
1130
|
+
return { amount: cheapestOpenReturnTicket.price, currencyCode: cheapestOpenReturnTicket.currency };
|
|
1131
|
+
}
|
|
1132
|
+
else if (cheapestReturnTicket)
|
|
1133
|
+
return { amount: cheapestOutboundTicket.price + cheapestReturnTicket.price, currencyCode: cheapestOutboundTicket.currency };
|
|
1134
|
+
return { amount: cheapestOutboundTicket.price, currencyCode: cheapestOutboundTicket.currency };
|
|
1088
1135
|
}
|
|
1089
1136
|
resetQuery() {
|
|
1090
1137
|
this.updateTempParams(this.searchService.makeRailQuery());
|
|
@@ -1314,7 +1361,24 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1314
1361
|
return null;
|
|
1315
1362
|
}
|
|
1316
1363
|
}
|
|
1317
|
-
updateFromPreviousSearches(previousItems) {
|
|
1364
|
+
updateFromPreviousSearches(previousItems) {
|
|
1365
|
+
console.log(previousItems);
|
|
1366
|
+
if (previousItems.FLIGHT) {
|
|
1367
|
+
try {
|
|
1368
|
+
this.outBoundDateTime = moment(previousItems.FLIGHT.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1369
|
+
if (this.outBoundDateTime.minutes() % 30)
|
|
1370
|
+
this.outBoundDateTime = this.outBoundDateTime.subtract(this.outBoundDateTime.minutes() % 30, "minutes");
|
|
1371
|
+
if (previousItems.FLIGHT.inboundDate) {
|
|
1372
|
+
this.inBoundDateTime = moment(previousItems.FLIGHT.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1373
|
+
if (this.inBoundDateTime.minutes() % 30)
|
|
1374
|
+
this.inBoundDateTime = this.inBoundDateTime.subtract(this.inBoundDateTime.minutes() % 30, "minutes");
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
catch (_a) {
|
|
1378
|
+
console.error('Error trying to prepopulate Rail from flight item');
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1318
1382
|
updateSearchFromExpiredBasketItem(basketItem) {
|
|
1319
1383
|
const searchRailQuery = basketItem.searchQuery;
|
|
1320
1384
|
this.chosenSearchType = searchRailQuery.journeyType;
|
|
@@ -1449,6 +1513,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1449
1513
|
// };
|
|
1450
1514
|
// }
|
|
1451
1515
|
// );
|
|
1516
|
+
const lowestTicket = this.findCheapestTicket();
|
|
1452
1517
|
const basketItem = {
|
|
1453
1518
|
basket: basket.id,
|
|
1454
1519
|
service: serviceId.toString(),
|
|
@@ -1496,7 +1561,11 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1496
1561
|
searchQuery: railQuery,
|
|
1497
1562
|
co2PerItem: railJourneyOption.co2PerItem,
|
|
1498
1563
|
co2PerPassenger: railJourneyOption.co2PerPassenger,
|
|
1499
|
-
outboundDate: railJourneyOption.departDateTime
|
|
1564
|
+
outboundDate: railJourneyOption.departDateTime,
|
|
1565
|
+
lowestPrice: lowestTicket.amount != Number(railFare.price) || lowestTicket.currencyCode != railFare.currency ?
|
|
1566
|
+
lowestTicket.amount : null,
|
|
1567
|
+
lowestPriceCurrency: (lowestTicket.amount != Number(railFare.price) || lowestTicket.currencyCode != railFare.currency) ?
|
|
1568
|
+
lowestTicket.currencyCode : null
|
|
1500
1569
|
};
|
|
1501
1570
|
// if ticketExtras exists add the object to basketItem
|
|
1502
1571
|
if (outTicketExtras) {
|
|
@@ -1529,6 +1598,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1529
1598
|
if (basket) {
|
|
1530
1599
|
const outboundLegs = this.getLegsFromRailJourneyOption(outbound);
|
|
1531
1600
|
const inboundLegs = this.getLegsFromRailJourneyOption(inbound);
|
|
1601
|
+
const lowestTicket = this.findCheapestTicket();
|
|
1532
1602
|
const basketItem = {
|
|
1533
1603
|
basket: basket.id,
|
|
1534
1604
|
service: serviceId,
|
|
@@ -1596,7 +1666,11 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1596
1666
|
co2PerItem: outbound.co2PerItem,
|
|
1597
1667
|
co2PerPassenger: outbound.co2PerPassenger,
|
|
1598
1668
|
outboundDate: outbound.arriveDateTime,
|
|
1599
|
-
inboundDate: inbound.arriveDateTime
|
|
1669
|
+
inboundDate: inbound.arriveDateTime,
|
|
1670
|
+
lowestPrice: lowestTicket.amount != Number(outboundFare.price) || lowestTicket.currencyCode != outboundFare.currency ?
|
|
1671
|
+
lowestTicket.amount : null,
|
|
1672
|
+
lowestPriceCurrency: (lowestTicket.amount != Number(outboundFare.price) || lowestTicket.currencyCode != outboundFare.currency) ?
|
|
1673
|
+
lowestTicket.currencyCode : null
|
|
1600
1674
|
};
|
|
1601
1675
|
// if ticketExtras exists add the object to basketItem
|
|
1602
1676
|
if (ticketExtras) {
|
|
@@ -1840,4 +1914,4 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1840
1914
|
RailEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_rail';
|
|
1841
1915
|
RailEnterpriseSearch.STORAGE_SESSION_RESULTS = 'rail_results';
|
|
1842
1916
|
RailEnterpriseSearch.PASSING_POINT = 'Passing';
|
|
1843
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixxQkFBcUIsRUFjckIsYUFBYSxFQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLFNBQVMsRUFLVCxXQUFXLEVBRVgscUJBQXFCLEVBT3RCLE1BQU0sd0JBQXdCLENBQUM7QUFtQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDZDQUF1QixDQUFBO0lBQ3ZCLDhDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3Qix3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RUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDcEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQzthQUNsQjtZQUNELFFBQVE7UUFDVixDQUFDO0tBQUE7O0FBdGtGZSwyQ0FBc0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsNENBQXVCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLGtDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXMsXHJcbiAgQ2hlYXBlc3RSYWlsUHJpY2VzLFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBtYXhUcmF2ZWxsZXJXZWxsYmVpbmcsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRSYWlsRmFyZSxcclxuICBPQlRSYWlsRmFyZVR5cGVzLFxyXG4gIE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbixcclxuICBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgT0JUUmFpbFF1b3RlUmVzdWx0LFxyXG4gIE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2UsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBXZWxsYmVpbmdFbnVtXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldEl0ZW0sXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gIFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgUmFpbFRpY2tldEV4dHJhLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBSYWlsSm91cm5leUZhcmUsXHJcbiAgUmFpbFN0YXRpb24sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIFJhaWxBY2NvdW50LFxyXG4gIFJhaWxUaWNrZXRRdWV1ZSxcclxuICBSYWlsSm91cm5leUxlZ1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VSYWlsUXVvdGVGZXRjaGVyLFxyXG4gIFJhaWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgUmFpbFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBJUmFpbEFpcnBvcnRFeHByZXNzU3RhdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtYWlycG9ydC1leHByZXNzLXN0YXRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQWNjb3VudHNMaXN0LFxyXG4gIFJhaWxCYXNrZXRJdGVtLFxyXG4gIFRpY2tldEV4dHJhcyxcclxuICBUaWNrZXRRdWV1ZUxpc3RcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtYmFza2V0LWl0ZW0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbFJlY2VudFNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtcmVjZW50LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxRdW90ZVJlc3VsdCwgUmFpbFF1b3RlUmVzdWx0QXJyYXkgfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbFJ1bGVFbml0eSxcclxuICBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICBSYWlsU3VtbWFyeVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJUmFpbFNlbGVjdGVkVGlja2V0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXNlbGVjdGVkLXRpY2tldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsRGlyZWN0aW9uIH0gZnJvbSAnLi9yYWlsLWRpcmVjdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgUmFpbEluZGV4VG9UaWNrZXQgfSBmcm9tICcuL3JhaWwtaW5kZXgtdG8tdGlja2V0JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmV4cG9ydCBlbnVtIFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgRGVwYXJ0ID0gJ0RlcGFydCBBZnRlcicsXHJcbiAgQXJyaXZlID0gJ0Fycml2ZSBCZWZvcmUnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJhaWxKb3VybmV5RmFyZVR5cGUgeyAvLyBtYXkgbmVlZCB0byBiZSBleHBhbmRlZCBmb3IgZHVhbC9zcGxpdFxyXG4gIFJldHVybiA9ICdSZXR1cm4nLFxyXG4gIFNpbmdsZSA9ICdTaW5nbGUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSYWlsRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBSYWlsUXVvdGVGZXRjaGVyVHlwZSxcclxuICAgIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBSYWlsUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcclxuICBwcml2YXRlIF9zZWxlY3RlZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kU3VtbWFyeTogUmFpbFJ1bGVFbml0eTtcclxuICBwcml2YXRlIF9zZWxlY3RlZFNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXM7XHJcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZVdlbGxiZWluZzogUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZTtcclxuXHJcbiAgZ2V0IHNlbGVjdGVkU2VjdGlvbigpOiBPQlRSYWlsRmFyZVR5cGVzIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFNlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRUaWNrZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRUaWNrZXQoc2VsZWN0ZWRUaWNrZXQ6IHtcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gIH0pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KFxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5Lm91dGJvdW5kIHx8IFtdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZEluYm91bmRUaWNrZXQoc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHNlbGVjdGVkVGlja2V0O1xyXG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kU3VtbWFyeSA9IHRoaXMuc3VtbWFyeS5yZXR1cm4uZmluZChcclxuICAgICAgICAodmFsdWU6IFJhaWxSdWxlRW5pdHkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhbnNhY3Rpb25JZGVudGlmaWVyKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBpZDtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNhY3Rpb25JZGVudGlmaWVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3JhaWwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyYWlsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XHJcbiAgICAvLyB7IGRpc3BsYXk6ICdPcGVuIFJldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkgfSxcclxuICAgIC8vIHsgZGlzcGxheTogJ0R1YWwgU2luZ2xlcycsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBSYWlsQ2xhc3MuQWxsIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBSYWlsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IFJhaWxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnM6IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9uc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnSFAxLTMnLCBuYW1lOiAnSGVhdGhyb3cgVDEtMyAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDQnLCBuYW1lOiAnSGVhdGhyb3cgVDQgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnSFA1JywgbmFtZTogJ0hlYXRocm93IFQ1IC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ1BIMS0zJywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUMS0zJyB9LFxyXG4gICAgeyBjb2RlOiAnUEg0JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNCcgfSxcclxuICAgIHsgY29kZTogJ1BINScsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDUnIH0sXHJcbiAgICB7IGNvZGU6ICdHVicsIG5hbWU6ICdHYXR3aWNrIC0gVmljdG9yaWEnIH0sXHJcbiAgICB7IGNvZGU6ICdWRycsIG5hbWU6ICdWaWN0b3JpYSAtIEdhdHdpY2snIH0sXHJcbiAgICB7IGNvZGU6ICdTTCcsIG5hbWU6ICdTdGFuc3RlZCAtIExpdmVycG9vbCBTdHJlZXQnIH0sXHJcbiAgICB7IGNvZGU6ICdMUycsIG5hbWU6ICdMaXZlcnBvb2wgU3RyZWV0IC0gU3RhbnN0ZWQnIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uc0NvZGVzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7IGRlcDogc3RyaW5nOyBhcnI6IHN0cmluZyB9O1xyXG4gIH0gPSB7XHJcbiAgICAnSFAxLTMnOiB7IGRlcDogJ0hYWCcsIGFycjogJ1BBRCcgfSxcclxuICAgICdQSDEtMyc6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFhYJyB9LFxyXG4gICAgSFA0OiB7IGRlcDogJ0hBRicsIGFycjogJ1BBRCcgfSxcclxuICAgIFBINDogeyBkZXA6ICdQQUQnLCBhcnI6ICdIQUYnIH0sXHJcbiAgICBIUDU6IHsgZGVwOiAnSFdWJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg1OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hXVicgfSxcclxuICAgIEdWOiB7IGRlcDogJ0dUVycsIGFycjogJ1ZJQycgfSxcclxuICAgIFZHOiB7IGRlcDogJ1ZJQycsIGFycjogJ0dUVycgfSxcclxuICAgIFNMOiB7IGRlcDogJ1NTRCcsIGFycjogJ0xTVCcgfSxcclxuICAgIExTOiB7IGRlcDogJ0xTVCcsIGFycjogJ1NTRCcgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByYWlsQ3JpdGVyaWEgPSBbUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCwgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZV07XHJcblxyXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1lvdW5nIHBlcnNvbnMgcmFpbGNhcmQnLCB2YWx1ZTogJ1lORycgfSxcclxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRm9yY2VzIHJhaWxjYXJkJywgdmFsdWU6ICdITUYnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cclxuICBdO1xyXG5cclxuICAvLyBZTkc6IFwiWW91bmcgcGVyc29ucyByYWlsY2FyZFwiLFxyXG4gIC8vIERJUzogXCJEaXNhYmlsaXR5IHJhaWxjYXJkXCIsXHJcbiAgLy8gRkFNOiBcIkZhbWlseSByYWlsY2FyZFwiLFxyXG4gIC8vIEhNRjogXCJGb3JjZXMgcmFpbGNhcmRcIixcclxuICAvLyBUQUQ6IFwiVHJhdmVsIGFnZW5jeSBkaXNjb3VudFwiXHJcbiAgcHVibGljIHJlbW92ZVBhc3NpbmdQb2ludHNGcm9tUmVzdWx0cyA9IHRydWU7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuUmFpbDtcclxuXHJcbiAgcHJpdmF0ZSBfYm9va1JhaWxGcm9tTGl2ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVhcGVzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgaW5ib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gIH0+KHtcclxuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IHtcclxuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGluYm91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBnZXQgYm9va1JhaWxGcm9tTGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29rUmFpbEZyb21MaXZlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJvb2tSYWlsRnJvbUxpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmUgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAvLyBFTlQtMTU1NyAtIG1heCBFdm9sdmkgc2VhcmNoIGRhdGUgaXMgNiBtb250aHMgaW4gZnV0dXJlXHJcbiAgICB5ZWFyOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5tb250aCgpLFxyXG4gICAgZGF5OiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlblRpY2tldEdyb3VwOiBSYWlsVGlja2V0R3JvdXA7XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcclxuICBwdWJsaWMgc3VtbWFyeTogUmFpbFN1bW1hcnkgPSB7fTtcclxuXHJcbiAgZ2V0IG9wZW5SZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0IG9wZW5SZXR1cm4obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAobmV3VmFsKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID1cclxuICAgICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKG5ld1R5cGU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBuZXdUeXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZDaGlsZHJlbihjaGlsZHJlbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9IGVsc2UgaWYgKHR0Py5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb207XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ0Zyb20odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblJhaWxDbGFzcygpOiBSYWlsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5SYWlsQ2xhc3MobmV3Q2xhc3M6IFJhaWxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gbmV3Q2xhc3M7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogUmFpbENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBSYWlsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyA9IGNsYXNzUjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBleHRyYVRpbWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBleHRyYVRpbWUoZXh0cmE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWUgPSBleHRyYTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYTtcclxuICB9XHJcblxyXG4gIHNldCB2aWEodmlhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhID0gdmlhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYUxvY2F0aW9uKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYUxvY2F0aW9uKHZpYUxvY2F0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbiA9IHZpYUxvY2F0aW9uO1xyXG5cclxuICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gJyc7XHJcbiAgICBpZiAodmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl92aWFMb2NhdGlvbiA9IHZpYUxvY2F0aW9uLnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICAgLnNldCgnZGF0ZScsIG5ld0RhdGVUaW1lLmRhdGUoKSlcclxuICAgICAgICAuc2V0KCdtb250aCcsIG5ld0RhdGVUaW1lLm1vbnRoKCkpXHJcbiAgICAgICAgLnNldCgneWVhcicsIG5ld0RhdGVUaW1lLnllYXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZENyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xyXG4gICAgLy8gY29uc29sZS53YXJuKGArKysgU2V0dGluZyBOZXcgQ3JpdGVyaWE6ICR7bmV3Q3JpdH0gKysrYCk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSA9IG5ld0NyaXQ7XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluQm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluQm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IG91dGJvdW5kX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHJldHVybl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhID0gbmV3Q3JpdDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJuZXRUaWNrZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBjYXJuZXRUaWNrZXQobmV3Q2FybmV0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0ID0gbmV3Q2FybmV0O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVBdXRvRGlzY291bnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cztcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlQXV0b0Rpc2NvdW50cyhuZXdEaXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cyA9IG5ld0RpcztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwcmlvcml0aXNlQnlQcmljZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2U7XHJcbiAgfVxyXG5cclxuICBzZXQgcHJpb3JpdGlzZUJ5UHJpY2UobmV3UHJpb3JpdHk6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZSA9IG5ld1ByaW9yaXR5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFwcGx5UmFpbGNhcmRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcHBseVJhaWxjYXJkcztcclxuICB9XHJcblxyXG4gIHNldCBhcHBseVJhaWxjYXJkcyhhcENhcmRzOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWFwQ2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcHBseVJhaWxjYXJkcyA9IGFwQ2FyZHM7XHJcbiAgfVxyXG5cclxuICBnZXQgcmFpbENhcmRzKCk6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgcmFpbENhcmRzKHZhbHVlOiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmFpbENhcmRzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoNDgpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFpcnBvcnRFeHByZXNzU3RhdGlvbnMoKTogeyBjb2RlOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9ucztcclxuICB9XHJcblxyXG4gIGdldCBhaXJwb3J0RXhwcmVzc1N0YXRpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbihzdGF0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSBzdGF0aW9uO1xyXG4gICAgdGhpcy5fc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWlycG9ydEV4cHJlc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgaXNBaXJwb3J0RXhwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldEFpcnBvcnRFeHByZXNzU3RhdGlvbklkcyhzdGF0aW9uSWRzOiB7XHJcbiAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgICBhcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nO1xyXG4gIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgZGVwYXJ0dXJlTG9jYXRpb25JZCwgYXJyaXZhbExvY2F0aW9uSWQgfSA9IHN0YXRpb25JZHM7XHJcbiAgICBpZiAoZGVwYXJ0dXJlTG9jYXRpb25JZCAmJiBhcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IGRlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IGFycml2YWxMb2NhdGlvbklkO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maW5kU3VtbWFyeShcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgc3VtbWFyeTogUmFpbFJ1bGVFbml0eVtdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gc3VtbWFyeS5maW5kKCh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2g7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgUmFpbGZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIFJhaWxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKG91dGJvdW5kLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dGJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogb3V0Ym91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogaW5ib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFpbmJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlO1xyXG4gIH1cclxuXHJcbiAgZmluZENoZWFwZXN0VGlja2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9XHJcbiAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBSYWlsUmVjZW50U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlhTG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudmlhTG9jYXRpb24gPSB0aGlzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5pbmJvdW5kU3RhdGlvbkNvZGUgPVxyXG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmV4dHJhVGltZVRvQ2hhbmdlO1xyXG4gICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yYWlsQ2FyZFF1YWxpZmllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XHJcbiAgICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0dXJlTG9jYXRpb25JZCxcclxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbExvY2F0aW9uSWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XHJcbiAgICAgIHRoaXMub3BlblJldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxyXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9PZkFkdWx0cyxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgY2hpbGRyZW46IHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuLFxyXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxyXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkcz8ubWFwKFxyXG4gICAgICAgIChyYWlsQ2FyZDogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZD8uY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogdGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXJcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmlhTG9jYXRpb24gPT09ICcnKSB7XHJcbiAgICAgIHF1ZXJ5LnZpYUxvY2F0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ1RvO1xyXG4gICAgICBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldENyaXRlcmlhKFxyXG4gICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHN0cmluZyxcclxuICAgIGFycml2YWxEYXRlVGltZTogc3RyaW5nXHJcbiAgKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIGlmIChkZXBhcnR1cmVEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoYXJyaXZhbERhdGVUaW1lKSB7XHJcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlO1xyXG4gICAgfVxyXG4gICAge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFJhaWxRdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBzZWFyY2hSYWlsUXVlcnkuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHNlYXJjaFJhaWxRdWVyeS5leHRyYVRpbWVUb0NoYW5nZTtcclxuXHJcbiAgICAvLyBnZXQgb3V0Qm91bmREYXRlVGltZSwgaW5Cb3VuZERhdGVUaW1lIGFuZCBvdXRib3VuZENyaXRlcmlhICxyZXR1cm5Dcml0ZXJpYVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgPyBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSk7XHJcbiAgICB0aGlzLm91dGJvdW5kQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxyXG4gICAgICBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChzZWFyY2hSYWlsUXVlcnkuam91cm5leVR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICAgPyBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUpO1xyXG5cclxuICAgICAgdGhpcy5yZXR1cm5Dcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldFJhaWxTdGF0aW9uQnlJZChzZWFyY2hSYWlsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKChkZXBhcnR1cmVTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBkZXBhcnR1cmVTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHJhaWxzdGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGRlcGFydHVyZVN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGVwYXJ0dXJlU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IGRlcGFydHVyZVN0YXRpb24ubmxjQ29kZSxcclxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi50cmFpbmxpbmVVbmlxdWVDb2RlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKChhcnJpdmFsU3RhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsaW5nVG8gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGFycml2YWxTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHJhaWxzdGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGFycml2YWxTdGF0aW9uLmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGFycml2YWxTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgbmxjQ29kZTogYXJyaXZhbFN0YXRpb24ubmxjQ29kZSxcclxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogYXJyaXZhbFN0YXRpb24uc3RhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lQ29kZTogYXJyaXZhbFN0YXRpb24udHJhaW5saW5lQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVVbmlxdWVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVVbmlxdWVDb2RlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS52aWFMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldFJhaWxTdGF0aW9uQnlJZChzZWFyY2hSYWlsUXVlcnkudmlhTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKCh2aWFMb2NhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHtcclxuICAgICAgICAgICAgbmFtZTogdmlhTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogdmlhTG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogdmlhTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiB2aWFMb2NhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiB2aWFMb2NhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiB2aWFMb2NhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IHZpYUxvY2F0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbFN0YXRpb24oXHJcbiAgICBjb2RlOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPFJhaWxTdGF0aW9uPiB7XHJcbiAgICBpZiAoY29kZS5sZW5ndGggPT09IDMpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHsgY29kZSB9KS5waXBlKFxyXG4gICAgICAgIHRhcCgoKSA9PiBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpKSxcclxuICAgICAgICB0YWtlKDEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlKCk6IFJhaWxKb3VybmV5RmFyZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb246IE9CVFJhaWxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LmpvdXJuZXlMZWdzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3MubWFwKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOiBzZWdtZW50Lm9wZXJhdG9yLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBjb25zdCByYWlsUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMpO1xyXG4gICAgbGV0IG91dFRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoXHJcbiAgICAgICAgcmFpbEpvdXJuZXlPcHRpb24udGlja2V0RXh0cmFzWzBdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHJhaWxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICByYWlsRmFyZSxcclxuICAgICAgcmFpbEpvdXJuZXlPcHRpb25cclxuICAgICk7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IGxlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBjb25zdCB0aWNrZXRRdWV1ZUxpc3QgPSBzZWxlY3RlZFJhaWxKb3VybmV5RmFyZS50aWNrZXRRdWV1ZUxpc3QubWFwKFxyXG4gICAgICAvLyAgICh0aWNrZXRRdWV1ZUxpc3QxKSA9PiB7XHJcbiAgICAgIC8vICAgICByZXR1cm4ge1xyXG4gICAgICAvLyAgICAgICBpZDogdGlja2V0UXVldWVMaXN0MS5pZCxcclxuICAgICAgLy8gICAgICAgbmFtZTogdGlja2V0UXVldWVMaXN0MS5uYW1lLFxyXG4gICAgICAvLyAgICAgICB0eXBlOiB0aWNrZXRRdWV1ZUxpc3QxLnR5cGVcclxuICAgICAgLy8gICAgIH07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyApO1xyXG5cclxuICAgICAgY29uc3QgYmFza2V0SXRlbTogUmFpbEJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChyYWlsSm91cm5leU9wdGlvbi50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKHJhaWxKb3VybmV5T3B0aW9uLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiByYWlsRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogcmFpbEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhcmFpbEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxyXG4gICAgICAgIGN1cnJlbmN5OiByYWlsRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcclxuICAgICAgICBjbzJQZXJJdGVtOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxyXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICByYWlsRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIC8vIGlmIChvdXRib3VuZC51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuXHJcbiAgICBsZXQgdGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuXHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuXHJcbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgb3V0Ym91bmRGYXJlLFxyXG4gICAgICBvdXRib3VuZCxcclxuICAgICAgaW5ib3VuZFxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24oaW5ib3VuZCk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKHRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBvdXRib3VuZEZhcmUucmVxdWlyZXNSZWFzb24gfHwgaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoXHJcbiAgICByYWlsTGVnczogUmFpbEpvdXJuZXlMZWdbXVxyXG4gICk6IFJhaWxKb3VybmV5TGVnW10ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYWlsTGVncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBsZWcgPSByYWlsTGVnc1tpXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnLmNhbGxpbmdQb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHNbal07XHJcbiAgICAgICAgZGVsZXRlIGNhbGxpbmdQb2ludHMuc2NoZWR1bGVkUGxhdGZvcm07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFpbExlZ3M7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QocmFpbFRpY2tldEV4dHJhOiBSYWlsVGlja2V0RXh0cmEpOiBUaWNrZXRFeHRyYXNbXSB7XHJcbiAgICBjb25zdCBwcmljZSA9XHJcbiAgICAgIHRoaXMubm9PZkNoaWxkcmVuICogcmFpbFRpY2tldEV4dHJhPy5jaGlsZEFtb3VudCArXHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyAqIHJhaWxUaWNrZXRFeHRyYS5hZHVsdEFtb3VudDtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMudHlwZSxcclxuICAgICAgICBsb2NhdGlvbjogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmxvY2F0aW9uLFxyXG4gICAgICAgIGRhdGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy5kYXRlLFxyXG4gICAgICAgIHByaWNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUaW1lRGlmZmVyZW5jZUluTWlucyhyYWlsSm91cm5leTogUmFpbEpvdXJuZXlPcHRpb24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVyc1xyXG4gICAgICAuZ2V0VGltZURpZmZlcmVuY2UocmFpbEpvdXJuZXkuYXJyaXZlRGF0ZVRpbWUsIHJhaWxKb3VybmV5LmRlcGFydERhdGVUaW1lKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGRldGVybWluZSBpZiBhIHRpY2tldCBpcyBhbiBlVGlja2V0XHJcbiAgICogQHBhcmFtIHRpY2tldCAtIHRoZSB0aWNrZXQgd2Ugd2FudCB0byB0byBjaGVja1xyXG4gICAqIEByZXR1cm5zIC0gYm9vbGVhblxyXG4gICAqL1xyXG4gIHRpY2tldElzQW5FVGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm91bmRFVGlja2V0OiBSYWlsSm91cm5leU9wdGlvbiA9IG51bGw7XHJcblxyXG4gICAgLy8gZm91bmRFVGlja2V0ID0gdGlja2V0LnRpY2tldFF1ZXVlTGlzdC5maW5kKChxdWV1ZUxpc3RJdGVtKSA9PiB7XHJcbiAgICAvLyAgIHJldHVybiBxdWV1ZUxpc3RJdGVtLnR5cGUgPT09ICdlVGlja2V0JztcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3VuZEVUaWNrZXQgPyB0cnVlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeS5yZXR1cm4pO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5XHJcbiAgICAgICAgPyAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoeyAuLi5mYXJlIH0sIFtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW3RoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaF1cclxuICAgICAgICAgICAgICAgICAgICA/LnJ1bGVEYXRhV2hlblNlbGVjdGVkV2l0aFtmYXJlLmZhcmVIYXNoXSxcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgID8gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXT8ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogISF0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxyXG4gICAgICAgICAgICAgICAgXT8uYWxsb3dlZFdpdGg/LmluY2x1ZGVzKGZhcmUuZmFyZUhhc2gpXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgIHsgLi4uZmFyZSB9LFxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRSdWxlcyA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgICBkaXJlY3Rpb246ICdvdXRib3VuZCcgfCAncmV0dXJuJ1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSk6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0+IHtcclxuICAgICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5W2RpcmVjdGlvbl0pO1xyXG4gICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKFxyXG4gICAgICAgICAgKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC4uLmZhcmUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICAgICAgICAgICAgICBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV1cclxuICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bTogT0JUUmFpbFF1b3RlUmVzdWx0W10sXHJcbiAgICAgICAgICAgIG5leHQ6IE9CVFJhaWxRdW90ZVJlc3VsdFxyXG4gICAgICAgICAgKTogT0JUUmFpbFF1b3RlUmVzdWx0W10gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0ge1xyXG4gICAgICAgICAgICAgIC4uLm5leHQsXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmQ6IChuZXh0Lm91dGJvdW5kIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfSBhcyBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybjogKG5leHQucmV0dXJuIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdyZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcygnb3BlblJldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2godGVtcCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoXHJcbiAgICBvdXRib3VuZEZhcmU6IFJhaWxKb3VybmV5RmFyZSxcclxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIGluYm91bmQ/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDbGFzcycsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb25kaXRpb25zIERlc2NyaXB0aW9uJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb25kaXRpb25zRGVzY3JpcHRpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWYWxpZCBSZXR1cm4gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy52YWxpZFJldHVyblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hhbmdlIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hhbmdlUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ByZSBCb29raW5nIFJlcXVpcmVtZW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JhaWxjYXJkIERpc2NvdW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJhaWxjYXJkRGlzY291bnRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb2RlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb2RlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hpbGREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkT3V0UnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IEJyZWFrIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leUJyZWFrUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JlZnVuZCBDYW5jZWxsYXRpb24gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5yZWZ1bmRDYW5jZWxsYXRpb25SdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSm91cm5leSBUeXBlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLmpvdXJuZXlUeXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG9kIEF2YWlsYWJsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50b2RBdmFpbGFibGVcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIFN0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBpbmJvdW5kPy5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JldHVybiBFbmQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmFycml2ZURhdGVUaW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubm9PZkFkdWx0cyA9IGZhdi5hZHVsdHM7XHJcbiAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5qb3VybmV5VHlwZTtcclxuICAgIHN3aXRjaCAoZmF2LmNsYXNzKSB7XHJcbiAgICAgIGNhc2UgJ0ZpcnN0JzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5GaXJzdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQW55JzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5BbGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1N0YW5kYXJkJzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5TdGFuZGFyZDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmRlcGFydHVyZUxvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmFycml2YWxMb2NhdGlvbklkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IGE7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKGZhdi52aWFMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYudmlhTG9jYXRpb25JZCB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpYSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gbnVsbDtcclxuICAgICAgdGhpcy52aWEgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1917
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixxQkFBcUIsRUFjckIsYUFBYSxFQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLFNBQVMsRUFLVCxXQUFXLEVBRVgscUJBQXFCLEVBT3RCLE1BQU0sd0JBQXdCLENBQUM7QUFtQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDZDQUF1QixDQUFBO0lBQ3ZCLDhDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3Qix3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L0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUF5QjtnQkFDM0MsR0FBRywwQkFBMEI7Z0JBQzdCLEdBQUcsc0JBQXNCO2dCQUN6QixHQUFHLHNCQUFzQjthQUMxQixDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLDBCQUEwQjtnQkFDN0IsR0FBRyxjQUFjO2FBQ2xCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLHVCQUF1QjtnQkFDMUIsR0FBRyxtQkFBbUI7Z0JBQ3RCLEdBQUcsbUJBQW1CO2FBQ3ZCLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBeUI7Z0JBQ3JDLEdBQUcsdUJBQXVCO2dCQUMxQixHQUFHLFdBQVc7YUFDZixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtZQUVELE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUVGLE9BQU8sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUM5QyxPQUFPLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUMxQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO2dCQUVGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsY0FBYyxFQUNkLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE1BQU0scUJBQXFCLEdBQ3pCLGFBQUEsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQiwwQ0FBRSxJQUFJLDBDQUMvQyxjQUFjLE1BQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDO2dCQUNwRCxJQUFJLHFCQUFxQixFQUFFO29CQUN6QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsMEJBQTBCLEVBQzFCLE9BQU8sQ0FDUixDQUFDO29CQUNGLE1BQU0sa0JBQWtCLEdBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7b0JBQ3RELElBQ0Usa0JBQWtCO3dCQUNsQixPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUNuRDt3QkFDQSxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCOzRCQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7d0JBQ2hELDJEQUEyRDt3QkFDM0QsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsS0FBSztxQkFDTjt5QkFBTSxJQUNMLFlBQVksQ0FBQyxLQUFLO3dCQUNsQixPQUFPLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUMxRDt3QkFDQSxPQUFPLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCOzRCQUNsRCxZQUFZLENBQUM7cUJBQ2hCO2lCQUNGO2dCQUVELE1BQU0sa0JBQWtCLEdBQ3RCLGFBQUEsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsMENBQUUsSUFBSSwwQ0FBRSxjQUFjO29CQUNoRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUksa0JBQWtCLEVBQUU7b0JBQ3RCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FDdEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUNqRCx1QkFBdUIsRUFDdkIsT0FBTyxDQUNSLENBQUM7b0JBQ0YsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7b0JBQ3BFLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO3dCQUNqRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYzs0QkFDeEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQzt3QkFDN0Msd0RBQXdEO3dCQUN4RCxjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixLQUFLO3FCQUNOO3lCQUFNLElBQ0wsWUFBWSxDQUFDLEtBQUs7d0JBQ2xCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQ3ZEO3dCQUNBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUM7cUJBQ2xFO2lCQUNGO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FDakQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUM3QyxXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxHQUFHLENBQzlDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQzFDLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztnQkFFRixPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUNqRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQzdDLGNBQWMsRUFDZCxPQUFPLENBQ1IsQ0FBQztnQkFDRixPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FDOUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFDMUMsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2FBQ0g7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0ssWUFBWSxDQUNoQixTQUF3QixFQUN4QixPQUE2QixFQUM3QixRQUE0QixFQUM1QixRQUFnQixFQUNoQixPQUF5QixFQUN6QixZQUFxQixLQUFLOzs7WUFFMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQ0UsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQ3ZEO2dCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQ2hFLGNBQWMsQ0FBQywrQkFBK0IsQ0FDL0MsQ0FBQztZQUNGLElBQUksY0FBYyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0QsTUFBTSxHQUFHLEdBQXlCLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUF5QixPQUFPLENBQUM7Z0JBRTFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFDMUIsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixLQUFLLENBQ04sQ0FBQztnQkFFRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDNUMsZUFBZSxHQUFHLGlCQUFpQixFQUNuQyxZQUFZLENBQ2IsQ0FBQztnQkFDRixJQUFJLEtBQUssRUFBRTtvQkFDVCxJQUFJLENBQUMsWUFBWSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBbUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUM1RCxRQUFRLE9BQU8sRUFBRTtvQkFDZixLQUFLLG9CQUFvQjt3QkFDdkIsSUFBSSxPQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7NEJBQ3JDLE1BQU0sWUFBWSxHQUNoQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMsMEJBQTBCLEVBQ3JDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQixFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUN2QyxDQUFDOzRCQUNKLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt5QkFDekQ7d0JBQ0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQ2pDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsQ0FDVCxDQUFDO3dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3dCQUUzQixNQUFNO29CQUNSLEtBQUssb0JBQW9CO3dCQUN2QixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUFJLGFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLDBDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQ0FDekQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FDM0QsQ0FBQztnQ0FDSixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZO29DQUNoRCxDQUFDLENBQUMsWUFBWTtvQ0FDZCxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUNSOzRCQUNELE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUNqQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixPQUFPLEVBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQ3hCLFFBQVEsQ0FDVCxDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lCQUM1Qjt3QkFDRCxNQUFNO29CQUNSLEtBQUssd0JBQXdCO3dCQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUFJLGFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLDBDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQ0FDekQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FDM0QsQ0FBQztnQ0FDSixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZO29DQUNoRCxDQUFDLENBQUMsWUFBWTtvQ0FDZCxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUNSOzRCQUNELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUM5QixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixPQUFPLEVBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQ3hCLFFBQVEsQ0FDVCxDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lCQUM1Qjt3QkFDRCxNQUFNO29CQUNSLEtBQUssd0JBQXdCO3dCQUMzQixJQUFJLE9BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTs0QkFDckMsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLENBQ3ZDLENBQUM7NEJBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDMUIsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUN6RDt3QkFDRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7d0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLE1BQU07b0JBQ1I7d0JBQ0UsTUFBTSxJQUFJLEdBQXFCLE9BQU8sQ0FBQztpQkFDMUM7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCOztLQUNGO0lBRUsscUJBQXFCLENBQ3pCLGNBQXNCLEVBQ3RCLGFBQXFCOztZQUVyQiw0RkFBNEY7WUFDNUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhO2dCQUMvRCxjQUFjLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pELGFBQWEsS0FBSyxDQUFDO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUkscUJBQXFCLENBQUM7WUFDL0QsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdEMsVUFBVSxDQUFDLDZCQUE2QixDQUN6QyxDQUFDO2dCQUNGLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO29CQUM1QyxPQUFPLEtBQUssQ0FBQztpQkFDZDtxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO0tBQUE7SUFFRCxvQ0FBb0M7UUFDbEMsMEJBQTBCO1FBQzFCLCtCQUErQjtRQUUvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDL0IsaUJBQWlCLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLHlEQUF5RDtRQUN6RCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUN0RCxXQUFXLENBQUMsSUFBSSxDQUNqQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhDLHFDQUFxQztRQUNyQyxXQUFXLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUM5RCxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsV0FBVyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNoRSxXQUFXLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxXQUFXLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDdkQsV0FBVyxDQUFDLGVBQWU7WUFDekIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUssaUJBQWlCLENBQ3JCLFNBQXdCLEVBQ3hCLE9BQTZCLEVBQzdCLFFBQTRCLEVBQzVCLFFBQWdCLEVBQ2hCLE9BQXlCOzs7WUFFekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDcEQsT0FBTzthQUNSO1lBRUQsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDMUQsTUFBTSxrQkFBa0IsR0FDdEIsU0FBUyxLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQjtvQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXO3dCQUM1QyxPQUFPLENBQUMsV0FBVztvQkFDckIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0JBQ2hFLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFWixJQUNFLG1CQUFtQjtnQkFDbkIsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUMzRDtnQkFDQSxPQUFPLENBQUMsSUFBSSxDQUNWLDhEQUE4RCxDQUMvRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLElBQUksbUJBQW1CLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3BCO2dCQUNELE9BQU87YUFDUjtZQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQztnQkFDNUQsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssb0JBQW9CO29CQUM3QyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYzt3QkFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFDeEM7Z0JBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7YUFDcEM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFtQixJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDNUQsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxvQkFBb0I7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUc7d0JBQ3BCLE9BQU87d0JBQ1AsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQztvQkFFRixNQUFNO2dCQUNSLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHO3dCQUNwQixPQUFPO3dCQUNQLElBQUksRUFBRSxRQUFRO3FCQUNmLENBQUM7b0JBQ0YsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLElBQUksR0FBcUIsT0FBTyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztLQUNwQjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLFdBQVcsQ0FDZixRQUFnQixFQUNoQixXQUEyQixFQUMzQixPQUE2QixFQUM3QixRQUE0QixFQUM1QixlQUFvQyxFQUNwQyxjQUFxQzs7WUFFckMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsYUFBYSxFQUFFO2dCQUN4RSxPQUFPO2dCQUNQLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUNqQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLENBQ1QsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLHNEQUFzRDtnQkFFdEQsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLHdCQUF3QixFQUFFO29CQUNyRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7aUJBQ0g7cUJBQU0sSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRTtvQkFDL0MsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQ2xDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxDQUNoQixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLG1CQUFtQjtvQkFDbkIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQzlCLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxDQUNoQixDQUFDO2lCQUNIO2FBQ0Y7WUFFRCxPQUFPLDRCQUE0QixDQUFDLE1BQU0sQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFSyxxQkFBcUIsQ0FDekIsUUFBZ0IsRUFDaEIsV0FBMkIsRUFDM0IsT0FBNkIsRUFDN0IsUUFBNEI7O1lBRTVCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUNsQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLENBQ1QsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUN6QixTQUFpQixFQUNqQixXQUEyQixFQUMzQixRQUE4QixFQUM5QixPQUE2QixFQUM3QixZQUFnQyxFQUNoQyxXQUErQjs7O1lBRS9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbkQsSUFBSSxjQUE4QixDQUFDO1lBQ25DLElBQUksZUFBK0IsQ0FBQztZQUVwQyw4RUFBOEU7WUFDOUUsVUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEVBQUU7Z0JBQ2pDLGNBQWMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1lBRUQsVUFBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEVBQUU7Z0JBQ2xDLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM3QyxZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO1lBQ0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO2dCQUM5QyxNQUFNLFVBQVUsR0FBbUI7b0JBQ2pDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDakIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDbkQsQ0FBQyxJQUFxQixFQUFtQixFQUFFOzRCQUN6QyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0NBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJOzZCQUNoQixDQUFDO3dCQUNKLENBQUMsQ0FDRjt3QkFDRCxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDN0MsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsQyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUNGO3dCQUNELGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsUUFBUSxDQUFDLGNBQWM7NEJBQ3hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFOzRCQUMvQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsY0FBYzs0QkFDMUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLElBQUk7NEJBQ25DLGVBQWUsRUFBRTtnQ0FDZjtvQ0FDRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7b0NBQ3ZDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxJQUFJO29DQUNwQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0NBQ3pCLElBQUksRUFBRSxZQUFZO2lDQUNuQjs2QkFDRjt5QkFDRjt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjOzRCQUN2QyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsRUFBRTs0QkFDOUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGNBQWM7NEJBQ3pDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO29DQUN0QyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsSUFBSTtvQ0FDbkMsSUFBSSxFQUFFLFdBQVc7aUNBQ2xCOzZCQUNGO3lCQUNGO3dCQUNELHFCQUFxQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCO3dCQUNyRSxRQUFRLEVBQUU7NEJBQ1IsZUFBZSxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7NEJBQzFELGlCQUFpQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsaUJBQWlCOzRCQUM3RCxrQkFBa0IsRUFBRSxJQUFJOzRCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxDQUN6RCxRQUFRLENBQUMsV0FBVyxDQUNyQjs0QkFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7eUJBQ3pDO3dCQUNELG1CQUFtQjt3QkFDbkIsTUFBTSxFQUFFOzRCQUNOLGVBQWUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDNUQsa0JBQWtCLEVBQUUsSUFBSTs0QkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FDekQsT0FBTyxDQUFDLFdBQVcsQ0FDcEI7NEJBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO3lCQUN4Qzt3QkFDRCxZQUFZLEVBQUUsa0JBQWtCO3FCQUNqQztvQkFDRCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07b0JBQ3hCLEtBQUssRUFBRSxNQUFNLENBQ1gsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDMUQ7b0JBQ0QsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUF3QjtvQkFDL0MsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtvQkFDL0IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlO29CQUN6QyxZQUFZLEVBQUUsUUFBUSxDQUFDLGNBQWM7b0JBQ3JDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDbkMsV0FBVyxFQUFFLFlBQVksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN4SSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUM1QixtQkFBbUIsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3BJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ2pELENBQUM7Z0JBQ0YsMkVBQTJFO2dCQUMzRSxJQUFJLGNBQWMsRUFBRTtvQkFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7aUJBQzNEO2dCQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ3ZELFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFDZixZQUFZLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQzFELENBQUM7Z0JBRUYsSUFBSSxZQUFZLEtBQUssNEJBQTRCLENBQUMsUUFBUSxFQUFFO29CQUMxRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3RCO2dCQUNELE9BQU8sWUFBWSxDQUFDO2FBQ3JCO1lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxRQUFRLENBQUM7O0tBQzlDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUE7UUFDakQsSUFBSSxzQkFBMEMsQ0FBQTtRQUM5QyxJQUFJLHdCQUE0QyxDQUFBO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDMUcsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsc0JBQXNCLElBQUksc0JBQXNCLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztvQkFBRSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQTtZQUMxSixDQUFDLENBQUMsQ0FBQTtZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN0RyxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQyx3QkFBd0IsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO29CQUFFLHdCQUF3QixHQUFHLGlCQUFpQixDQUFBO1lBQ2hLLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG9CQUF3QyxDQUFBO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDMUcsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsb0JBQW9CLElBQUksb0JBQW9CLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQzt3QkFBRSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQTtnQkFDcEosQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3BELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ3RHLElBQUksaUJBQWlCLElBQUksQ0FBQyxDQUFDLHdCQUF3QixJQUFJLHdCQUF3QixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7d0JBQUUsd0JBQXdCLEdBQUcsaUJBQWlCLENBQUE7Z0JBQ2hLLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksd0JBQXdCLEVBQUM7WUFDM0IsSUFBSSxvQkFBb0IsRUFBQztnQkFDdkIsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLHdCQUF3QixDQUFDLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLElBQUksb0JBQW9CLENBQUMsUUFBUTtvQkFDaEssT0FBTyxFQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUMsQ0FBQTthQUM1SDtpQkFDSSxJQUFJLHNCQUFzQixDQUFDLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxLQUFLO2dCQUNwRSxPQUFPLEVBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFDLENBQUE7WUFDOUYsT0FBTyxFQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixDQUFDLFFBQVEsRUFBQyxDQUFBO1NBQ2pHO2FBQ0ksSUFBSSxvQkFBb0I7WUFBRSxPQUFPLEVBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBQyxDQUFBO1FBQ3hKLE9BQU8sRUFBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RCxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVPLFFBQVE7O1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQ2hDLG9CQUFvQixDQUFDLHNCQUFzQixFQUMzQztZQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsVUFBSSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLFFBQVEsQ0FBQyxHQUFHLEdBQUc7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDMUIsNENBQTRDLENBQzdDLENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLHFCQUFxQixDQUFDLGFBQWEsRUFBRTtZQUNqRSxnREFBZ0Q7WUFFaEQsVUFBSSxJQUFJLENBQUMsZUFBZSwwQ0FBRSxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUMxQixvREFBb0QsQ0FDckQsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUM5RDtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEMsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUNoQyxvQkFBb0IsQ0FBQyxzQkFBc0IsRUFDM0M7Z0JBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2FBQzVDLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsS0FBK0I7UUFFL0IsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9CLE9BQU87WUFDTCxXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDN0IsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUN0QixLQUErQjs7UUFFL0IsTUFBTSxXQUFXLEdBQXlCLEtBQUssQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ3REO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsV0FBVyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztTQUNoRTtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDbEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUM1QztRQUNELFdBQVcsQ0FBQyxtQkFBbUIsZUFDN0IsSUFBSSxDQUFDLGNBQWMsMENBQUUsV0FBVywwQ0FBRSxXQUFXLENBQUM7UUFFaEQsV0FBVyxDQUFDLGtCQUFrQixlQUM1QixJQUFJLENBQUMsWUFBWSwwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsQ0FBQztRQUU5QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU0saUJBQWlCLENBQUMsWUFBMEI7O1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDO1FBRTNFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUI7WUFDdkUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBQzNELENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUN0QyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUNqRCxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUNoRCxDQUFDO1FBRUYsSUFDRSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDbkMscUJBQXFCLENBQUMsYUFBYSxFQUNuQztZQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUI7Z0JBQ3BFLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUNwQyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUMvQyxZQUFZLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUM5QyxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQUEsWUFBWSxDQUFDLFVBQVUsMENBQUUsa0JBQWtCLDBDQUFFLE1BQU0sRUFDdkUsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUM3RDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUU3RCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7U0FDeEQ7UUFFRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsbUJBQW1CO2dCQUNoRSxpQkFBaUIsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLGlCQUFpQjthQUM3RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFDRSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDbkMscUJBQXFCLENBQUMsaUJBQWlCLEVBQ3ZDO1lBQ0EsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQ3RDLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUN0QyxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsWUFBWSxDQUNsQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsVUFBMEI7O1FBQ3ZDLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7UUFFRCxNQUFNLEtBQUssR0FBNkI7WUFDdEMsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7WUFDeEMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQzdCLGlCQUFpQixjQUFFLFVBQVUsQ0FBQyxZQUFZLDBDQUFFLFdBQVcsMENBQUUsRUFBRTtZQUMzRCxtQkFBbUIsY0FBRSxVQUFVLENBQUMsY0FBYywwQ0FBRSxXQUFXLDBDQUFFLEVBQUU7WUFDL0QsUUFBUSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1lBQ2pDLEtBQUssRUFBRSxVQUFVLENBQUMsaUJBQWlCO1lBQ25DLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQ3ZDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQ3pELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDNUI7WUFDRCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUMzRCxVQUFVLENBQUMsZ0JBQWdCLENBQzVCO1lBQ0QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FDdkQsVUFBVSxDQUFDLGVBQWUsQ0FDM0I7WUFDRCx1QkFBdUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUN6RCxVQUFVLENBQUMsZUFBZSxDQUMzQjtZQUNELGFBQWEsY0FBRSxVQUFVLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLEVBQUU7WUFDdEQsa0JBQWtCLFFBQUUsVUFBVSxDQUFDLFNBQVMsMENBQUUsR0FBRyxDQUMzQyxDQUFDLFFBQW9DLEVBQUUsRUFBRTtnQkFDdkMsT0FBTyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FDRjtZQUNELHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxxQkFBcUI7U0FDeEQsQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDakMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdkI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxFQUFFO1lBQzVCLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBRUQsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2dCQUN2QyxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsTUFBTSxDQUNoRSxDQUFDO1NBQ0w7UUFFRCxRQUFRLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDakMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLE1BQU0sQ0FDOUQsQ0FBQztTQUNMO1FBRUQsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7WUFDekMsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUI7Z0JBQzFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE1BQU07U0FDVDtRQUVELElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ2xEO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBMkIsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVcsQ0FDVCxpQkFBeUIsRUFDekIsZUFBdUI7UUFFdkIsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztTQUNsQzthQUFNLElBQUksZUFBZSxFQUFFO1lBQzFCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO1NBQ2xDO1FBQ0Q7WUFDRSxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELDBCQUEwQixDQUN4QixhQUE4QztRQUU5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzFCLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBQztZQUN2QixJQUFHO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUE7Z0JBQ2xJLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFDakosSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUE7b0JBQ2hJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUE7aUJBQzlJO2FBQ0Y7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQzthQUNwRTtTQUNGO0lBQ0gsQ0FBQztJQUVELGlDQUFpQyxDQUFDLFVBQXNCO1FBQ3RELE1BQU0sZUFBZSxHQUE2QixVQUFVLENBQUMsV0FBVyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3BELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLGlCQUFpQixDQUFDO1FBRW5ELDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLHlCQUF5QjtZQUMvRCxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQztZQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUN0QyxlQUFlLENBQUMseUJBQXlCLEVBQ3pDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDeEMsQ0FBQztRQUVGLElBQUksZUFBZSxDQUFDLFdBQVcsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsdUJBQXVCO2dCQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUVsRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ3BDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDdkMsZUFBZSxDQUFDLHFCQUFxQixDQUN0QyxDQUFDO1NBQ0g7UUFFRCxJQUNFLGVBQWUsQ0FBQyxXQUFXLEtBQUsscUJBQXFCLENBQUMsaUJBQWlCLEVBQ3ZFO1lBQ0EsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRTtZQUN2QyxJQUFJLENBQUMsYUFBYTtpQkFDZixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUM7aUJBQ3ZELFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUc7b0JBQ3BCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO29CQUMzQixXQUFXLEVBQUU7d0JBQ1gsRUFBRSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7d0JBQ3ZCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUMzQixPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTzt3QkFDakMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7d0JBQ3pDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO3dCQUM3QyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUI7cUJBQzFEO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxlQUFlLENBQUMsaUJBQWlCLEVBQUU7WUFDckMsSUFBSSxDQUFDLGFBQWE7aUJBQ2Ysa0JBQWtCLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO2lCQUNyRCxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRztvQkFDbEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO29CQUN6QixXQUFXLEVBQUU7d0JBQ1gsRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFO3dCQUNyQixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7d0JBQ3pCLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTzt3QkFDL0IsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO3dCQUN2QyxhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWE7d0JBQzNDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7cUJBQ3hEO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhO2lCQUNmLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7aUJBQ2pELFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHO29CQUNqQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7b0JBQ3RCLFdBQVcsRUFBRTt3QkFDWCxFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUU7d0JBQ2xCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTt3QkFDdEIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO3dCQUM1QixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7d0JBQ3BDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYTt3QkFDeEMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLG1CQUFtQjtxQkFDckQ7aUJBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNwQixVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FDWixJQUFZLEVBQ1osU0FBb0M7UUFFcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDeEQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxFQUFFLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxpQkFBdUM7UUFDbEUsSUFBSSxJQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ3JCLElBQUksaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuRCxPQUFPO29CQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ3pDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxNQUFNO29CQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ3ZDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUNuQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVLLHdCQUF3QixDQUM1QixTQUFpQixFQUNqQixVQUEwQixFQUMxQixpQkFBdUMsRUFDdkMsUUFBNEI7OztZQUU1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUksZUFBK0IsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsVUFBSSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxZQUFZLDBDQUFFLE1BQU0sRUFBRTtnQkFDM0MsZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FDN0MsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQyxDQUFDO2FBQ0g7WUFFRCxzQ0FBc0M7WUFDdEMsbUNBQW1DO1lBQ25DLElBQUk7WUFDSixNQUFNLFNBQVMsR0FDYixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN4QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzdDLFFBQVEsRUFDUixpQkFBaUIsQ0FDbEIsQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNsRSx1RUFBdUU7Z0JBQ3ZFLDRCQUE0QjtnQkFDNUIsZUFBZTtnQkFDZixpQ0FBaUM7Z0JBQ2pDLHFDQUFxQztnQkFDckMsb0NBQW9DO2dCQUNwQyxTQUFTO2dCQUNULE1BQU07Z0JBQ04sS0FBSztnQkFDTCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtnQkFFOUMsTUFBTSxVQUFVLEdBQW1CO29CQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUM3QixNQUFNLEVBQUU7d0JBQ04sZUFBZSxFQUFFLENBQUMsaUJBQWlCLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDNUQsQ0FBQyxJQUFxQixFQUFtQixFQUFFOzRCQUN6QyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0NBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJOzZCQUNoQixDQUFDO3dCQUNKLENBQUMsQ0FDRjt3QkFDRCxZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUN0RCxDQUFDLElBQWlCLEVBQWdCLEVBQUU7NEJBQ2xDLE9BQU87Z0NBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dDQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzs2QkFDOUIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsYUFBYSxFQUFFOzRCQUNiLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjOzRCQUNqRCxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFOzRCQUN4QyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjOzRCQUNuRCxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzRCQUM1QyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO29DQUNuQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsSUFBSTtvQ0FDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29DQUNyQixJQUFJO2lDQUNMOzZCQUNGO3lCQUNGO3dCQUNELHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMscUJBQXFCO3dCQUNqRSxRQUFRLEVBQUU7NEJBQ1IsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCOzRCQUNwQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzs0QkFDdEQsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7NEJBQ3pELFdBQVcsRUFBRSxJQUFJLENBQUMseUNBQXlDLENBQ3pELGlCQUFpQixDQUFDLFdBQVcsQ0FDOUI7eUJBQ0Y7d0JBQ0QsWUFBWSxFQUFFLGtCQUFrQjt3QkFDaEMsa0JBQWtCO3FCQUNuQjtvQkFDRCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07b0JBQ3hCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDckIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUF3QjtvQkFDM0MsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO29CQUN4QyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtvQkFDbEQsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7b0JBQzlDLFdBQVcsRUFBRSxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzVHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQzVCLG1CQUFtQixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3hHLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ2pELENBQUM7Z0JBRUYsc0RBQXNEO2dCQUN0RCxJQUFJLGVBQWUsRUFBRTtvQkFDbkIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQztpQkFDM0Q7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsVUFBVSxFQUNmLFFBQVEsQ0FBQyxjQUFjLENBQ3hCLENBQUM7Z0JBRUYsSUFBSSxZQUFZLEtBQUssNEJBQTRCLENBQUMsUUFBUSxFQUFFO29CQUMxRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3RCO2dCQUNELE9BQU8sWUFBWSxDQUFDO2FBQ3JCO1lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLENBQUM7O0tBQzVDO0lBRUssd0JBQXdCLENBQzVCLFNBQWlCLEVBQ2pCLFVBQTBCLEVBQzFCLFFBQThCLEVBQzlCLE9BQTZCLEVBQzdCLFlBQWdDLEVBQ2hDLFdBQStCOzs7WUFFL0IsNkJBQTZCO1lBQzdCLG1DQUFtQztZQUNuQyxJQUFJO1lBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVsRCxJQUFJLFlBQTRCLENBQUM7WUFFakMsOEVBQThFO1lBRTlFLFVBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUNsQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4RTtZQUVELE1BQU0sU0FBUyxHQUNiLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDN0MsWUFBWSxFQUNaLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtnQkFDOUMsTUFBTSxVQUFVLEdBQW1CO29CQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxTQUFTO29CQUNsQixNQUFNLEVBQUU7d0JBQ04sZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25ELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzdDLENBQUMsSUFBaUIsRUFBZ0IsRUFBRTs0QkFDbEMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXOzZCQUM5QixDQUFDO3dCQUNKLENBQUMsQ0FDRjt3QkFDRCxhQUFhLEVBQUU7NEJBQ2IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxjQUFjOzRCQUN4QyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRTs0QkFDL0IsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGNBQWM7NEJBQzFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxJQUFJOzRCQUVuQyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO29DQUN2QyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsSUFBSTtvQ0FDcEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29DQUN6QixJQUFJLEVBQUUsWUFBWTtpQ0FDbkI7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYzs0QkFDdkMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEVBQUU7NEJBQzlCLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxjQUFjOzRCQUN6QyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtvQ0FDdEMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLElBQUk7b0NBQ25DLElBQUksRUFBRSxXQUFXO2lDQUNsQjs2QkFDRjt5QkFDRjt3QkFDRCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLHFCQUFxQjt3QkFDckUsUUFBUSxFQUFFOzRCQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLGdCQUFnQjs0QkFDeEMsZUFBZSxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7NEJBQzFELGlCQUFpQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsaUJBQWlCOzRCQUM3RCxXQUFXLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxDQUN6RCxRQUFRLENBQUMsV0FBVyxDQUNyQjt5QkFDRjt3QkFDRCxtQkFBbUI7d0JBQ25CLE1BQU0sRUFBRTs0QkFDTixPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7NEJBQ3ZDLGVBQWUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FDekQsT0FBTyxDQUFDLFdBQVcsQ0FDcEI7eUJBQ0Y7d0JBQ0QsWUFBWSxFQUFFLGtCQUFrQjtxQkFDakM7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0JBQ3pCLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBd0I7b0JBQy9DLFdBQVcsRUFBRSxTQUFTO29CQUN0QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7b0JBQy9CLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtvQkFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxjQUFjO29CQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ25DLFdBQVcsRUFBRSxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3BILFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQzVCLG1CQUFtQixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ2hILFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ2pELENBQUM7Z0JBQ0Ysc0RBQXNEO2dCQUN0RCxJQUFJLFlBQVksRUFBRTtvQkFDaEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztpQkFDeEQ7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsVUFBVSxFQUNmLFlBQVksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FDMUQsQ0FBQztnQkFFRixJQUFJLFlBQVksS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7b0JBQzFELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0QsT0FBTyxZQUFZLENBQUM7YUFDckI7WUFDRCxPQUFPLDRCQUE0QixDQUFDLE1BQU0sQ0FBQzs7S0FDNUM7SUFFRCx5Q0FBeUMsQ0FDdkMsUUFBMEI7UUFFMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxhQUFhLENBQUMsaUJBQWlCLENBQUM7YUFDeEM7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxlQUFnQztRQUN2RCxNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsWUFBWSxJQUFHLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxXQUFXLENBQUE7WUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ2hELE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUN0QyxRQUFRLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUM5QyxJQUFJLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUN0QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUE2QixDQUFDLFdBQThCO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDaEIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ3pFLFFBQVEsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCO1FBQ2YsTUFBTSxZQUFZLEdBQXNCLElBQUksQ0FBQztRQUU3QyxrRUFBa0U7UUFDbEUsNkNBQTZDO1FBQzdDLE1BQU07UUFFTixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDUyxZQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLENBQ2xCLElBQXVCLEVBQ3ZCLE9BQTZCLEVBQzdCLEVBQUU7WUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsWUFBa0MsRUFBRSxFQUFFO29CQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFFLEVBQUU7O3dCQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUNULE9BQU8sSUFBSSxDQUFDO3lCQUNiO3dCQUNELHVDQUNLLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLG1CQUFNLElBQUksR0FBSTtrQ0FDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQ0FDMUQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVE7NEJBQzFDLE9BQU87Z0NBQ0wsQ0FBQyxPQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDBDQUFFLHlCQUF5QixDQUN6RCxDQUFDLENBQUMsSUFBSTt5QkFDVCxDQUFDLEtBQ0YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUM3RCxVQUFVLEVBQUUsQ0FBQyxjQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUNsQywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQ3ZDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUMsWUFBa0MsRUFBRSxFQUFFO29CQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFFLEVBQUU7d0JBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUU7NEJBQ1QsT0FBTyxJQUFJLENBQUM7eUJBQ2I7d0JBQ0QsdUNBQ0ssSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsbUJBQzNCLElBQUksR0FDVCxPQUFPOzRCQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUM7NEJBQzFELENBQUMsQ0FBQyxFQUFFLENBQ1AsS0FDRCxRQUFRLEVBQUUsS0FBSyxFQUNmLFVBQVUsRUFBRSxJQUFJLElBQ2hCO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLENBQ2YsSUFBdUIsRUFDdkIsT0FBNkIsRUFDN0IsU0FBZ0MsRUFDaEMsRUFBRTtZQUNGLE9BQU8sQ0FBQyxZQUFrQyxFQUF3QixFQUFFO2dCQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FDckIsQ0FBQyxJQUF3QixFQUFzQixFQUFFO29CQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNULE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsaUNBRS9CLElBQUksS0FDUCxRQUFRLEVBQ04sSUFBSSxDQUFDLGNBQWM7NEJBQ25CLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUV2RCxPQUFPO3dCQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUM7d0JBQzFELENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztnQkFDSixDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxPQUFPO2FBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDdkIsTUFBTSxDQUNMLENBQ0UsS0FBMkIsRUFDM0IsSUFBd0IsRUFDRixFQUFFO1lBQ3hCLE1BQU0sSUFBSSxtQ0FDTCxJQUFJLEtBQ1AsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ2pDLENBQUMsT0FBNkIsRUFBd0IsRUFBRTtvQkFDdEQsT0FBTyxnQ0FDRixPQUFPLEtBQ1Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FDTix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLGFBQWEsQ0FBQyxRQUFRLENBQ3ZCLENBQ0YsRUFDRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFDaEMsUUFBUSxDQUNOLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsYUFBYSxDQUFDLFFBQVEsQ0FDdkIsQ0FDRixFQUNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNsQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUNoQyxRQUFRLENBQ04sb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxhQUFhLENBQUMsUUFBUSxDQUN2QixDQUNGLEVBQ0Qsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FDTix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLGFBQWEsQ0FBQyxRQUFRLENBQ3ZCLENBQ0YsR0FDc0IsQ0FBQztnQkFDNUIsQ0FBQyxDQUNGLEVBQ0QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzdCLENBQUMsT0FBNkIsRUFBd0IsRUFBRTtvQkFDdEQsdUNBQ0ssT0FBTyxLQUNWLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNsQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUNoQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQzNDLEVBQ0Qsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FDL0MsRUFFRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFDaEMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FDbEQsRUFDRCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDdEMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFDcEMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FDdEQsSUFDRDtnQkFDSixDQUFDLENBQ0YsR0FDRixDQUFDO1lBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FDYixZQUE2QixFQUM3QixRQUE4QixFQUM5QixPQUE4QjtRQUU5QixPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsZUFBZTthQUMxQztZQUNEO2dCQUNFLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLCtCQUErQjthQUMxRDtZQUNEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWU7YUFDMUM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVU7YUFDckM7WUFDRDtnQkFDRSxJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxxQkFBcUI7YUFDaEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7YUFDM0M7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVk7YUFDdkM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjO2FBQy9CO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYzthQUMvQjtZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLGdCQUFnQjthQUMzQztZQUNEO2dCQUNFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLHNCQUFzQjthQUNqRDtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXO2FBQ3RDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVk7YUFDdkM7WUFFRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWM7YUFDL0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixLQUFLLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWM7YUFDL0I7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUvQixNQUFNLFVBQVUsR0FBRztnQkFDakIsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUU7Z0JBQ25CLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLG9CQUFvQjthQUNqQyxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUNLLGNBQWMsQ0FBQyxHQUFROztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ3hDLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDakIsS0FBSyxPQUFPO29CQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDdkMsTUFBTTtnQkFDUixLQUFLLEtBQUs7b0JBQ1IsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO29CQUNyQyxNQUFNO2dCQUNSLEtBQUssVUFBVTtvQkFDYixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7b0JBQzFDLE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyxxQkFBcUI7aUJBQ3ZCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMscUJBQXFCO2lCQUN2QixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUNyQixJQUFJLENBQUMscUJBQXFCO3FCQUN2QixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUNwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO2FBQ2xCO1lBQ0QsUUFBUTtRQUNWLENBQUM7S0FBQTs7QUFyb0ZlLDJDQUFzQixHQUFHLGFBQWEsQ0FBQztBQUN2Qyw0Q0FBdUIsR0FBRyxjQUFjLENBQUM7QUFDekMsa0NBQWEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHtcclxuICBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcyxcclxuICBDaGVhcGVzdFJhaWxQcmljZXMsXHJcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIG1heFRyYXZlbGxlcldlbGxiZWluZyxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVFJhaWxGYXJlLFxyXG4gIE9CVFJhaWxGYXJlVHlwZXMsXHJcbiAgT0JUUmFpbEludGVybmFsRmFyZSxcclxuICBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICBPQlRSYWlsUXVvdGVSZXN1bHQsXHJcbiAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgUmVjdXJzaXZlUGFydGlhbCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIFdlbGxiZWluZ0VudW1cclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBSYWlsQ2xhc3MsXHJcbiAgUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBSYWlsVGlja2V0RXh0cmEsXHJcbiAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLFxyXG4gIFJhaWxKb3VybmV5RmFyZSxcclxuICBSYWlsU3RhdGlvbixcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgUmFpbEFjY291bnQsXHJcbiAgUmFpbFRpY2tldFF1ZXVlLFxyXG4gIFJhaWxKb3VybmV5TGVnXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVJhaWxRdW90ZUZldGNoZXIsXHJcbiAgUmFpbFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9yYWlsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24uZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBSYWlsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1haXJwb3J0LWV4cHJlc3Mtc3RhdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBY2NvdW50c0xpc3QsXHJcbiAgUmFpbEJhc2tldEl0ZW0sXHJcbiAgVGlja2V0RXh0cmFzLFxyXG4gIFRpY2tldFF1ZXVlTGlzdFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1iYXNrZXQtaXRlbS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsUmVjZW50U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1yZWNlbnQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbFF1b3RlUmVzdWx0LCBSYWlsUXVvdGVSZXN1bHRBcnJheSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBSYWlsUnVsZUVuaXR5LFxyXG4gIFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gIFJhaWxTdW1tYXJ5XHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcclxuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElSYWlsU2VsZWN0ZWRUaWNrZXQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtc2VsZWN0ZWQtdGlja2V0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxEaXJlY3Rpb24gfSBmcm9tICcuL3JhaWwtZGlyZWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBSYWlsSW5kZXhUb1RpY2tldCB9IGZyb20gJy4vcmFpbC1pbmRleC10by10aWNrZXQnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuZXhwb3J0IGVudW0gUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUmFpbEpvdXJuZXlGYXJlVHlwZSB7IC8vIG1heSBuZWVkIHRvIGJlIGV4cGFuZGVkIGZvciBkdWFsL3NwbGl0XHJcbiAgUmV0dXJuID0gJ1JldHVybicsXHJcbiAgU2luZ2xlID0gJ1NpbmdsZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhaWxFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBSYWlsVGVtcFBhcmFtcyxcclxuICAgIFJhaWxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU3VtbWFyeTogUmFpbFJ1bGVFbml0eTtcclxuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcztcclxuICBwcml2YXRlIGFsdGVybmF0aXZlV2VsbGJlaW5nOiBSYWlsV2VsbGJlaW5nT2JqZWN0SW50ZXJmYWNlO1xyXG5cclxuICBnZXQgc2VsZWN0ZWRTZWN0aW9uKCk6IE9CVFJhaWxGYXJlVHlwZXMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU2VjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRpY2tldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZFRpY2tldChzZWxlY3RlZFRpY2tldDoge1xyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgfSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcclxuICAgICAgICB0aGlzLnN1bW1hcnkub3V0Ym91bmQgfHwgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEluYm91bmRUaWNrZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldChzZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRTdW1tYXJ5ID0gdGhpcy5zdW1tYXJ5LnJldHVybi5maW5kKFxyXG4gICAgICAgICh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvdXJuZXlIYXNoID09PSB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zYWN0aW9uSWRlbnRpZmllcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfcmFpbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3JhaWxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdPbmUtV2F5JywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgLy8geyBkaXNwbGF5OiAnRHVhbCBTaW5nbGVzJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5EdWFsU2luZ2xlSm91cm5leSB9LFxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBjbGFzc1R5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQW55JywgdmFsdWU6IFJhaWxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IFJhaWxDbGFzcy5TdGFuZGFyZCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmlyc3QnLCB2YWx1ZTogUmFpbENsYXNzLkZpcnN0IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uczogSVJhaWxBaXJwb3J0RXhwcmVzc1N0YXRpb25zW10gPSBbXHJcbiAgICB7IGNvZGU6ICdIUDEtMycsIG5hbWU6ICdIZWF0aHJvdyBUMS0zIC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ0hQNCcsIG5hbWU6ICdIZWF0aHJvdyBUNCAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDUnLCBuYW1lOiAnSGVhdGhyb3cgVDUgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnUEgxLTMnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQxLTMnIH0sXHJcbiAgICB7IGNvZGU6ICdQSDQnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQ0JyB9LFxyXG4gICAgeyBjb2RlOiAnUEg1JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNScgfSxcclxuICAgIHsgY29kZTogJ0dWJywgbmFtZTogJ0dhdHdpY2sgLSBWaWN0b3JpYScgfSxcclxuICAgIHsgY29kZTogJ1ZHJywgbmFtZTogJ1ZpY3RvcmlhIC0gR2F0d2ljaycgfSxcclxuICAgIHsgY29kZTogJ1NMJywgbmFtZTogJ1N0YW5zdGVkIC0gTGl2ZXJwb29sIFN0cmVldCcgfSxcclxuICAgIHsgY29kZTogJ0xTJywgbmFtZTogJ0xpdmVycG9vbCBTdHJlZXQgLSBTdGFuc3RlZCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBhaXJwb3J0RXhwcmVzc1N0YXRpb25zQ29kZXM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IHsgZGVwOiBzdHJpbmc7IGFycjogc3RyaW5nIH07XHJcbiAgfSA9IHtcclxuICAgICdIUDEtMyc6IHsgZGVwOiAnSFhYJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgJ1BIMS0zJzogeyBkZXA6ICdQQUQnLCBhcnI6ICdIWFgnIH0sXHJcbiAgICBIUDQ6IHsgZGVwOiAnSEFGJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg0OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hBRicgfSxcclxuICAgIEhQNTogeyBkZXA6ICdIV1YnLCBhcnI6ICdQQUQnIH0sXHJcbiAgICBQSDU6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFdWJyB9LFxyXG4gICAgR1Y6IHsgZGVwOiAnR1RXJywgYXJyOiAnVklDJyB9LFxyXG4gICAgVkc6IHsgZGVwOiAnVklDJywgYXJyOiAnR1RXJyB9LFxyXG4gICAgU0w6IHsgZGVwOiAnU1NEJywgYXJyOiAnTFNUJyB9LFxyXG4gICAgTFM6IHsgZGVwOiAnTFNUJywgYXJyOiAnU1NEJyB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHJhaWxDcml0ZXJpYSA9IFtSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LCBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIC8vIFlORzogXCJZb3VuZyBwZXJzb25zIHJhaWxjYXJkXCIsXHJcbiAgLy8gRElTOiBcIkRpc2FiaWxpdHkgcmFpbGNhcmRcIixcclxuICAvLyBGQU06IFwiRmFtaWx5IHJhaWxjYXJkXCIsXHJcbiAgLy8gSE1GOiBcIkZvcmNlcyByYWlsY2FyZFwiLFxyXG4gIC8vIFRBRDogXCJUcmF2ZWwgYWdlbmN5IGRpc2NvdW50XCJcclxuICBwdWJsaWMgcmVtb3ZlUGFzc2luZ1BvaW50c0Zyb21SZXN1bHRzID0gdHJ1ZTtcclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5SYWlsO1xyXG5cclxuICBwcml2YXRlIF9ib29rUmFpbEZyb21MaXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWFwZXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICBvdXRib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBpbmJvdW5kQ2hlYXBlc3Q6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgfT4oe1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgaW5ib3VuZENoZWFwZXN0OiB7XHJcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IHtcclxuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IHtcclxuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGdldCBib29rUmFpbEZyb21MaXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmU7XHJcbiAgfVxyXG5cclxuICBzZXQgYm9va1JhaWxGcm9tTGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYm9va1JhaWxGcm9tTGl2ZSA9IHZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWF4RGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIC8vIEVOVC0xNTU3IC0gbWF4IEV2b2x2aSBzZWFyY2ggZGF0ZSBpcyA2IG1vbnRocyBpbiBmdXR1cmVcclxuICAgIHllYXI6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLm1vbnRoKCksXHJcbiAgICBkYXk6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgLy8gcHJpdmF0ZSBfY2hvc2VuVGlja2V0R3JvdXA6IFJhaWxUaWNrZXRHcm91cDtcclxuICBwcml2YXRlIF92aWFMb2NhdGlvbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IFJhaWxUZW1wUGFyYW1zO1xyXG4gIHB1YmxpYyBzdW1tYXJ5OiBSYWlsU3VtbWFyeSA9IHt9O1xyXG5cclxuICBnZXQgb3BlblJldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PVxyXG4gICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXQgb3BlblJldHVybihuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIGlmIChuZXdWYWwpIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPVxyXG4gICAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoVHlwZSgpOiBSYWlsU2VhcmNoSm91cm5leVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IG5ld1R5cGU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZBZHVsdHMoYWR1bHRzOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nVG8oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfSBlbHNlIGlmICh0dD8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuUmFpbENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblJhaWxDbGFzcyhuZXdDbGFzczogUmFpbENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBuZXdDbGFzcztcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBSYWlsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hDbGFzcyhjbGFzc1I6IFJhaWxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4dHJhVGltZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGV4dHJhVGltZShleHRyYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZSA9IGV4dHJhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYSh2aWE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWEgPSB2aWE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhTG9jYXRpb24oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhTG9jYXRpb24odmlhTG9jYXRpb246IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb247XHJcblxyXG4gICAgdGhpcy5fdmlhTG9jYXRpb24gPSAnJztcclxuICAgIGlmICh2aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb24ucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMDcwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW5JbmJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogbmV3RGF0ZVRpbWUueWVhcigpLFxyXG4gICAgICBtb250aDogbmV3RGF0ZVRpbWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogbmV3RGF0ZVRpbWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZS5pc0FmdGVyKHRoaXMuaW5Cb3VuZERhdGVUaW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgICAuc2V0KCdkYXRlJywgbmV3RGF0ZVRpbWUuZGF0ZSgpKVxyXG4gICAgICAgIC5zZXQoJ21vbnRoJywgbmV3RGF0ZVRpbWUubW9udGgoKSlcclxuICAgICAgICAuc2V0KCd5ZWFyJywgbmV3RGF0ZVRpbWUueWVhcigpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Ym91bmRDcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kQ3JpdGVyaWEobmV3Q3JpdDogUmFpbFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYCsrKyBTZXR0aW5nIE5ldyBDcml0ZXJpYTogJHtuZXdDcml0fSArKytgKTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhID0gbmV3Q3JpdDtcclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX291dGJvdW5kX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgb3V0Ym91bmRfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcmV0dXJuX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3JldHVybl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHJldHVybl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmV0dXJuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuQ3JpdGVyaWEobmV3Q3JpdDogUmFpbFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhcm5ldFRpY2tldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhcm5ldFRpY2tldChuZXdDYXJuZXQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQgPSBuZXdDYXJuZXQ7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2FibGVBdXRvRGlzY291bnRzKG5ld0RpczogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzID0gbmV3RGlzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByaW9yaXRpc2VCeVByaWNlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZTtcclxuICB9XHJcblxyXG4gIHNldCBwcmlvcml0aXNlQnlQcmljZShuZXdQcmlvcml0eTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlID0gbmV3UHJpb3JpdHk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXBwbHlSYWlsY2FyZHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFwcGx5UmFpbGNhcmRzKGFwQ2FyZHM6IGJvb2xlYW4pIHtcclxuICAgIGlmICghYXBDYXJkcykge1xyXG4gICAgICB0aGlzLnJhaWxDYXJkcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcclxuICB9XHJcblxyXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCByYWlsQ2FyZHModmFsdWU6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XHJcbiAgICB0aGlzLl9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcclxuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGFycml2YWxMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcclxuICAgIGlmIChkZXBhcnR1cmVMb2NhdGlvbklkICYmIGFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W11cclxuICApIHtcclxuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIFJhaWxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKVxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IG91dGJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5ib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluYm91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW291dGJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGlzRHVhbFNpbmdsZVJldHVybjogdHJ1ZSxcclxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFvdXRib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdCxcclxuICAgICAgICAgIHJldHVybjoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBpbmJvdW5kLmpvdXJuZXlMZWdzXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IE51bWJlcihcclxuICAgICAgICAgIE51bWJlcihvdXRib3VuZEZhcmUucHJpY2UgKyBpbmJvdW5kRmFyZS5wcmljZSkudG9GaXhlZCgyKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgY3VycmVuY3k6IG91dGJvdW5kRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcclxuICAgICAgICBjbzJQZXJJdGVtOiBvdXRib3VuZC5jbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgaW5ib3VuZERhdGU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgbG93ZXN0UHJpY2U6IGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSkgPyBcclxuICAgICAgICAgIDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSA6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgLy8gaWYgaW5UaWNrZXRFeHRyYXMgb3Igb3V0VGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmIChpblRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnJldHVybi50aWNrZXRFeHRyYXMgPSBpblRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZTtcclxuICB9XHJcblxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldCgpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlXHJcbiAgICBsZXQgY2hlYXBlc3RPdXRib3VuZFRpY2tldDogT0JUUmFpbEpvdXJuZXlGYXJlXHJcbiAgICBsZXQgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmVcclxuICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LmR1YWxTaW5nbGVKb3VybmV5RmFyZXNba2V5XS5maWx0ZXIoYSA9PiBhICE9IG51bGwpLnNvcnQoYSA9PiBhLnByaWNlKVswXVxyXG4gICAgICAgIGlmIChjaGVhcGVzdE9uSm91cm5leSAmJiAoIWNoZWFwZXN0T3V0Ym91bmRUaWNrZXQgfHwgY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPdXRib3VuZFRpY2tldCA9IGNoZWFwZXN0T25Kb3VybmV5XHJcbiAgICAgIH0pXHJcbiAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucmV0dXJuSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LnJldHVybkpvdXJuZXlGYXJlc1trZXldLmZpbHRlcihhID0+IGEgIT0gbnVsbCkuc29ydChhID0+IGEucHJpY2UpWzBdXHJcbiAgICAgICAgaWYgKGNoZWFwZXN0T25Kb3VybmV5ICYmICghY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0IHx8IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXlcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgbGV0IGNoZWFwZXN0UmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmVcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzWzBdLnJldHVybil7XHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ucmV0dXJuLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGVhcGVzdE9uSm91cm5leSA9IGVsZW1lbnQuZHVhbFNpbmdsZUpvdXJuZXlGYXJlc1trZXldLmZpbHRlcihhID0+IGEgIT0gbnVsbCkuc29ydChhID0+IGEucHJpY2UpWzBdXHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RPbkpvdXJuZXkgJiYgKCFjaGVhcGVzdFJldHVyblRpY2tldCB8fCBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RSZXR1cm5UaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoZWFwZXN0T25Kb3VybmV5ID0gZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXNba2V5XS5maWx0ZXIoYSA9PiBhICE9IG51bGwpLnNvcnQoYSA9PiBhLnByaWNlKVswXVxyXG4gICAgICAgICAgaWYgKGNoZWFwZXN0T25Kb3VybmV5ICYmICghY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0IHx8IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXlcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gICAgXHJcbiAgICBpZiAoY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0KXtcclxuICAgICAgaWYgKGNoZWFwZXN0UmV0dXJuVGlja2V0KXtcclxuICAgICAgICBpZiAoY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSArIGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlIDwgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlICYmIGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQuY3VycmVuY3kgPT0gY2hlYXBlc3RSZXR1cm5UaWNrZXQuY3VycmVuY3kpIFxyXG4gICAgICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgKyBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LmN1cnJlbmN5fVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgPCBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UpXHJcbiAgICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UsIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeX1cclxuICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQuY3VycmVuY3l9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjaGVhcGVzdFJldHVyblRpY2tldCkgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgKyBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LmN1cnJlbmN5fVxyXG4gICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UsIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeX1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9XHJcbiAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBSYWlsUmVjZW50U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlhTG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudmlhTG9jYXRpb24gPSB0aGlzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5pbmJvdW5kU3RhdGlvbkNvZGUgPVxyXG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmV4dHJhVGltZVRvQ2hhbmdlO1xyXG4gICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yYWlsQ2FyZFF1YWxpZmllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XHJcbiAgICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0dXJlTG9jYXRpb25JZCxcclxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbExvY2F0aW9uSWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XHJcbiAgICAgIHRoaXMub3BlblJldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxyXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9PZkFkdWx0cyxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgY2hpbGRyZW46IHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuLFxyXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxyXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkcz8ubWFwKFxyXG4gICAgICAgIChyYWlsQ2FyZDogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZD8uY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogdGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXJcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmlhTG9jYXRpb24gPT09ICcnKSB7XHJcbiAgICAgIHF1ZXJ5LnZpYUxvY2F0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ1RvO1xyXG4gICAgICBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldENyaXRlcmlhKFxyXG4gICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHN0cmluZyxcclxuICAgIGFycml2YWxEYXRlVGltZTogc3RyaW5nXHJcbiAgKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIGlmIChkZXBhcnR1cmVEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoYXJyaXZhbERhdGVUaW1lKSB7XHJcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlO1xyXG4gICAgfVxyXG4gICAge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2cocHJldmlvdXNJdGVtcylcclxuICAgIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVCl7IFxyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkZMSUdIVC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzApIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWUuc3VidHJhY3QodGhpcy5pbkJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIFJhaWwgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoUmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoUmFpbFF1ZXJ5LmpvdXJuZXlUeXBlO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hDbGFzcyA9IHNlYXJjaFJhaWxRdWVyeS5jbGFzcztcclxuICAgIHRoaXMuZXh0cmFUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5LmV4dHJhVGltZVRvQ2hhbmdlO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICA/IG1vbWVudChzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcclxuICAgICAgOiBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgICA/IG1vbWVudChzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgICAgOiBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgc2VhcmNoUmFpbFF1ZXJ5LmpvdXJuZXlUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hSYWlsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRlcGFydHVyZVN0YXRpb24pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGRlcGFydHVyZVN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogZGVwYXJ0dXJlU3RhdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiBkZXBhcnR1cmVTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgbmxjQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBkZXBhcnR1cmVTdGF0aW9uLnN0YXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZUNvZGU6IGRlcGFydHVyZVN0YXRpb24udHJhaW5saW5lQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVVbmlxdWVDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5nZXRSYWlsU3RhdGlvbkJ5SWQoc2VhcmNoUmFpbFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGFycml2YWxTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHtcclxuICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogYXJyaXZhbFN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBhcnJpdmFsU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBhcnJpdmFsU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGFycml2YWxTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LnZpYUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy52aWEgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS52aWFMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZpYUxvY2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpYUxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB2aWFMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICByYWlsc3RhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlkOiB2aWFMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiB2aWFMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IHZpYUxvY2F0aW9uLm5sY0NvZGUsXHJcbiAgICAgICAgICAgICAgc3RhdGlvbkNvZGU6IHZpYUxvY2F0aW9uLnN0YXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZUNvZGU6IHZpYUxvY2F0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogdmlhTG9jYXRpb24udHJhaW5saW5lVW5pcXVlQ29kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsU3RhdGlvbihcclxuICAgIGNvZGU6IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbFN0YXRpb24+IHtcclxuICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRSYWlsSm91cm5leUZhcmUoKTogUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBhbnlbXSB7XHJcbiAgICBsZXQgbGVnczogYW55W10gPSBbXTtcclxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8uam91cm5leUxlZ3MubGVuZ3RoKSB7XHJcbiAgICAgIGxlZ3MgPSByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVncy5tYXAoKHNlZ21lbnQpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3BlcmF0b3I6IHNlZ21lbnQub3BlcmF0b3IsXHJcbiAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogc2VnbWVudC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBzZWdtZW50LmRlcGFydCxcclxuICAgICAgICAgIGFycml2YWxEYXRlVGltZTogc2VnbWVudC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogc2VnbWVudC5hcnJpdmVcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWdzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyk7XHJcbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xyXG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChcclxuICAgICAgICByYWlsSm91cm5leU9wdGlvbi50aWNrZXRFeHRyYXNbMF1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAocmFpbEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXHJcbiAgICAgIHJhaWxGYXJlLFxyXG4gICAgICByYWlsSm91cm5leU9wdGlvblxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIC8vIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgICAgIC8vICAgKHRpY2tldFF1ZXVlTGlzdDEpID0+IHtcclxuICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgIC8vICAgICAgIGlkOiB0aWNrZXRRdWV1ZUxpc3QxLmlkLFxyXG4gICAgICAvLyAgICAgICBuYW1lOiB0aWNrZXRRdWV1ZUxpc3QxLm5hbWUsXHJcbiAgICAgIC8vICAgICAgIHR5cGU6IHRpY2tldFF1ZXVlTGlzdDEudHlwZVxyXG4gICAgICAvLyAgICAgfTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICAgIGNvbnN0IGxvd2VzdFRpY2tldCA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KClcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24udGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChyYWlsSm91cm5leU9wdGlvbi5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIXJhaWxGYXJlLmVUaWNrZXRBdmFpbGFibGUsXHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW3JhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogcmFpbEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAgICAgY28yUGVySXRlbTogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgIGxvd2VzdFByaWNlOiBsb3dlc3RUaWNrZXQuYW1vdW50ICE9IE51bWJlcihyYWlsRmFyZS5wcmljZSkgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPSByYWlsRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKHJhaWxGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IHJhaWxGYXJlLmN1cnJlbmN5KSA/IFxyXG4gICAgICAgICAgPEN1cnJlbmN5Q29kZT5sb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgLy8gaWYgKG91dGJvdW5kLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCByYWlsUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMpO1xyXG5cclxuICAgIGxldCB0aWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgdGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKVxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBsb3dlc3RQcmljZTogbG93ZXN0VGlja2V0LmFtb3VudCAhPSBOdW1iZXIob3V0Ym91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSkgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPSBvdXRib3VuZEZhcmUuY3VycmVuY3kpID8gXHJcbiAgICAgICAgICA8Q3VycmVuY3lDb2RlPmxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgOiBudWxsXHJcbiAgICAgIH07XHJcbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxyXG4gICAgICBpZiAodGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgIHJhaWxMZWdzOiBSYWlsSm91cm5leUxlZ1tdXHJcbiAgKTogUmFpbEpvdXJuZXlMZWdbXSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhaWxMZWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGxlZyA9IHJhaWxMZWdzW2ldO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWcuY2FsbGluZ1BvaW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50c1tqXTtcclxuICAgICAgICBkZWxldGUgY2FsbGluZ1BvaW50cy5zY2hlZHVsZWRQbGF0Zm9ybTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYWlsTGVncztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChyYWlsVGlja2V0RXh0cmE6IFJhaWxUaWNrZXRFeHRyYSk6IFRpY2tldEV4dHJhc1tdIHtcclxuICAgIGNvbnN0IHByaWNlID1cclxuICAgICAgdGhpcy5ub09mQ2hpbGRyZW4gKiByYWlsVGlja2V0RXh0cmE/LmNoaWxkQW1vdW50ICtcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICogcmFpbFRpY2tldEV4dHJhLmFkdWx0QW1vdW50O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy50eXBlLFxyXG4gICAgICAgIGxvY2F0aW9uOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMubG9jYXRpb24sXHJcbiAgICAgICAgZGF0ZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmRhdGUsXHJcbiAgICAgICAgcHJpY2VcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRpbWVEaWZmZXJlbmNlSW5NaW5zKHJhaWxKb3VybmV5OiBSYWlsSm91cm5leU9wdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzXHJcbiAgICAgIC5nZXRUaW1lRGlmZmVyZW5jZShyYWlsSm91cm5leS5hcnJpdmVEYXRlVGltZSwgcmFpbEpvdXJuZXkuZGVwYXJ0RGF0ZVRpbWUpXHJcbiAgICAgIC50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZGV0ZXJtaW5lIGlmIGEgdGlja2V0IGlzIGFuIGVUaWNrZXRcclxuICAgKiBAcGFyYW0gdGlja2V0IC0gdGhlIHRpY2tldCB3ZSB3YW50IHRvIHRvIGNoZWNrXHJcbiAgICogQHJldHVybnMgLSBib29sZWFuXHJcbiAgICovXHJcbiAgdGlja2V0SXNBbkVUaWNrZXQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3VuZEVUaWNrZXQ6IFJhaWxKb3VybmV5T3B0aW9uID0gbnVsbDtcclxuXHJcbiAgICAvLyBmb3VuZEVUaWNrZXQgPSB0aWNrZXQudGlja2V0UXVldWVMaXN0LmZpbmQoKHF1ZXVlTGlzdEl0ZW0pID0+IHtcclxuICAgIC8vICAgcmV0dXJuIHF1ZXVlTGlzdEl0ZW0udHlwZSA9PT0gJ2VUaWNrZXQnO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvdW5kRVRpY2tldCA/IHRydWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIF9hcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKFxyXG4gICAgICB0eXBlOiBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb25cclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5LnJldHVybik7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN1bW1hcnlcclxuICAgICAgICA/IChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyh7IC4uLmZhcmUgfSwgW1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgID8ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoW2ZhcmUuZmFyZUhhc2hdLFxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdPy5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2gsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiAhIXRoaXMuX3NlbGVjdGVkU3VtbWFyeVt0eXBlXVtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXHJcbiAgICAgICAgICAgICAgICBdPy5hbGxvd2VkV2l0aD8uaW5jbHVkZXMoZmFyZS5mYXJlSGFzaClcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgICAgICAgICAgICAgICAgeyAuLi5mYXJlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgICAgICA/IFtzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNldFJ1bGVzID0gKFxyXG4gICAgICB0eXBlOiBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICAgIGRpcmVjdGlvbjogJ291dGJvdW5kJyB8ICdyZXR1cm4nXHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKTogT0JUUmFpbEpvdXJuZXlGYXJlW10gPT4ge1xyXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShqb3VybmV5LCB0aGlzLnN1bW1hcnlbZGlyZWN0aW9uXSk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoXHJcbiAgICAgICAgICAoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKTogT0JUUmFpbEpvdXJuZXlGYXJlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgICAgICAgICAgICAgIGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXVxyXG4gICAgICAgICAgICAgICAgOiBbXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjY3VtOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSxcclxuICAgICAgICAgICAgbmV4dDogT0JUUmFpbFF1b3RlUmVzdWx0XHJcbiAgICAgICAgICApOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7XHJcbiAgICAgICAgICAgICAgLi4ubmV4dCxcclxuICAgICAgICAgICAgICBvdXRib3VuZDogKG5leHQub3V0Ym91bmQgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgICAgIChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5qb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2luZ2xlSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9IGFzIE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuOiAobmV4dC5yZXR1cm4gfHwgW10pLm1hcChcclxuICAgICAgICAgICAgICAgIChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5qb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ3JldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3NpbmdsZUpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdvcGVuUmV0dXJuSm91cm5leUZhcmVzJywgam91cm5leSwgJ3JldHVybicpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCh0ZW1wKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIG91dGJvdW5kRmFyZTogUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZD86IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENsYXNzJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDbGFzc1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvbmRpdGlvbnMgRGVzY3JpcHRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvbmRpdGlvbnNEZXNjcmlwdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIFJldHVybiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkUmV0dXJuUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIE5hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZU5hbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGFuZ2UgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGFuZ2VSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUHJlIEJvb2tpbmcgUmVxdWlyZW1lbnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucHJlQm9va2luZ1JlcXVpcmVtZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmFpbGNhcmQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucmFpbGNhcmREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvZGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvZGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGlsZCBEaXNjb3VudCcsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGlsZERpc2NvdW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVmFsaWQgT3V0IFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudmFsaWRPdXRSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRW5kIERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0pvdXJuZXkgQnJlYWsgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5qb3VybmV5QnJlYWtSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVmdW5kIENhbmNlbGxhdGlvbiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJlZnVuZENhbmNlbGxhdGlvblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IFR5cGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leVR5cGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb2QgQXZhaWxhYmxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRvZEF2YWlsYWJsZVxyXG4gICAgICB9LFxyXG5cclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSZXR1cm4gU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIEVuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogaW5ib3VuZD8uYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0aGlzLnRlbXBQYXJhbXMpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gZmF2LmFkdWx0cztcclxuICAgIHRoaXMubm9PZkNoaWxkcmVuID0gZmF2LmNoaWxkcmVuO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2LmpvdXJuZXlUeXBlO1xyXG4gICAgc3dpdGNoIChmYXYuY2xhc3MpIHtcclxuICAgICAgY2FzZSAnRmlyc3QnOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkZpcnN0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBbnknOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkFsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnU3RhbmRhcmQnOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLlN0YW5kYXJkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYuZGVwYXJ0dXJlTG9jYXRpb25JZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKChhKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGE7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYuYXJyaXZhbExvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gYTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAoZmF2LnZpYUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHsgaWQ6IGZhdi52aWFMb2NhdGlvbklkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICB0aGlzLnZpYSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5cclxuICB9XHJcbn1cclxuIl19
|