@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
|
@@ -7,11 +7,12 @@ import { DifferentInvokdedUserReasons } from '../types/types';
|
|
|
7
7
|
import { CabHireVehicleType, ServiceType } from '../types/graphql.types';
|
|
8
8
|
import { AirportSearchMode, TaxiFormMode } from '../interfaces/Icabhire-enterprise-search';
|
|
9
9
|
export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
10
|
-
constructor(cabfetcher, helpers, storageService, searchService, basketService) {
|
|
11
|
-
super(storageService, helpers, searchService);
|
|
10
|
+
constructor(cabfetcher, helpers, storageService, searchService, basketService, userService) {
|
|
11
|
+
super(storageService, helpers, searchService, userService);
|
|
12
12
|
this.cabfetcher = cabfetcher;
|
|
13
13
|
this.basketService = basketService;
|
|
14
14
|
this.type = ServiceType.Cab;
|
|
15
|
+
this.travellers = [];
|
|
15
16
|
this.airportChange = new Subject();
|
|
16
17
|
this.transTypes = [
|
|
17
18
|
{ key: CabHireVehicleType.Any, value: 'Any (1-8 Passengers)', id: 8 },
|
|
@@ -89,6 +90,10 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
89
90
|
* flightNumber
|
|
90
91
|
*/
|
|
91
92
|
this._flightNumber = '';
|
|
93
|
+
/*
|
|
94
|
+
* flightNumber
|
|
95
|
+
*/
|
|
96
|
+
this._returnFlightNumber = '';
|
|
92
97
|
/*
|
|
93
98
|
* terminal
|
|
94
99
|
*/
|
|
@@ -221,6 +226,12 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
221
226
|
set flightNumber(value) {
|
|
222
227
|
this._flightNumber = value;
|
|
223
228
|
}
|
|
229
|
+
get returnFlightNumber() {
|
|
230
|
+
return this._returnFlightNumber;
|
|
231
|
+
}
|
|
232
|
+
set returnFlightNumber(value) {
|
|
233
|
+
this._returnFlightNumber = value;
|
|
234
|
+
}
|
|
224
235
|
/*
|
|
225
236
|
* airport
|
|
226
237
|
*/
|
|
@@ -415,6 +426,13 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
415
426
|
this.returnDateTime.isSameOrBefore(this.departs)) {
|
|
416
427
|
this.validationMessages.push('Return Date/Time must be after outbound date/time');
|
|
417
428
|
}
|
|
429
|
+
if (this.travellers.length > 4) {
|
|
430
|
+
// use id from travel type to see if
|
|
431
|
+
if (this.transTypes.find((type) => type.key === this.tempParams.vehicleType)
|
|
432
|
+
.id < this.travellers.length) {
|
|
433
|
+
this.validationMessages.push(`The number of passengers exceeds the available vehicle capacity for the ${this.tempParams.vehicleType} taxi`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
418
436
|
this.isValid.next(this.validationMessages.length === 0);
|
|
419
437
|
this.messages.next(this.validationMessages);
|
|
420
438
|
}
|
|
@@ -557,7 +575,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
557
575
|
results = results.sort((a, b) => b.price - a.price);
|
|
558
576
|
}
|
|
559
577
|
else {
|
|
560
|
-
results = results.sort((a, b) => a.price - b.price);
|
|
578
|
+
results = results === null || results === void 0 ? void 0 : results.sort((a, b) => a.price - b.price);
|
|
561
579
|
}
|
|
562
580
|
this.results.next(results);
|
|
563
581
|
}
|
|
@@ -642,10 +660,134 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
642
660
|
return this.inboundVisibility;
|
|
643
661
|
}
|
|
644
662
|
updateFromPreviousSearches(previousItems) {
|
|
645
|
-
var _a;
|
|
663
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
646
664
|
const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
|
|
665
|
+
const railItem = (_b = previousItems[ServiceType.Rail]) === null || _b === void 0 ? void 0 : _b.searchQuery;
|
|
666
|
+
const irlItem = (_c = previousItems[ServiceType.InternationalRail]) === null || _c === void 0 ? void 0 : _c.searchQuery;
|
|
667
|
+
const hotelItem = (_d = previousItems[ServiceType.Rail]) === null || _d === void 0 ? void 0 : _d.searchQuery;
|
|
668
|
+
const carItem = (_e = previousItems[ServiceType.Car]) === null || _e === void 0 ? void 0 : _e.searchQuery;
|
|
669
|
+
const loungeItem = (_f = previousItems[ServiceType.Lounge]) === null || _f === void 0 ? void 0 : _f.searchQuery;
|
|
670
|
+
const parkingItem = (_g = previousItems[ServiceType.Parking]) === null || _g === void 0 ? void 0 : _g.searchQuery;
|
|
671
|
+
const eurostarItem = (_h = previousItems[ServiceType.Eurostar]) === null || _h === void 0 ? void 0 : _h.searchQuery;
|
|
647
672
|
if (flightItem) {
|
|
648
|
-
|
|
673
|
+
try {
|
|
674
|
+
if (previousItems.FLIGHT.inboundDate) {
|
|
675
|
+
const dateArray = previousItems.FLIGHT.inboundDate.split("-");
|
|
676
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
677
|
+
}
|
|
678
|
+
else if (previousItems.FLIGHT.outboundDate) {
|
|
679
|
+
const dateArray = previousItems.FLIGHT.outboundDate.split("-");
|
|
680
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
catch (_j) {
|
|
684
|
+
console.error('Error trying to prepopulate cabhire from flight item');
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
else if (railItem) {
|
|
688
|
+
try {
|
|
689
|
+
if (previousItems.RAIL.inboundDate) {
|
|
690
|
+
const dateArray = previousItems.RAIL.inboundDate.split("-");
|
|
691
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
692
|
+
}
|
|
693
|
+
else if (previousItems.RAIL.outboundDate) {
|
|
694
|
+
const dateArray = previousItems.RAIL.outboundDate.split("-");
|
|
695
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
catch (_k) {
|
|
699
|
+
console.error('Error trying to prepopulate cabhire from rail item');
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
else if (irlItem) {
|
|
703
|
+
try {
|
|
704
|
+
if (previousItems.INTERNATIONAL_RAIL.inboundDate) {
|
|
705
|
+
const dateArray = previousItems.INTERNATIONAL_RAIL.inboundDate.split("-");
|
|
706
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
707
|
+
}
|
|
708
|
+
else if (previousItems.INTERNATIONAL_RAIL.outboundDate) {
|
|
709
|
+
const dateArray = previousItems.INTERNATIONAL_RAIL.outboundDate.split("-");
|
|
710
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
catch (_l) {
|
|
714
|
+
console.error('Error trying to prepopulate cabhire from international rail item');
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
else if (hotelItem) {
|
|
718
|
+
try {
|
|
719
|
+
if (previousItems.HOTEL.inboundDate) {
|
|
720
|
+
const dateArray = previousItems.HOTEL.inboundDate.split("-");
|
|
721
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
722
|
+
}
|
|
723
|
+
else if (previousItems.HOTEL.outboundDate) {
|
|
724
|
+
const dateArray = previousItems.HOTEL.outboundDate.split("-");
|
|
725
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
catch (_m) {
|
|
729
|
+
console.error('Error trying to prepopulate cabhire from hotel item');
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
else if (carItem) {
|
|
733
|
+
try {
|
|
734
|
+
if (previousItems.CAR.inboundDate) {
|
|
735
|
+
const dateArray = previousItems.CAR.inboundDate.split("-");
|
|
736
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
737
|
+
}
|
|
738
|
+
else if (previousItems.CAR.outboundDate) {
|
|
739
|
+
const dateArray = previousItems.CAR.outboundDate.split("-");
|
|
740
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
catch (_o) {
|
|
744
|
+
console.error('Error trying to prepopulate cabhire from car item');
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
else if (loungeItem) {
|
|
748
|
+
try {
|
|
749
|
+
if (previousItems.LOUNGE.inboundDate) {
|
|
750
|
+
const dateArray = previousItems.LOUNGE.inboundDate.split("-");
|
|
751
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
752
|
+
}
|
|
753
|
+
else if (previousItems.LOUNGE.outboundDate) {
|
|
754
|
+
const dateArray = previousItems.LOUNGE.outboundDate.split("-");
|
|
755
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
catch (_p) {
|
|
759
|
+
console.error('Error trying to prepopulate cabhire from lounge item');
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
else if (parkingItem) {
|
|
763
|
+
try {
|
|
764
|
+
if (previousItems.PARKING.inboundDate) {
|
|
765
|
+
const dateArray = previousItems.PARKING.inboundDate.split("-");
|
|
766
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
767
|
+
}
|
|
768
|
+
else if (previousItems.PARKING.outboundDate) {
|
|
769
|
+
const dateArray = previousItems.PARKING.outboundDate.split("-");
|
|
770
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
catch (_q) {
|
|
774
|
+
console.error('Error trying to prepopulate cabhire from parking item');
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
else if (eurostarItem) {
|
|
778
|
+
try {
|
|
779
|
+
if (previousItems.EUROSTAR.inboundDate) {
|
|
780
|
+
const dateArray = previousItems.EUROSTAR.inboundDate.split("-");
|
|
781
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
782
|
+
}
|
|
783
|
+
else if (previousItems.EUROSTAR.outboundDate) {
|
|
784
|
+
const dateArray = previousItems.EUROSTAR.outboundDate.split("-");
|
|
785
|
+
this.date = this.helpers.yyyymmddTimeToNgDate(`${dateArray[0]}${dateArray[1]}${dateArray[2].substring(0, 2)}`, "");
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
catch (_r) {
|
|
789
|
+
console.error('Error trying to prepopulate cabhire from eurostar item');
|
|
790
|
+
}
|
|
649
791
|
}
|
|
650
792
|
}
|
|
651
793
|
updateSearchFromExpiredBasketItem(basketItem) {
|
|
@@ -695,6 +837,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
695
837
|
return ((_a = this.transTypes.find((x) => x.key === transTypeIndex)) === null || _a === void 0 ? void 0 : _a.value) || '';
|
|
696
838
|
}
|
|
697
839
|
addCabHireToBasket(cabHireQuote, cabHireQuery) {
|
|
840
|
+
var _a, _b, _c, _d, _e, _f;
|
|
698
841
|
return __awaiter(this, void 0, void 0, function* () {
|
|
699
842
|
if (cabHireQuote.unavailable) {
|
|
700
843
|
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
@@ -724,7 +867,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
724
867
|
latitude: cabHireQuote.toLocation.latitude,
|
|
725
868
|
longitude: cabHireQuote.toLocation.longitude
|
|
726
869
|
},
|
|
727
|
-
vehicleType:
|
|
870
|
+
vehicleType: cabHireQuote.vehicleType,
|
|
728
871
|
tripDistanceMetres: cabHireQuote.tripDistanceMetres,
|
|
729
872
|
tripDurationSeconds: cabHireQuote.tripDurationSeconds,
|
|
730
873
|
termsAndCond: termsAndConditions
|
|
@@ -734,7 +877,10 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
734
877
|
searchQuery: cabHireQuery,
|
|
735
878
|
co2PerItem: cabHireQuote.co2PerItem,
|
|
736
879
|
co2PerPassenger: cabHireQuote.co2PerPassenger,
|
|
737
|
-
outboundDate: cabHireQuery.departs.format()
|
|
880
|
+
outboundDate: cabHireQuery.departs.format(),
|
|
881
|
+
lowestPrice: ((_a = this.cheapestPrice) === null || _a === void 0 ? void 0 : _a.amount) != cabHireQuote.price || ((_b = this.cheapestPrice) === null || _b === void 0 ? void 0 : _b.currencyCode) != cabHireQuote.currency ? (_c = this.cheapestPrice) === null || _c === void 0 ? void 0 : _c.amount : null,
|
|
882
|
+
lowestPriceCurrency: ((_d = this.cheapestPrice) === null || _d === void 0 ? void 0 : _d.amount) != cabHireQuote.price || ((_e = this.cheapestPrice) === null || _e === void 0 ? void 0 : _e.currencyCode) != cabHireQuote.currency ?
|
|
883
|
+
(_f = this.cheapestPrice) === null || _f === void 0 ? void 0 : _f.currencyCode : null
|
|
738
884
|
}, intBasket, this.searchService, this.travellers, cabHireQuote.requiresReason);
|
|
739
885
|
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
740
886
|
this.performSearch();
|
|
@@ -751,7 +897,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
751
897
|
this.toAddress = newToAddress;
|
|
752
898
|
}
|
|
753
899
|
updateLowestPrice(results) {
|
|
754
|
-
if (!results.length)
|
|
900
|
+
if (!(results === null || results === void 0 ? void 0 : results.length))
|
|
755
901
|
return null;
|
|
756
902
|
const currency = results[0].currency;
|
|
757
903
|
return results.reduce((cheapestPrice, result) => {
|
|
@@ -833,4 +979,4 @@ CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_cab';
|
|
|
833
979
|
CabHireEnterpriseSearch.SECONDARY_STORAGE_SESSION_PARAMS = 'secondary_search_cab';
|
|
834
980
|
CabHireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_cab';
|
|
835
981
|
CabHireEnterpriseSearch.MULTI_STORAGE_SESSION_RESULTS = 'multi_results_cab';
|
|
836
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQTZCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRSxPQUFPLEVBU0wsNEJBQTRCLEVBQzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxFQUtMLGtCQUFrQixFQU1sQixXQUFXLEVBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLFlBQVksRUFFYixNQUFNLDBDQUEwQyxDQUFDO0FBU2xELE1BQU0sT0FBTyx1QkFDWCxTQUFRLG9CQUlQO0lBZ1lELFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDbEMsYUFBK0MsRUFDdkMsYUFBK0M7UUFFdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFOdEMsZUFBVSxHQUFWLFVBQVUsQ0FBK0I7UUFJekMsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBNVhsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFHM0Msa0JBQWEsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzQyxlQUFVLEdBQWdCO1lBQ2pDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxF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QUFhO3FCQUNmLGVBQWUsQ0FDZCxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTTtvQkFDdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSztvQkFDeEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUN6QjtxQkFDQSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBSSxPQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQzthQUNOO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDM0Isa0RBQWtEO1lBQ2xELG9EQUFvRDtZQUNwRCxnREFBZ0Q7WUFDaEQsc0RBQXNEO1lBQ3RELHdEQUF3RDtZQUN4RCx3RUFBd0U7WUFDeEUsOENBQThDO1lBQzlDLGdEQUFnRDtZQUNoRCw0Q0FBNEM7WUFDNUMsa0RBQWtEO1lBQ2xELG9EQUFvRDtZQUNwRCxvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDckMsQ0FBQztLQUFBOztBQXpoQ2UsOENBQXNCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLHdEQUFnQyxHQUFHLHNCQUFzQixDQUFDO0FBQzFELCtDQUF1QixHQUFHLGFBQWEsQ0FBQztBQUN4QyxxREFBNkIsR0FBRyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBSYWlsQWlycG9ydCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcixcclxuICBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhYmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDYWJIaXJlTG9jYXRpb24sXHJcbiAgQ2FiSGlyZUxvY2F0aW9uSW5wdXQsXHJcbiAgQ2FiSGlyZVF1b3RlLFxyXG4gIENhYkhpcmVWZWhpY2xlVHlwZSxcclxuICBMb2NhdGlvbkRldGFpbCxcclxuICBRdWVyeVNlYXJjaENhYkhpcmVBcmdzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRTZWFyY2hNb2RlLFxyXG4gIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIENhYkhpcmVUZW1wUGFyYW1zLFxyXG4gIFRheGlBaXJwb3J0LFxyXG4gIFRheGlBdHRyaWJ1dGUsXHJcbiAgVGF4aUZvcm1Nb2RlLFxyXG4gIFRyYW5zVHlwZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUNhYkhpcmVTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYWItaGlyZS1zZWFyY2gtYXJnLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2g8Q0hfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBDYWJIaXJlVGVtcFBhcmFtcyxcclxuICAgIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2NhYic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlY29uZGFyeV9zZWFyY2hfY2FiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19jYWInO1xyXG4gIHN0YXRpYyByZWFkb25seSBNVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdtdWx0aV9yZXN1bHRzX2NhYic7XHJcbiAgcHJpdmF0ZSBvdXRib3VuZFZpc2liaWxpdHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBwcml2YXRlIGluYm91bmRWaXNpYmlsaXR5OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuQ2FiO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIGFpcnBvcnRDaGFuZ2U6IFN1YmplY3Q8VGF4aUFpcnBvcnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcmVhZG9ubHkgdHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXHJcbiAgICB7IGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSwgdmFsdWU6ICdBbnkgKDEtOCBQYXNzZW5nZXJzKScsIGlkOiA4IH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlN0YW5kYXJkQ2FyLFxyXG4gICAgICB2YWx1ZTogJ1NhbG9vbiBDYXIgKDEtNCBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5CbGFja0NhYixcclxuICAgICAgdmFsdWU6ICdIYWNrbmV5IENhcnJpYWdlICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRGRhQ2FyLFxyXG4gICAgICB2YWx1ZTogJ0RkYSAtIHdoZWVsY2hhaXIgYWNjZXNzaWJsZSAoMS00IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1lZGl1bU1wdixcclxuICAgICAgdmFsdWU6ICdQZW9wbGUgQ2FycmllciAoMS03IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkV4ZWN1dGl2ZUNhcixcclxuICAgICAgdmFsdWU6ICdFeGVjdXRpdmUgKDEtNCBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA0XHJcbiAgICB9XHJcbiAgXTtcclxuICByZWFkb25seSBhdHRyaWJ1dGVzOiBUYXhpQXR0cmlidXRlW10gPSBbXHJcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICd3aGVlbGNoYWlyJywgdmFsdWU6ICdXaGVlbGNoYWlyIChPbiBSZXF1ZXN0KScgfSxcclxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ2NhbGxfb25fYXJyaXZhbCcsIHZhbHVlOiAnQ2FsbCBPbiBBcnJpdmFsJyB9LFxyXG4gICAge1xyXG4gICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAga2V5OiAnbWVldF9hbmRfZ3JlZXQnLFxyXG4gICAgICB2YWx1ZTogJ01lZXQgQW5kIEdyZWV0IChDaGFyZ2UgQXBwbGllcyknXHJcbiAgICB9LFxyXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnd2FpdF9hbmRfcmV0dXJuJywgdmFsdWU6ICdXYWl0IEFuZCBSZXR1cm4nIH1cclxuICBdO1xyXG4gIHJlYWRvbmx5IHNlYXJjaFR5cGVzID0gWydPbmUtd2F5JywgJ1JldHVybiddO1xyXG5cclxuICByZWFkb25seSBhaXJwb3J0U2VhcmNoVHlwZXMgPSBbJ0FpcnBvcnQgZHJvcCBvZmYnLCAnQWlycG9ydCBQaWNrIFVwJ107XHJcbiAgcmVhZG9ubHkgY3JpdGVyaWEgPSBbJ1BpY2sgVXAgVGltZSddO1xyXG5cclxuICBtb2RlOiBUYXhpRm9ybU1vZGUgPSBUYXhpRm9ybU1vZGUuQUREUkVTUztcclxuICBtaW5TZWxlY3REYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCk7XHJcbiAgbWluUmV0dXJuU2VsZWN0RGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgLy8gZ2V0dGVycyBhbmQgc2V0dGVyc1xyXG4gIHByaXZhdGUgX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG4gIHNlbGVjdGVkUGxhY2VzOiBhbnkgPSBbXTtcclxuICBwcml2YXRlIF9mcm9tTG9jYXRpb246IENhYkhpcmVMb2NhdGlvbjtcclxuICBwcml2YXRlIF90b0xvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb247XHJcbiAgcHJpdmF0ZSBfdmlhczogQ2FiSGlyZUxvY2F0aW9uW10gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XHJcblxyXG4gIGdldCBmcm9tTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9mcm9tTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBnZXQgdG9Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHNlYXJjaFR5cGVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1swXTtcclxuICBnZXQgc2VhcmNoVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlYXJjaFR5cGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VhcmNoVHlwZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBhaXJwb2lydCBzZWFyY2hUeXBlXHJcbiAgICovXHJcblxyXG4gIF9haXJwb3J0U2VhcmNoVHlwZTogQWlycG9ydFNlYXJjaE1vZGUgPSBBaXJwb3J0U2VhcmNoTW9kZS5EUk9QT0ZGO1xyXG4gIGdldCBhaXJwb3J0U2VhcmNoVHlwZSgpOiBBaXJwb3J0U2VhcmNoTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWlycG9ydFNlYXJjaFR5cGU7XHJcbiAgfVxyXG4gIHNldCBhaXJwb3J0U2VhcmNoVHlwZShtb2RlOiBBaXJwb3J0U2VhcmNoTW9kZSkge1xyXG4gICAgdGhpcy5fYWlycG9ydFNlYXJjaFR5cGUgPSBtb2RlO1xyXG4gICAgaWYgKHRoaXMuZnJvbUFkZHJlc3MgfHwgdGhpcy50b0FkZHJlc3MpIHtcclxuICAgICAgdGhpcy5zd2l0Y2hGcm9tQW5kVG9Mb2NhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gICAqIGFpcnBvaXJ0IGFuZCB0cmFpbiBzdGF0aW9uIHNlYXJjaFR5cGVcclxuICAgKi9cclxuXHJcbiAgZ2V0IGZyb21Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IGZyb21Mb2NhdGlvblR5cGUobW9kZTogVGF4aUZvcm1Nb2RlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZSA9IG1vZGU7XHJcbiAgfVxyXG4gIGdldCB0b0xvY2F0aW9uVHlwZSgpOiBUYXhpRm9ybU1vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IHRvTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvTG9jYXRpb25UeXBlID0gbW9kZTtcclxuICB9XHJcbiAgLypcclxuICAgKiBzZWFyY2hDcml0ZXJpYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlYXJjaENyaXRlcmlhID0gdGhpcy5jcml0ZXJpYVswXTtcclxuICBnZXQgc2VhcmNoQ3JpdGVyaWEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VhcmNoQ3JpdGVyaWEodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VhcmNoQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogb3V0Ym91bmREYXRlVGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX291dGJvdW5kRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXHJcbiAgICBtb21lbnQoKSxcclxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxyXG4gICk7XHJcbiAgZ2V0IG91dGJvdW5kRGF0ZVRpbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZERhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZERhdGVUaW1lID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHJldHVybkRhdGVUaW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmV0dXJuRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXHJcbiAgICBtb21lbnQoKSxcclxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxyXG4gICk7XHJcbiAgZ2V0IHJldHVybkRhdGVUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkRhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkRhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5EYXRlVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBmbGlnaHROdW1iZXJcclxuICAgKi9cclxuICBwcml2YXRlIF9mbGlnaHROdW1iZXI6IHN0cmluZyA9ICcnO1xyXG4gIGdldCBmbGlnaHROdW1iZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxpZ2h0TnVtYmVyO1xyXG4gIH1cclxuICBzZXQgZmxpZ2h0TnVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZsaWdodE51bWJlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBhaXJwb3J0XHJcbiAgICovXHJcblxyXG4gIGdldCBhaXJwb3J0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0O1xyXG4gIH1cclxuICBzZXQgYWlycG9ydCh2YWx1ZTogVGF4aUFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHRlcm1pbmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdGVybWluYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRlcm1pbmFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rlcm1pbmFsO1xyXG4gIH1cclxuICBzZXQgdGVybWluYWwodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGVybWluYWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBkZXBhcnRzKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRlcGFydHModmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzID0gdmFsdWUuaXNWYWxpZCA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMubWluUmV0dXJuU2VsZWN0RGF0ZSA9IHtcclxuICAgICAgZGF5OiBtb21lbnQodmFsdWUpLmRhdGUoKSxcclxuICAgICAgbW9udGg6IG1vbWVudCh2YWx1ZSkubW9udGgoKSArIDEsXHJcbiAgICAgIHllYXI6IG1vbWVudCh2YWx1ZSkueWVhcigpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh2YWx1ZS5pc0FmdGVyKHRoaXMucmV0dXJuRGF0ZVRpbWUpKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUuc2V0KCdkYXRlJywgdmFsdWUuZGF0ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGZyb21Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XHJcbiAgLy8gICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCB0b0xvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCB0b0xvY2F0aW9uKHZhbHVlOiBDYWJIaXJlTG9jYXRpb24pIHtcclxuICAvLyAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5mYW50cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluZmFudHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjb3VudHJ5Q29kZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5Q29kZTtcclxuICB9XHJcblxyXG4gIHNldCBjb3VudHJ5Q29kZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFzKCk6IENhYkhpcmVMb2NhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLl92aWFzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYXModmFsdWU6IENhYkhpcmVMb2NhdGlvbltdKSB7XHJcbiAgICB0aGlzLl92aWFzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhc0Zyb20oKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB2aWFzRnJvbSh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdmlhc1swXSA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFzVG8oKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzVG87XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhc1RvKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYXNUbyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdmlhc1sxXSA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2ZWhpY2xlVHlwZSgpOiBDYWJIaXJlVmVoaWNsZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCB2ZWhpY2xlVHlwZSh2YWx1ZTogQ2FiSGlyZVZlaGljbGVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBmcm9tQWRkcmVzcygpOiBBZGRyZXNzRm9ybSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZyb21BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJvbVN0YXRpb24oKTogUmFpbEFpcnBvcnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBmcm9tU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgYWRkcmVzczogdmFsdWUuZGVzdGluYXRpb24sXHJcbiAgICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgICB9XHJcbiAgICAgIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0b0FkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgdG9BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0b1N0YXRpb24oKTogUmFpbEFpcnBvcnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgdG9TdGF0aW9uKHZhbHVlOiBSYWlsQWlycG9ydCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgYWRkcmVzczogdmFsdWUuZGVzdGluYXRpb24sXHJcbiAgICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgICB9XHJcbiAgICAgIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjYWJmZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FiSGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYWJIaXJlVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FiSGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGE6IGFueSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyZXR1cm5EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZSA9IG1vbWVudChyZXR1cm5EYXRhLnRlbXBQYXJhbXMuZGVwYXJ0cyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1sxXTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHJlY292ZXJpbmcgcmV0dXJuIGRhdGE6ICcsIGVycm9yLCAnICsrKycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xyXG4gICAgICB0aGlzLmZyb21BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudG9BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5DYWJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kYXJ5UmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0KHRoaXMubXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0cyA9IHNlY29uZGFyeVJlc3VsdHM7XHJcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHNlY29uZGFyeVJlc3VsdHMpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5NVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoKSk7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25JdGVtKFxyXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdOyAvLyByZXNldCB0byBvbmUtd2F5XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0Zyb20gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUbyAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLnVuaXgoKSA8IG1vbWVudCgpLnVuaXgoKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUYXhpIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0gJiZcclxuICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZS5pc1NhbWVPckJlZm9yZSh0aGlzLmRlcGFydHMpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIG91dGJvdW5kIGRhdGUvdGltZSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xyXG4gICAgICB0aGlzLmRlcGFydHMgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIC0ga2ljayBvZmYgdHdvIHNlYXJjaGVzXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuUXVlcnkgPSB0aGlzLmdldFJldHVyblNlYXJjaFF1ZXJ5KCk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFF1ZXJ5OiAnLCBxdWVyeSwgJyArKysnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBSZXR1cm4gUXVlcnk6ICcsIHJldHVyblF1ZXJ5LCAnICsrKycpO1xyXG5cclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRlbXBQYXJhbXM6IHJldHVyblF1ZXJ5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TXVsdGlTZWFyY2goW1xyXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdChcclxuICAgICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihyZXR1cm5RdWVyeSlcclxuICAgICAgICAgIClcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaChcclxuICAgICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSlcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3NcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzKTogSUNhYkhpcmVTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHNlYXJjaFF1ZXJ5LmZyb21BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gICAgc2VhcmNoUXVlcnkudG9BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcztcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5mcm9tU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcclxuICAgIHNlYXJjaFF1ZXJ5LnRvU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XHJcblxyXG4gICAgc2VhcmNoUXVlcnkudmlhc0Zyb20gPSB0aGlzLnZpYXNGcm9tO1xyXG4gICAgc2VhcmNoUXVlcnkudmlhc1RvID0gdGhpcy52aWFzVG87XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcclxuICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcclxuXHJcbiAgICB0aGlzLmZyb21BZGRyZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUFkZHJlc3M7XHJcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcclxuXHJcbiAgICB0aGlzLmZyb21TdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbVN0YXRpb247XHJcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcclxuXHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLmZyb21BZGRyZXNzKTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XHJcblxyXG4gICAgdGhpcy52aWFzRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNGcm9tO1xyXG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHNpbXBsaWZpZWRMb2NhdGlvbjogYm9vbGVhbiA9IHRydWUpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIGRlcGFydHM6IHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLFxyXG4gICAgICBmcm9tTG9jYXRpb246IHNpbXBsaWZpZWRMb2NhdGlvblxyXG4gICAgICAgID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKVxyXG4gICAgICAgIDogKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyBhcyBhbnkpLFxyXG4gICAgICB0b0xvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cclxuICAgICAgICA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpXHJcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyBhcyBhbnkpLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcclxuICAgICAgdmlhczogdGhpcy5fdmlhc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmV0dXJuU2VhcmNoUXVlcnkoKTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB7XHJcbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLl9yZXR1cm5EYXRlVGltZSxcclxuICAgICAgZnJvbUxvY2F0aW9uOiB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSwgLy8gc3dhcCB0aGUgbG9jYXRpb25zIGFyb3VuZFxyXG4gICAgICB0b0xvY2F0aW9uOiB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcclxuICAgICAgdmlhczogdGhpcy5fdmlhc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlT3V0Ym91bmRBZGRyZXNzKGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdChcclxuICAgICAgbG9jYXRpb24sXHJcbiAgICAgIHBsYWNlRGVzY3JpcHRpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbmJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KFxyXG4gICAgICBsb2NhdGlvbixcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKGxvY2F0aW9uOiBBZGRyZXNzRm9ybSk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhZGRyZXNzOiBbXHJcbiAgICAgICAgbG9jYXRpb24/LlRlcm1pbmFsLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ib3VzZSxcclxuICAgICAgICBsb2NhdGlvbj8uU3RyZWV0LFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ub3duLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Db3VudHJ5XHJcbiAgICAgIF1cclxuICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpOiBib29sZWFuID0+ICEhaXRlbSlcclxuICAgICAgICAuam9pbignLCcpLFxyXG4gICAgICBwb3N0Y29kZTogbG9jYXRpb24/LlBvc3RDb2RlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hBZGRyZXNzZXMoKSB7XHJcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyk7XHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbihcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzXHJcbiAgICApO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5KGFzYz86IGJvb2xlYW4sIHJldHVybkluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAocmV0dXJuSW5kZXggPj0gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnaGVyZScpO1xyXG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdKTtcclxuICAgICAgaWYgKGFzYykge1xyXG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdID0gcmVzdWx0cztcclxuICAgICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dCh0aGlzLmZ1bGxNdWx0aVJlc3VsdHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgIGlmIChhc2MpIHtcclxuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBDYWJIaXJlUXVvdGUsIGI6IENhYkhpcmVRdW90ZSkgPT4gYS5wcmljZSAtIGIucHJpY2VcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gISBzdHVmZiB0byBnbyBpbiBhIHBvc3Rjb2RlIHNlcnZpZVxyXG5cclxuICBnZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIEhvdXNlOiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbXHJcbiAgICAgICAgJ2Zsb29yJyxcclxuICAgICAgICAnc3RyZWV0X251bWJlcicsXHJcbiAgICAgICAgJ3ByZW1pc2UnXHJcbiAgICAgIF0pLFxyXG4gICAgICBTdHJlZXQ6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcclxuICAgICAgICAncm91dGUnLFxyXG4gICAgICAgICdzdHJlZXRfbmFtZScsXHJcbiAgICAgICAgJ2VzdGFibGlzaG1lbnQnXHJcbiAgICAgIF0pLFxyXG4gICAgICBUb3duOiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbXHJcbiAgICAgICAgJ3Bvc3RhbF90b3duJyxcclxuICAgICAgICAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8yJyxcclxuICAgICAgICAnbG9jYWxpdHknXHJcbiAgICAgIF0pLFxyXG4gICAgICBQb3N0Q29kZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydwb3N0Y29kZSddKSxcclxuICAgICAgQ291bnRyeTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydjb3VudHJ5J10pLFxyXG4gICAgICBwbGFjZURlc2NyaXB0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMocGxhY2VEZXRhaWxzOiBhbnksIHR5cGVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgYWRkcmVzc1Byb3AgPSBudWxsO1xyXG4gICAgaWYgKHBsYWNlRGV0YWlscyAmJiBBcnJheS5pc0FycmF5KHBsYWNlRGV0YWlscykpIHtcclxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHBsYWNlRGV0YWlscy5maWx0ZXIoKHBkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwZC50eXBlcykgJiYgcGQudHlwZXMuaW5jbHVkZXModHlwZSk7XHJcbiAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgIGlmIChwcm9wKSB7XHJcbiAgICAgICAgICBhZGRyZXNzUHJvcCA9IHByb3AubG9uZ19uYW1lO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWRkcmVzc1Byb3A7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKFxyXG4gICAgYWlycG9ydERldGFpbHM6IExvY2F0aW9uRGV0YWlsLFxyXG4gICAgYWlycG9ydE5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc29sZS5sb2coYWlycG9ydERldGFpbHMpO1xyXG4gICAgbGV0IGFkZHJlc3M6IEFkZHJlc3NGb3JtID0gbnVsbDtcclxuICAgIGlmIChhaXJwb3J0RGV0YWlscykge1xyXG4gICAgICBhZGRyZXNzID0ge1xyXG4gICAgICAgIENvdW50cnk6IGFpcnBvcnREZXRhaWxzLmNvdW50cnksXHJcbiAgICAgICAgU3RyZWV0OiBhaXJwb3J0RGV0YWlscy5yb2FkLFxyXG4gICAgICAgIFBvc3RDb2RlOiBhaXJwb3J0RGV0YWlscy5wb3N0Y29kZSxcclxuICAgICAgICBUb3duOiBhaXJwb3J0RGV0YWlscy5jaXR5LFxyXG4gICAgICAgIHBsYWNlRGVzY3JpcHRpb246IGFpcnBvcnROYW1lLFxyXG4gICAgICAgIEhvdXNlOiBhaXJwb3J0TmFtZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkZHJlc3M7XHJcbiAgfVxyXG5cclxuICBzZXRMb2NhdGlvbkZyb21BaXJwb3J0KGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCwgYWlycG9ydE5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zyb21BaXJwb3J0RGV0YWlscyhcclxuICAgICAgYWlycG9ydERldGFpbHMsXHJcbiAgICAgIGFpcnBvcnROYW1lXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcclxuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlYXJjaFR5cGUgPT09IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUCkge1xyXG4gICAgICAgIHRoaXMuZnJvbUFkZHJlc3MgPSBhZGRyZXNzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9BZGRyZXNzID0gYWRkcmVzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQbGFjZXMucHVzaChhZGRyZXNzKTtcclxuICB9XHJcblxyXG4gIHNldE91dGJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMub3V0Ym91bmRWaXNpYmlsaXR5Lm5leHQoc2hvd0Zvcm0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5ib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5Lm5leHQoc2hvd0Zvcm0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3V0Ym91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRWaXNpYmlsaXR5O1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5ib3VuZEZvcm1WaXNpYmlsaXR5KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kVmlzaWJpbGl0eTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKGZsaWdodEl0ZW0pIHtcclxuICAgICAgLy8gVE9ETyBmbGlnaHRzIGhhdmVuJ3QgYmVlbiBkb25lIHlldC5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hDYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XHJcblxyXG4gICAgaWYgKHNlYXJjaENhYkhpcmVRdWVyeSkge1xyXG4gICAgICB0aGlzLmRlcGFydHMgPSBtb21lbnQoc2VhcmNoQ2FiSGlyZVF1ZXJ5LmRlcGFydHMpO1xyXG4gICAgICB0aGlzLnZlaGljbGVUeXBlID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LnZlaGljbGVUeXBlO1xyXG5cclxuICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbihcclxuICAgICAgICBzZWFyY2hDYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmFkZHJlc3MsXHJcbiAgICAgICAgc2VhcmNoQ2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5wb3N0Y29kZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy50b0FkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXHJcbiAgICAgICAgc2VhcmNoQ2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICBzZWFyY2hDYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5wb3N0Y29kZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHNlYXJjaENhYkhpcmVRdWVyeS52aWFzKSB7XHJcbiAgICAgICAgbGV0IHZpYXNGcm9tOiBDYWJIaXJlTG9jYXRpb25JbnB1dFtdID1cclxuICAgICAgICAgIHNlYXJjaENhYkhpcmVRdWVyeS52aWFzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0W107XHJcbiAgICAgICAgaWYgKHZpYXNGcm9tWzBdKSB7XHJcbiAgICAgICAgICB0aGlzLnZpYXNGcm9tID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKFxyXG4gICAgICAgICAgICB2aWFzRnJvbVswXT8uYWRkcmVzcyxcclxuICAgICAgICAgICAgdmlhc0Zyb21bMF0/LnBvc3Rjb2RlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpYXNUbzogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSA9XHJcbiAgICAgICAgICBzZWFyY2hDYWJIaXJlUXVlcnkudmlhcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dFtdO1xyXG4gICAgICAgIGlmICh2aWFzVG9bMV0pIHtcclxuICAgICAgICAgIHRoaXMudmlhc1RvID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKFxyXG4gICAgICAgICAgICB2aWFzVG9bMV0/LmFkZHJlc3MsXHJcbiAgICAgICAgICAgIHZpYXNUb1sxXT8ucG9zdGNvZGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRBZGRyZXNzTG9jYXRpb24oYWRkcmVzczogc3RyaW5nLCBwb3N0Y29kZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgbG9jYXRpb25BcnJheSA9IGFkZHJlc3Muc3BsaXQoJywnKTtcclxuICAgIGxldCBzdHJlZXQgPSAnJztcclxuICAgIGxldCB0b3duID0gbG9jYXRpb25BcnJheVtsb2NhdGlvbkFycmF5Lmxlbmd0aCAtIDJdO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBsb2NhdGlvbkFycmF5Lmxlbmd0aCAtIDI7IGluZGV4KyspIHtcclxuICAgICAgc3RyZWV0ICs9IGxvY2F0aW9uQXJyYXlbaW5kZXhdICsgJyAnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgQ291bnRyeTogYWRkcmVzcy5zbGljZSgtMiksXHJcbiAgICAgIEhvdXNlOiBsb2NhdGlvbkFycmF5WzBdLFxyXG4gICAgICBQb3N0Q29kZTogcG9zdGNvZGUsXHJcbiAgICAgIFN0cmVldDogc3RyZWV0LFxyXG4gICAgICBUb3duOiB0b3duXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNUeXBlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0cmFuc1R5cGVJbmRleCA9IHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZTtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zVHlwZXMuZmluZCgoeCkgPT4geC5rZXkgPT09IHRyYW5zVHlwZUluZGV4KT8udmFsdWUgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRQYXNzZW5nZXJzID0gKCk6IHN0cmluZyA9PiB7XHJcbiAgICBjb25zdCBhZHVsdHMgPSB0aGlzLmFkdWx0cztcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgIGxldCBwYXNzZW5nZXJzID0gYCR7YWR1bHRzfSBBZHVsdGA7XHJcblxyXG4gICAgaWYgKE51bWJlcihhZHVsdHMpICE9PSAxKSB7XHJcbiAgICAgIHBhc3NlbmdlcnMgKz0gJ3MnO1xyXG4gICAgfVxyXG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPT09IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPiAxKSB7XHJcbiAgICAgIHBhc3NlbmdlcnMgKz0gYCwgJHtjaGlsZHJlbn0gQ2hpbGRyZW5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhc3NlbmdlcnM7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfTtcclxuXHJcbiAgYXN5bmMgYWRkQ2FiSGlyZVRvQmFza2V0KFxyXG4gICAgY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUsXHJcbiAgICBjYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgaWYgKGNhYkhpcmVRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoY2FiSGlyZVF1b3RlKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFkdWx0czogY2FiSGlyZVF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgICAgc2VydmljZTogY2FiSGlyZVF1b3RlLnNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgaWQ6IGNhYkhpcmVRdW90ZS5pZCxcclxuICAgICAgICAgICAgZGVwYXJ0czogY2FiSGlyZVF1b3RlLmRlcGFydHMsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogY2FiSGlyZVF1b3RlLnN1cHBsaWVyTmFtZSxcclxuICAgICAgICAgICAgZXN0aW1hdGVkQ08yOiBjYWJIaXJlUXVvdGUuZXN0aW1hdGVkQ08yLFxyXG4gICAgICAgICAgICBmcm9tTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGNhYkhpcmVRdW90ZS5mcm9tTG9jYXRpb24ubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b0xvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgYWRkcmVzczogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGNhYkhpcmVRdW90ZS50b0xvY2F0aW9uLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogY2FiSGlyZVF1b3RlLnRvTG9jYXRpb24ubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZlaGljbGVUeXBlOiBjYWJIaXJlUXVlcnkudmVoaWNsZVR5cGUsXHJcbiAgICAgICAgICAgIHRyaXBEaXN0YW5jZU1ldHJlczogY2FiSGlyZVF1b3RlLnRyaXBEaXN0YW5jZU1ldHJlcyxcclxuICAgICAgICAgICAgdHJpcER1cmF0aW9uU2Vjb25kczogY2FiSGlyZVF1b3RlLnRyaXBEdXJhdGlvblNlY29uZHMsXHJcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJpY2U6IGNhYkhpcmVRdW90ZS5wcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBjYWJIaXJlUXVvdGUuY3VycmVuY3ksXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FiSGlyZVF1ZXJ5LFxyXG4gICAgICAgICAgY28yUGVySXRlbTogY2FiSGlyZVF1b3RlLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGNhYkhpcmVRdW90ZS5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IGNhYkhpcmVRdWVyeS5kZXBhcnRzLmZvcm1hdCgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBjYWJIaXJlUXVvdGUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hGcm9tQW5kVG9Mb2NhdGlvbigpIHtcclxuICAgIGNvbnN0IG5ld0Zyb21BZGRyZXNzID0geyAuLi50aGlzLnRvQWRkcmVzcyB9O1xyXG4gICAgY29uc3QgbmV3VG9BZGRyZXNzID0geyAuLi50aGlzLmZyb21BZGRyZXNzIH07XHJcbiAgICB0aGlzLmZyb21BZGRyZXNzID0gbmV3RnJvbUFkZHJlc3M7XHJcbiAgICB0aGlzLnRvQWRkcmVzcyA9IG5ld1RvQWRkcmVzcztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhYkhpcmVRdW90ZVtdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IHJlc3VsdHNbMF0uY3VycmVuY3k7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoXHJcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBDYWJIaXJlUXVvdGUpID0+IHtcclxuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcclxuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcclxuICAgICAgfSxcclxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUpIHtcclxuICAgIGNvbnN0IGRlcGFydHMgPSBtb21lbnQoY2FiSGlyZVF1b3RlLmRlcGFydHMpLmZvcm1hdChcclxuICAgICAgQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdMb3dlc3QgUHJpY2UnLFxyXG4gICAgICAgIHZhbHVlOiBjYWJIaXJlUXVvdGUucHJpY2UudG9TdHJpbmcoKSArICcgJyArIGNhYkhpcmVRdW90ZS5jdXJyZW5jeVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BpY2t1cCBUaW1lJyxcclxuICAgICAgICB2YWx1ZTogZGVwYXJ0c1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1Rlcm1zIGFuZCBDb25kaXRpb25zJyxcclxuICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICc8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cuY21hY2dyb3VwLmNvbS9cIj53d3cuY21hY2dyb3VwLmNvbTwvYT4nXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYWIsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0ICYmIGZhdi50b0xvY2F0aW9uLlN0cmVldCkge1xyXG4gICAgICB0aGlzLm1vZGUgPSBUYXhpRm9ybU1vZGUuQUREUkVTUztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kZSA9IFRheGlGb3JtTW9kZS5TVEFUSU9OO1xyXG4gICAgICB0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID0gZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXRcclxuICAgICAgICA/IEFpcnBvcnRTZWFyY2hNb2RlLkRST1BPRkZcclxuICAgICAgICA6IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUDtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChcclxuICAgICAgICAgICFmYXYuZnJvbUxvY2F0aW9uLlN0cmVldFxyXG4gICAgICAgICAgICA/IGZhdi5mcm9tTG9jYXRpb24uSG91c2VcclxuICAgICAgICAgICAgOiBmYXYudG9Mb2NhdGlvbi5Ib3VzZVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChhaXJwb3J0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFpcnBvcnQgPSAoYWlycG9ydCBhcyBhbnlbXSlbMF07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHM7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LmNoaWxkcmVuO1xyXG4gICAgdGhpcy5pbmZhbnRzID0gZmF2LmluZmFudHM7XHJcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkhvdXNlID0gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZVxyXG4gICAgLy8gdGhpcy5mcm9tQWRkcmVzcy5TdHJlZXQgPSBmYXYuZnJvbUxvY2F0aW9uLlN0cmVldFxyXG4gICAgLy8gdGhpcy5mcm9tQWRkcmVzcy5Ub3duID0gZmF2LmZyb21Mb2NhdGlvbi5Ub3duXHJcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkNvdW50cnkgPSBmYXYuZnJvbUxvY2F0aW9uLkNvdW50cnlcclxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuUG9zdENvZGUgPSBmYXYuZnJvbUxvY2F0aW9uLlBvc3RDb2RlXHJcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLnBsYWNlRGVzY3JpcHRpb24gPSBmYXYuZnJvbUxvY2F0aW9uLnBsYWNlRGVzY3JpcHRpb25cclxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkhvdXNlID0gZmF2LnRvTG9jYXRpb24uSG91c2VcclxuICAgIC8vIHRoaXMudG9BZGRyZXNzLlN0cmVldCA9IGZhdi50b0xvY2F0aW9uLlN0cmVldFxyXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuVG93biA9IGZhdi50b0xvY2F0aW9uLlRvd25cclxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkNvdW50cnkgPSBmYXYudG9Mb2NhdGlvbi5Db3VudHJ5XHJcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Qb3N0Q29kZSA9IGZhdi50b0xvY2F0aW9uLlBvc3RDb2RlXHJcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5wbGFjZURlc2NyaXB0aW9uID0gZmF2LnRvTG9jYXRpb24ucGxhY2VEZXNjcmlwdGlvblxyXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IGZhdi5mcm9tTG9jYXRpb247XHJcbiAgICB0aGlzLnRvQWRkcmVzcyA9IGZhdi50b0xvY2F0aW9uO1xyXG4gICAgdGhpcy52ZWhpY2xlVHlwZSA9IGZhdi52ZWhpY2xlVHlwZTtcclxuICB9XHJcbn1cclxuIl19
|
|
982
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQTZCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRSxPQUFPLEVBU0wsNEJBQTRCLEVBQzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxFQUtMLGtCQUFrQixFQWNsQixXQUFXLEVBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLFlBQVksRUFFYixNQUFNLDBDQUEwQyxDQUFDO0FBVWxELE1BQU0sT0FBTyx1QkFDWCxTQUFRLG9CQUlQO0lBMFlELFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDbEMsYUFBK0MsRUFDdkMsYUFBK0MsRUFDdkQsV0FBaUM7UUFHakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBUm5ELGVBQVUsR0FBVixVQUFVLENBQStCO1FBSXpDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQXZZbEQsU0FBSSxHQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ25DLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRXJDLGtCQUFhLEdBQXlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFM0MsZUFBVSxHQUFnQjtZQUNqQyxFQUFFLEdBQUcsRUFBRSxr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K0NBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLHFEQUE2QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzRm9ybSxcclxuICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIFJhaWxBaXJwb3J0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBMb2NhdGlvbkRldGFpbHMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnNcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIENhYkhpcmVMb2NhdGlvbixcclxuICBDYWJIaXJlTG9jYXRpb25JbnB1dCxcclxuICBDYWJIaXJlUXVvdGUsXHJcbiAgQ2FiSGlyZVZlaGljbGVUeXBlLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBMb2NhdGlvbkRldGFpbCxcclxuICBRdWVyeVNlYXJjaENhYkhpcmVBcmdzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRTZWFyY2hNb2RlLFxyXG4gIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIENhYkhpcmVUZW1wUGFyYW1zLFxyXG4gIFRheGlBaXJwb3J0LFxyXG4gIFRheGlBdHRyaWJ1dGUsXHJcbiAgVGF4aUZvcm1Nb2RlLFxyXG4gIFRyYW5zVHlwZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUNhYkhpcmVTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYWItaGlyZS1zZWFyY2gtYXJnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaDxDSF9RIGV4dGVuZHMgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGU+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICBDYWJIaXJlVGVtcFBhcmFtcyxcclxuICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlIHtcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfY2FiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2Vjb25kYXJ5X3NlYXJjaF9jYWInO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2NhYic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1VTFRJX1NUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ211bHRpX3Jlc3VsdHNfY2FiJztcclxuICBwcml2YXRlIG91dGJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xyXG4gIHByaXZhdGUgaW5ib3VuZFZpc2liaWxpdHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYWI7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IFtdO1xyXG5cclxuICBhaXJwb3J0Q2hhbmdlOiBTdWJqZWN0PFRheGlBaXJwb3J0PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHJlYWRvbmx5IHRyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xyXG4gICAgeyBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksIHZhbHVlOiAnQW55ICgxLTggUGFzc2VuZ2VycyknLCBpZDogOCB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5TdGFuZGFyZENhcixcclxuICAgICAgdmFsdWU6ICdTYWxvb24gQ2FyICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQmxhY2tDYWIsXHJcbiAgICAgIHZhbHVlOiAnSGFja25leSBDYXJyaWFnZSAoMS00IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkRkYUNhcixcclxuICAgICAgdmFsdWU6ICdEZGEgLSB3aGVlbGNoYWlyIGFjY2Vzc2libGUgKDEtNCBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NZWRpdW1NcHYsXHJcbiAgICAgIHZhbHVlOiAnUGVvcGxlIENhcnJpZXIgKDEtNyBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA3XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5FeGVjdXRpdmVDYXIsXHJcbiAgICAgIHZhbHVlOiAnRXhlY3V0aXZlICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfVxyXG4gIF07XHJcbiAgcmVhZG9ubHkgYXR0cmlidXRlczogVGF4aUF0dHJpYnV0ZVtdID0gW1xyXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnd2hlZWxjaGFpcicsIHZhbHVlOiAnV2hlZWxjaGFpciAoT24gUmVxdWVzdCknIH0sXHJcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICdjYWxsX29uX2Fycml2YWwnLCB2YWx1ZTogJ0NhbGwgT24gQXJyaXZhbCcgfSxcclxuICAgIHtcclxuICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgIGtleTogJ21lZXRfYW5kX2dyZWV0JyxcclxuICAgICAgdmFsdWU6ICdNZWV0IEFuZCBHcmVldCAoQ2hhcmdlIEFwcGxpZXMpJ1xyXG4gICAgfSxcclxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3dhaXRfYW5kX3JldHVybicsIHZhbHVlOiAnV2FpdCBBbmQgUmV0dXJuJyB9XHJcbiAgXTtcclxuICByZWFkb25seSBzZWFyY2hUeXBlcyA9IFsnT25lLXdheScsICdSZXR1cm4nXTtcclxuXHJcbiAgcmVhZG9ubHkgYWlycG9ydFNlYXJjaFR5cGVzID0gWydBaXJwb3J0IGRyb3Agb2ZmJywgJ0FpcnBvcnQgUGljayBVcCddO1xyXG4gIHJlYWRvbmx5IGNyaXRlcmlhID0gWydQaWNrIFVwIFRpbWUnXTtcclxuXHJcbiAgbW9kZTogVGF4aUZvcm1Nb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XHJcbiAgbWluU2VsZWN0RGF0ZTogbW9tZW50Lk1vbWVudCA9IG1vbWVudCgpO1xyXG4gIG1pblJldHVyblNlbGVjdERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxyXG4gIH07XHJcblxyXG4gIC8vIGdldHRlcnMgYW5kIHNldHRlcnNcclxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuICBzZWxlY3RlZFBsYWNlczogYW55ID0gW107XHJcbiAgcHJpdmF0ZSBfZnJvbUxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb247XHJcbiAgcHJpdmF0ZSBfdG9Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uO1xyXG4gIHByaXZhdGUgX3ZpYXM6IENhYkhpcmVMb2NhdGlvbltdID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdO1xyXG5cclxuICBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl90b0xvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBzZWFyY2hUeXBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07XHJcbiAgZ2V0IHNlYXJjaFR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWFyY2hUeXBlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogYWlycG9pcnQgc2VhcmNoVHlwZVxyXG4gICAqL1xyXG5cclxuICBfYWlycG9ydFNlYXJjaFR5cGU6IEFpcnBvcnRTZWFyY2hNb2RlID0gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRjtcclxuICBnZXQgYWlycG9ydFNlYXJjaFR5cGUoKTogQWlycG9ydFNlYXJjaE1vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlO1xyXG4gIH1cclxuICBzZXQgYWlycG9ydFNlYXJjaFR5cGUobW9kZTogQWlycG9ydFNlYXJjaE1vZGUpIHtcclxuICAgIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlID0gbW9kZTtcclxuICAgIGlmICh0aGlzLmZyb21BZGRyZXNzIHx8IHRoaXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMuc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcbiAgLypcclxuICAgKiBhaXJwb2lydCBhbmQgdHJhaW4gc3RhdGlvbiBzZWFyY2hUeXBlXHJcbiAgICovXHJcblxyXG4gIGdldCBmcm9tTG9jYXRpb25UeXBlKCk6IFRheGlGb3JtTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGU7XHJcbiAgfVxyXG4gIHNldCBmcm9tTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGUgPSBtb2RlO1xyXG4gIH1cclxuICBnZXQgdG9Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9Mb2NhdGlvblR5cGU7XHJcbiAgfVxyXG4gIHNldCB0b0xvY2F0aW9uVHlwZShtb2RlOiBUYXhpRm9ybU1vZGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZSA9IG1vZGU7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogc2VhcmNoQ3JpdGVyaWFcclxuICAgKi9cclxuICBwcml2YXRlIF9zZWFyY2hDcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWFbMF07XHJcbiAgZ2V0IHNlYXJjaENyaXRlcmlhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaENyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlYXJjaENyaXRlcmlhKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaENyaXRlcmlhID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIG91dGJvdW5kRGF0ZVRpbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9vdXRib3VuZERhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxyXG4gICAgbW9tZW50KCksXHJcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcclxuICApO1xyXG4gIGdldCBvdXRib3VuZERhdGVUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmREYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmREYXRlVGltZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiByZXR1cm5EYXRlVGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JldHVybkRhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxyXG4gICAgbW9tZW50KCksXHJcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcclxuICApO1xyXG4gIGdldCByZXR1cm5EYXRlVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5EYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy5fcmV0dXJuRGF0ZVRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogZmxpZ2h0TnVtYmVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmxpZ2h0TnVtYmVyOiBzdHJpbmcgPSAnJztcclxuICBnZXQgZmxpZ2h0TnVtYmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZsaWdodE51bWJlcjtcclxuICB9XHJcbiAgc2V0IGZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9mbGlnaHROdW1iZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogZmxpZ2h0TnVtYmVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmV0dXJuRmxpZ2h0TnVtYmVyOiBzdHJpbmcgPSAnJztcclxuICBnZXQgcmV0dXJuRmxpZ2h0TnVtYmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkZsaWdodE51bWJlcjtcclxuICB9XHJcbiAgc2V0IHJldHVybkZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5GbGlnaHROdW1iZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogYWlycG9ydFxyXG4gICAqL1xyXG5cclxuICBnZXQgYWlycG9ydCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydDtcclxuICB9XHJcbiAgc2V0IGFpcnBvcnQodmFsdWU6IFRheGlBaXJwb3J0KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiB0ZXJtaW5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0ZXJtaW5hbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtaW5hbDtcclxuICB9XHJcbiAgc2V0IHRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rlcm1pbmFsID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVwYXJ0cygpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cztcclxuICB9XHJcblxyXG4gIHNldCBkZXBhcnRzKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cyA9IHZhbHVlLmlzVmFsaWQgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl90aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1pblJldHVyblNlbGVjdERhdGUgPSB7XHJcbiAgICAgIGRheTogbW9tZW50KHZhbHVlKS5kYXRlKCksXHJcbiAgICAgIG1vbnRoOiBtb21lbnQodmFsdWUpLm1vbnRoKCkgKyAxLFxyXG4gICAgICB5ZWFyOiBtb21lbnQodmFsdWUpLnllYXIoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodmFsdWUuaXNBZnRlcih0aGlzLnJldHVybkRhdGVUaW1lKSkge1xyXG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGZyb21Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Zyb21Mb2NhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBmcm9tTG9jYXRpb24odmFsdWU6IENhYkhpcmVMb2NhdGlvbikge1xyXG4gIC8vICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgdG9Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3RvTG9jYXRpb247XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgdG9Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XHJcbiAgLy8gICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluZmFudHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cztcclxuICB9XHJcblxyXG4gIHNldCBpbmZhbnRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY291bnRyeUNvZGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY291bnRyeUNvZGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNvdW50cnlDb2RlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhcygpOiBDYWJIaXJlTG9jYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlhcztcclxuICB9XHJcblxyXG4gIHNldCB2aWFzKHZhbHVlOiBDYWJIaXJlTG9jYXRpb25bXSkge1xyXG4gICAgdGhpcy5fdmlhcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYXNGcm9tKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb207XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhc0Zyb20odmFsdWU6IEFkZHJlc3NGb3JtKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb20gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3ZpYXNbMF0gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhc1RvKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc1RvO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYXNUbyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzVG8gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3ZpYXNbMV0gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmVoaWNsZVR5cGUoKTogQ2FiSGlyZVZlaGljbGVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmVoaWNsZVR5cGUodmFsdWU6IENhYkhpcmVWZWhpY2xlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJvbUFkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBmcm9tQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWUgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZyb21TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgZnJvbVN0YXRpb24odmFsdWU6IFJhaWxBaXJwb3J0KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb24gPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZVxyXG4gICAgICA/IHtcclxuICAgICAgICBhZGRyZXNzOiB2YWx1ZS5kZXN0aW5hdGlvbixcclxuICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdG9BZGRyZXNzKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRvQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdG9TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRvU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZVxyXG4gICAgICA/IHtcclxuICAgICAgICBhZGRyZXNzOiB2YWx1ZS5kZXN0aW5hdGlvbixcclxuICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FiZmV0Y2hlcjogQmFzZUNhYmhpcmVRdW90ZUZldGNoZXI8Q0hfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FiSGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIENhYkhpcmVUZW1wUGFyYW1zXHJcbiAgICAgIH07XHJcblxyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhYkhpcmVRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXR1cm5EYXRhOiBhbnkgPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgICApO1xyXG4gICAgICBpZiAocmV0dXJuRGF0YSkge1xyXG4gICAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUgPSBtb21lbnQocmV0dXJuRGF0YS50ZW1wUGFyYW1zLmRlcGFydHMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMV07XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciByZWNvdmVyaW5nIHJldHVybiBkYXRhOiAnLCBlcnJvciwgJyArKysnKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcclxuICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xyXG4gICAgICB0aGlzLnRvQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy50b0FkZHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuQ2FiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhYmhpcmVRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZGFyeVJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdCh0aGlzLm11bHRpUmVzdWx0c1Nlc3Npb25OYW1lKSB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHMgPSBzZWNvbmRhcnlSZXN1bHRzO1xyXG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChzZWNvbmRhcnlSZXN1bHRzKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIHRoaXMub3V0Ym91bmRWaXNpYmlsaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guTVVMVElfU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FiSGlyZVF1ZXJ5KCkpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uSXRlbShcclxuICAgICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgdGhpcy5fc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07IC8vIHJlc2V0IHRvIG9uZS13YXlcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXNcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRnJvbSAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMudW5peCgpIDwgbW9tZW50KCkudW5peCgpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RheGkgam91cm5leSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgKyB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VhcmNoVHlwZSA9PT0gdGhpcy5zZWFyY2hUeXBlc1sxXSAmJlxyXG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLmlzU2FtZU9yQmVmb3JlKHRoaXMuZGVwYXJ0cylcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdSZXR1cm4gRGF0ZS9UaW1lIG11c3QgYmUgYWZ0ZXIgb3V0Ym91bmQgZGF0ZS90aW1lJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxlcnMubGVuZ3RoID4gNCkge1xyXG4gICAgICAvLyB1c2UgaWQgZnJvbSB0cmF2ZWwgdHlwZSB0byBzZWUgaWZcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudHJhbnNUeXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmtleSA9PT0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlKVxyXG4gICAgICAgICAgLmlkIDwgdGhpcy50cmF2ZWxsZXJzLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgYFRoZSBudW1iZXIgb2YgcGFzc2VuZ2VycyBleGNlZWRzIHRoZSBhdmFpbGFibGUgdmVoaWNsZSBjYXBhY2l0eSBmb3IgdGhlICR7dGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlfSB0YXhpYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xyXG4gICAgICB0aGlzLmRlcGFydHMgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIC0ga2ljayBvZmYgdHdvIHNlYXJjaGVzXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuUXVlcnkgPSB0aGlzLmdldFJldHVyblNlYXJjaFF1ZXJ5KCk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFF1ZXJ5OiAnLCBxdWVyeSwgJyArKysnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBSZXR1cm4gUXVlcnk6ICcsIHJldHVyblF1ZXJ5LCAnICsrKycpO1xyXG5cclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRlbXBQYXJhbXM6IHJldHVyblF1ZXJ5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TXVsdGlTZWFyY2goW1xyXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdChcclxuICAgICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihyZXR1cm5RdWVyeSlcclxuICAgICAgICAgIClcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaChcclxuICAgICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSlcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3NcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzKTogSUNhYkhpcmVTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHNlYXJjaFF1ZXJ5LmZyb21BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gICAgc2VhcmNoUXVlcnkudG9BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcztcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5mcm9tU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcclxuICAgIHNlYXJjaFF1ZXJ5LnRvU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XHJcblxyXG4gICAgc2VhcmNoUXVlcnkudmlhc0Zyb20gPSB0aGlzLnZpYXNGcm9tO1xyXG4gICAgc2VhcmNoUXVlcnkudmlhc1RvID0gdGhpcy52aWFzVG87XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcclxuICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcclxuXHJcbiAgICB0aGlzLmZyb21BZGRyZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUFkZHJlc3M7XHJcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcclxuXHJcbiAgICB0aGlzLmZyb21TdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbVN0YXRpb247XHJcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcclxuXHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLmZyb21BZGRyZXNzKTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XHJcblxyXG4gICAgdGhpcy52aWFzRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNGcm9tO1xyXG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHNpbXBsaWZpZWRMb2NhdGlvbjogYm9vbGVhbiA9IHRydWUpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIGRlcGFydHM6IHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLFxyXG4gICAgICBmcm9tTG9jYXRpb246IHNpbXBsaWZpZWRMb2NhdGlvblxyXG4gICAgICAgID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKVxyXG4gICAgICAgIDogKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyBhcyBhbnkpLFxyXG4gICAgICB0b0xvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cclxuICAgICAgICA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpXHJcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyBhcyBhbnkpLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcclxuICAgICAgdmlhczogdGhpcy5fdmlhc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmV0dXJuU2VhcmNoUXVlcnkoKTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB7XHJcbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLl9yZXR1cm5EYXRlVGltZSxcclxuICAgICAgZnJvbUxvY2F0aW9uOiB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSwgLy8gc3dhcCB0aGUgbG9jYXRpb25zIGFyb3VuZFxyXG4gICAgICB0b0xvY2F0aW9uOiB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcclxuICAgICAgdmlhczogdGhpcy5fdmlhc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlT3V0Ym91bmRBZGRyZXNzKGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdChcclxuICAgICAgbG9jYXRpb24sXHJcbiAgICAgIHBsYWNlRGVzY3JpcHRpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbmJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KFxyXG4gICAgICBsb2NhdGlvbixcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKGxvY2F0aW9uOiBBZGRyZXNzRm9ybSk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhZGRyZXNzOiBbXHJcbiAgICAgICAgbG9jYXRpb24/LlRlcm1pbmFsLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ib3VzZSxcclxuICAgICAgICBsb2NhdGlvbj8uU3RyZWV0LFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ub3duLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Db3VudHJ5XHJcbiAgICAgIF1cclxuICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpOiBib29sZWFuID0+ICEhaXRlbSlcclxuICAgICAgICAuam9pbignLCcpLFxyXG4gICAgICBwb3N0Y29kZTogbG9jYXRpb24/LlBvc3RDb2RlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hBZGRyZXNzZXMoKSB7XHJcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyk7XHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbihcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzXHJcbiAgICApO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5KGFzYz86IGJvb2xlYW4sIHJldHVybkluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAocmV0dXJuSW5kZXggPj0gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnaGVyZScpO1xyXG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdKTtcclxuICAgICAgaWYgKGFzYykge1xyXG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdID0gcmVzdWx0cztcclxuICAgICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dCh0aGlzLmZ1bGxNdWx0aVJlc3VsdHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgIGlmIChhc2MpIHtcclxuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHM/LnNvcnQoXHJcbiAgICAgICAgICAoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICEgc3R1ZmYgdG8gZ28gaW4gYSBwb3N0Y29kZSBzZXJ2aWVcclxuXHJcbiAgZ2V0QWRkcmVzc0Zvcm1hdChsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBIb3VzZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xyXG4gICAgICAgICdmbG9vcicsXHJcbiAgICAgICAgJ3N0cmVldF9udW1iZXInLFxyXG4gICAgICAgICdwcmVtaXNlJ1xyXG4gICAgICBdKSxcclxuICAgICAgU3RyZWV0OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbXHJcbiAgICAgICAgJ3JvdXRlJyxcclxuICAgICAgICAnc3RyZWV0X25hbWUnLFxyXG4gICAgICAgICdlc3RhYmxpc2htZW50J1xyXG4gICAgICBdKSxcclxuICAgICAgVG93bjogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xyXG4gICAgICAgICdwb3N0YWxfdG93bicsXHJcbiAgICAgICAgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMicsXHJcbiAgICAgICAgJ2xvY2FsaXR5J1xyXG4gICAgICBdKSxcclxuICAgICAgUG9zdENvZGU6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncG9zdGNvZGUnXSksXHJcbiAgICAgIENvdW50cnk6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsnY291bnRyeSddKSxcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgbGV0IGFkZHJlc3NQcm9wID0gbnVsbDtcclxuICAgIGlmIChwbGFjZURldGFpbHMgJiYgQXJyYXkuaXNBcnJheShwbGFjZURldGFpbHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwbGFjZURldGFpbHMuZmlsdGVyKChwZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xyXG4gICAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgYWRkcmVzc1Byb3AgPSBwcm9wLmxvbmdfbmFtZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkZHJlc3NQcm9wO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkcmVzc0Zyb21BaXJwb3J0RGV0YWlscyhcclxuICAgIGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCxcclxuICAgIGFpcnBvcnROYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKGFpcnBvcnREZXRhaWxzKTtcclxuICAgIGxldCBhZGRyZXNzOiBBZGRyZXNzRm9ybSA9IG51bGw7XHJcbiAgICBpZiAoYWlycG9ydERldGFpbHMpIHtcclxuICAgICAgYWRkcmVzcyA9IHtcclxuICAgICAgICBDb3VudHJ5OiBhaXJwb3J0RGV0YWlscy5jb3VudHJ5LFxyXG4gICAgICAgIFN0cmVldDogYWlycG9ydERldGFpbHMucm9hZCxcclxuICAgICAgICBQb3N0Q29kZTogYWlycG9ydERldGFpbHMucG9zdGNvZGUsXHJcbiAgICAgICAgVG93bjogYWlycG9ydERldGFpbHMuY2l0eSxcclxuICAgICAgICBwbGFjZURlc2NyaXB0aW9uOiBhaXJwb3J0TmFtZSxcclxuICAgICAgICBIb3VzZTogYWlycG9ydE5hbWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBhZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9jYXRpb25Gcm9tQWlycG9ydChhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsIGFpcnBvcnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGcm9tQWlycG9ydERldGFpbHMoXHJcbiAgICAgIGFpcnBvcnREZXRhaWxzLFxyXG4gICAgICBhaXJwb3J0TmFtZVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IFRheGlGb3JtTW9kZS5TVEFUSU9OKSB7XHJcbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID09PSBBaXJwb3J0U2VhcmNoTW9kZS5QSUNLVVApIHtcclxuICAgICAgICB0aGlzLmZyb21BZGRyZXNzID0gYWRkcmVzcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IGFkZHJlc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRvU2VsZWN0ZWRQbGFjZXMoYWRkcmVzczogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBzZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eS5uZXh0KHNob3dGb3JtKTtcclxuICB9XHJcblxyXG4gIHNldEluYm91bmRGb3JtVmlzaWJpbGl0eShzaG93Rm9ybTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pbmJvdW5kVmlzaWJpbGl0eS5uZXh0KHNob3dGb3JtKTtcclxuICB9XHJcblxyXG4gIGdldE91dGJvdW5kRm9ybVZpc2liaWxpdHkoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eTtcclxuICB9XHJcblxyXG4gIGdldEluYm91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZFZpc2liaWxpdHk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IHJhaWxJdGVtOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeVxyXG4gICAgY29uc3QgaG90ZWxJdGVtOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuQ2FyXT8uc2VhcmNoUXVlcnlcclxuICAgIGNvbnN0IGxvdW5nZUl0ZW06IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IFxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5XHJcbiAgICBjb25zdCBwYXJraW5nSXRlbTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUGFya2luZ10/LnNlYXJjaFF1ZXJ5XHJcbiAgICBjb25zdCBldXJvc3Rhckl0ZW06IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPSBcclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0/LnNlYXJjaFF1ZXJ5XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KFwiLVwiKVxyXG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCwgXCJcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gZmxpZ2h0IGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmFpbEl0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoXCItXCIpXHJcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLCBcIlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXJsSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KFwiLVwiKVxyXG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCwgXCJcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gaW50ZXJuYXRpb25hbCByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaG90ZWxJdGVtKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSE9URUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuSE9URUwub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGhvdGVsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2FySXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5DQVIuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KFwiLVwiKVxyXG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCwgXCJcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gY2FyIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobG91bmdlSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KFwiLVwiKVxyXG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCwgXCJcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gbG91bmdlIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5vdXRib3VuZERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoXCItXCIpXHJcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLCBcIlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBwYXJraW5nIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXVyb3N0YXJJdGVtKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRVVST1NUQVIuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXZpb3VzSXRlbXMuRVVST1NUQVIub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdChcIi1cIilcclxuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsIFwiXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGV1cm9zdGFyIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaENhYkhpcmVRdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ2FiSGlyZVF1ZXJ5KSB7XHJcbiAgICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChzZWFyY2hDYWJIaXJlUXVlcnkuZGVwYXJ0cyk7XHJcbiAgICAgIHRoaXMudmVoaWNsZVR5cGUgPSBzZWFyY2hDYWJIaXJlUXVlcnkudmVoaWNsZVR5cGU7XHJcblxyXG4gICAgICB0aGlzLmZyb21BZGRyZXNzID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKFxyXG4gICAgICAgIHNlYXJjaENhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICBzZWFyY2hDYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLnBvc3Rjb2RlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnRvQWRkcmVzcyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbihcclxuICAgICAgICBzZWFyY2hDYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5hZGRyZXNzLFxyXG4gICAgICAgIHNlYXJjaENhYkhpcmVRdWVyeS50b0xvY2F0aW9uLnBvc3Rjb2RlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoc2VhcmNoQ2FiSGlyZVF1ZXJ5LnZpYXMpIHtcclxuICAgICAgICBsZXQgdmlhc0Zyb206IENhYkhpcmVMb2NhdGlvbklucHV0W10gPVxyXG4gICAgICAgICAgc2VhcmNoQ2FiSGlyZVF1ZXJ5LnZpYXMgYXMgQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXTtcclxuICAgICAgICBpZiAodmlhc0Zyb21bMF0pIHtcclxuICAgICAgICAgIHRoaXMudmlhc0Zyb20gPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXHJcbiAgICAgICAgICAgIHZpYXNGcm9tWzBdPy5hZGRyZXNzLFxyXG4gICAgICAgICAgICB2aWFzRnJvbVswXT8ucG9zdGNvZGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmlhc1RvOiBDYWJIaXJlTG9jYXRpb25JbnB1dFtdID1cclxuICAgICAgICAgIHNlYXJjaENhYkhpcmVRdWVyeS52aWFzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0W107XHJcbiAgICAgICAgaWYgKHZpYXNUb1sxXSkge1xyXG4gICAgICAgICAgdGhpcy52aWFzVG8gPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXHJcbiAgICAgICAgICAgIHZpYXNUb1sxXT8uYWRkcmVzcyxcclxuICAgICAgICAgICAgdmlhc1RvWzFdPy5wb3N0Y29kZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgVHJhdmVsbGVyc1xyXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcclxuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuYWRkVHJhdmVsbGVyKHVzZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udmVydEFkZHJlc3NMb2NhdGlvbihhZGRyZXNzOiBzdHJpbmcsIHBvc3Rjb2RlOiBzdHJpbmcpIHtcclxuICAgIGxldCBsb2NhdGlvbkFycmF5ID0gYWRkcmVzcy5zcGxpdCgnLCcpO1xyXG4gICAgbGV0IHN0cmVldCA9ICcnO1xyXG4gICAgbGV0IHRvd24gPSBsb2NhdGlvbkFycmF5W2xvY2F0aW9uQXJyYXkubGVuZ3RoIC0gMl07XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxvY2F0aW9uQXJyYXkubGVuZ3RoIC0gMjsgaW5kZXgrKykge1xyXG4gICAgICBzdHJlZXQgKz0gbG9jYXRpb25BcnJheVtpbmRleF0gKyAnICc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBDb3VudHJ5OiBhZGRyZXNzLnNsaWNlKC0yKSxcclxuICAgICAgSG91c2U6IGxvY2F0aW9uQXJyYXlbMF0sXHJcbiAgICAgIFBvc3RDb2RlOiBwb3N0Y29kZSxcclxuICAgICAgU3RyZWV0OiBzdHJlZXQsXHJcbiAgICAgIFRvd246IHRvd25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRUcmFuc1R5cGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRyYW5zVHlwZUluZGV4ID0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNUeXBlcy5maW5kKCh4KSA9PiB4LmtleSA9PT0gdHJhbnNUeXBlSW5kZXgpPy52YWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldFBhc3NlbmdlcnMgPSAoKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IGFkdWx0cyA9IHRoaXMuYWR1bHRzO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgbGV0IHBhc3NlbmdlcnMgPSBgJHthZHVsdHN9IEFkdWx0YDtcclxuXHJcbiAgICBpZiAoTnVtYmVyKGFkdWx0cykgIT09IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSAncyc7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKGNoaWxkcmVuKSA9PT0gMSkge1xyXG4gICAgICBwYXNzZW5nZXJzICs9IGAsICR7Y2hpbGRyZW59IENoaWxkYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTnVtYmVyKGNoaWxkcmVuKSA+IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZHJlbmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFzc2VuZ2VycztcclxuICAgIHJldHVybiAnJztcclxuICB9O1xyXG5cclxuICBhc3luYyBhZGRDYWJIaXJlVG9CYXNrZXQoXHJcbiAgICBjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSxcclxuICAgIGNhYkhpcmVRdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBpZiAoY2FiSGlyZVF1b3RlLnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChjYWJIaXJlUXVvdGUpO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiBjYWJIaXJlUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBjYWJIaXJlUXVvdGUuc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBpZDogY2FiSGlyZVF1b3RlLmlkLFxyXG4gICAgICAgICAgICBkZXBhcnRzOiBjYWJIaXJlUXVvdGUuZGVwYXJ0cyxcclxuICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBjYWJIaXJlUXVvdGUuc3VwcGxpZXJOYW1lLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZWRDTzI6IGNhYkhpcmVRdW90ZS5lc3RpbWF0ZWRDTzIsXHJcbiAgICAgICAgICAgIGZyb21Mb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICBsYXRpdHVkZTogY2FiSGlyZVF1b3RlLmZyb21Mb2NhdGlvbi5sYXRpdHVkZSxcclxuICAgICAgICAgICAgICBsb25naXR1ZGU6IGNhYkhpcmVRdW90ZS5mcm9tTG9jYXRpb24ubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICBsYXRpdHVkZTogY2FiSGlyZVF1b3RlLnRvTG9jYXRpb24ubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sb25naXR1ZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVoaWNsZVR5cGU6IGNhYkhpcmVRdW90ZS52ZWhpY2xlVHlwZSxcclxuICAgICAgICAgICAgdHJpcERpc3RhbmNlTWV0cmVzOiBjYWJIaXJlUXVvdGUudHJpcERpc3RhbmNlTWV0cmVzLFxyXG4gICAgICAgICAgICB0cmlwRHVyYXRpb25TZWNvbmRzOiBjYWJIaXJlUXVvdGUudHJpcER1cmF0aW9uU2Vjb25kcyxcclxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZTogY2FiSGlyZVF1b3RlLnByaWNlLFxyXG4gICAgICAgICAgY3VycmVuY3k6IGNhYkhpcmVRdW90ZS5jdXJyZW5jeSxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiBjYWJIaXJlUXVlcnksXHJcbiAgICAgICAgICBjbzJQZXJJdGVtOiBjYWJIaXJlUXVvdGUuY28yUGVySXRlbSxcclxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcjogY2FiSGlyZVF1b3RlLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogY2FiSGlyZVF1ZXJ5LmRlcGFydHMuZm9ybWF0KCksXHJcbiAgICAgICAgICBsb3dlc3RQcmljZTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgIT0gY2FiSGlyZVF1b3RlLnByaWNlIHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9IGNhYkhpcmVRdW90ZS5jdXJyZW5jeSA/XHJcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IDogbnVsbCxcclxuICAgICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6IHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50ICE9IGNhYkhpcmVRdW90ZS5wcmljZSB8fCB0aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSAhPSBjYWJIaXJlUXVvdGUuY3VycmVuY3kgP1xyXG4gICAgICAgICAgICA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgY2FiSGlyZVF1b3RlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKSB7XHJcbiAgICBjb25zdCBuZXdGcm9tQWRkcmVzcyA9IHsgLi4udGhpcy50b0FkZHJlc3MgfTtcclxuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xyXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IG5ld0Zyb21BZGRyZXNzO1xyXG4gICAgdGhpcy50b0FkZHJlc3MgPSBuZXdUb0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBDYWJIaXJlUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0c1swXS5jdXJyZW5jeTtcclxuICAgIHJldHVybiByZXN1bHRzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IENhYkhpcmVRdW90ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1zQW5kQ29uZChjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSkge1xyXG4gICAgY29uc3QgZGVwYXJ0cyA9IG1vbWVudChjYWJIaXJlUXVvdGUuZGVwYXJ0cykuZm9ybWF0KFxyXG4gICAgICBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUVcclxuICAgICk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0xvd2VzdCBQcmljZScsXHJcbiAgICAgICAgdmFsdWU6IGNhYkhpcmVRdW90ZS5wcmljZS50b1N0cmluZygpICsgJyAnICsgY2FiSGlyZVF1b3RlLmN1cnJlbmN5XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUGlja3VwIFRpbWUnLFxyXG4gICAgICAgIHZhbHVlOiBkZXBhcnRzXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGVybXMgYW5kIENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgJzxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL3d3dy5jbWFjZ3JvdXAuY29tL1wiPnd3dy5jbWFjZ3JvdXAuY29tPC9hPidcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUNhYkhpcmVTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXQgJiYgZmF2LnRvTG9jYXRpb24uU3RyZWV0KSB7XHJcbiAgICAgIHRoaXMubW9kZSA9IFRheGlGb3JtTW9kZS5BRERSRVNTO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RlID0gVGF4aUZvcm1Nb2RlLlNUQVRJT047XHJcbiAgICAgIHRoaXMuYWlycG9ydFNlYXJjaFR5cGUgPSBmYXYuZnJvbUxvY2F0aW9uLlN0cmVldFxyXG4gICAgICAgID8gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRlxyXG4gICAgICAgIDogQWlycG9ydFNlYXJjaE1vZGUuUElDS1VQO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgICAgICAgIWZhdi5mcm9tTG9jYXRpb24uU3RyZWV0XHJcbiAgICAgICAgICAgID8gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZVxyXG4gICAgICAgICAgICA6IGZhdi50b0xvY2F0aW9uLkhvdXNlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGFpcnBvcnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWlycG9ydCA9IChhaXJwb3J0IGFzIGFueVtdKVswXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LmFkdWx0cztcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYuY2hpbGRyZW47XHJcbiAgICB0aGlzLmluZmFudHMgPSBmYXYuaW5mYW50cztcclxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuSG91c2UgPSBmYXYuZnJvbUxvY2F0aW9uLkhvdXNlXHJcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlN0cmVldCA9IGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0XHJcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlRvd24gPSBmYXYuZnJvbUxvY2F0aW9uLlRvd25cclxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuQ291bnRyeSA9IGZhdi5mcm9tTG9jYXRpb24uQ291bnRyeVxyXG4gICAgLy8gdGhpcy5mcm9tQWRkcmVzcy5Qb3N0Q29kZSA9IGZhdi5mcm9tTG9jYXRpb24uUG9zdENvZGVcclxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MucGxhY2VEZXNjcmlwdGlvbiA9IGZhdi5mcm9tTG9jYXRpb24ucGxhY2VEZXNjcmlwdGlvblxyXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuSG91c2UgPSBmYXYudG9Mb2NhdGlvbi5Ib3VzZVxyXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuU3RyZWV0ID0gZmF2LnRvTG9jYXRpb24uU3RyZWV0XHJcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Ub3duID0gZmF2LnRvTG9jYXRpb24uVG93blxyXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuQ291bnRyeSA9IGZhdi50b0xvY2F0aW9uLkNvdW50cnlcclxuICAgIC8vIHRoaXMudG9BZGRyZXNzLlBvc3RDb2RlID0gZmF2LnRvTG9jYXRpb24uUG9zdENvZGVcclxuICAgIC8vIHRoaXMudG9BZGRyZXNzLnBsYWNlRGVzY3JpcHRpb24gPSBmYXYudG9Mb2NhdGlvbi5wbGFjZURlc2NyaXB0aW9uXHJcbiAgICB0aGlzLmZyb21BZGRyZXNzID0gZmF2LmZyb21Mb2NhdGlvbjtcclxuICAgIHRoaXMudG9BZGRyZXNzID0gZmF2LnRvTG9jYXRpb247XHJcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gZmF2LnZlaGljbGVUeXBlO1xyXG4gIH1cclxufVxyXG4iXX0=
|