@sabstravtech/obtservices 0.0.22050309 → 0.0.26051001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +5 -3
  9. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  10. package/angular/lib/vendor/services/search.service.d.ts +4 -3
  11. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  12. package/angular/lib/vendor/services/user.service.d.ts +7 -3
  13. package/angular/lib/vendor/types/graphql.angular.types.d.ts +354 -90
  14. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  15. package/angular/sabstravtech-obtservices-angular.d.ts +0 -1
  16. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  17. package/angular/services.d.ts +1 -0
  18. package/angular/updaters.d.ts +1 -0
  19. package/base/fetchers.d.ts +7 -0
  20. package/base/interfaces.d.ts +2 -0
  21. package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
  22. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  23. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  24. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -4
  25. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +5 -3
  26. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +5 -4
  27. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +18 -13
  28. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +6 -5
  29. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  30. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +8 -4
  31. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +23 -9
  32. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +4 -3
  33. package/base/lib/vendor/classes/management-info-and-valid.d.ts +7 -2
  34. package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
  35. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +4 -3
  36. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -7
  37. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  38. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +1 -1
  39. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  40. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  41. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  42. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  43. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  44. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
  45. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +4 -2
  46. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +10 -6
  47. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
  48. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +11 -5
  49. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +3 -1
  50. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +7 -2
  51. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -5
  52. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +2 -0
  53. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +2 -0
  54. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +6 -2
  55. package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
  56. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  57. package/base/lib/vendor/interfaces/Iuser.service.d.ts +3 -1
  58. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  59. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  60. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  61. package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
  62. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  63. package/base/lib/vendor/models/traveller.object.d.ts +1 -1
  64. package/base/lib/vendor/services/enterprise-basket.service.d.ts +28 -10
  65. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  66. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  67. package/base/lib/vendor/services/search.service.d.ts +30 -25
  68. package/base/lib/vendor/services/url.service.d.ts +2 -0
  69. package/base/lib/vendor/services/user.service.d.ts +21 -5
  70. package/base/lib/vendor/services/webtoken.service.d.ts +5 -0
  71. package/base/lib/vendor/types/graphql.types.d.ts +326 -89
  72. package/base/lib/vendor/types/types.d.ts +44 -17
  73. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  74. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  75. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  76. package/base/services.d.ts +1 -0
  77. package/base/updaters.d.ts +1 -0
  78. package/bundles/sabstravtech-obtservices-angular.umd.js +466 -180
  79. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  80. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  81. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  82. package/bundles/sabstravtech-obtservices-base.umd.js +4435 -1004
  83. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  84. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  85. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  86. package/esm2015/angular/components/basket-panel.js +16 -7
  87. package/esm2015/angular/fetchers.js +8 -1
  88. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  91. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  92. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  93. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +11 -5
  94. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  95. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  96. package/esm2015/angular/lib/vendor/services/search.service.js +28 -25
  97. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  98. package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
  99. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  100. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +353 -72
  101. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  102. package/esm2015/angular/obtservices.module.js +3 -1
  103. package/esm2015/angular/sabstravtech-obtservices-angular.js +1 -2
  104. package/esm2015/angular/services.js +2 -1
  105. package/esm2015/angular/updaters.js +2 -1
  106. package/esm2015/base/fetchers.js +8 -1
  107. package/esm2015/base/interfaces.js +3 -1
  108. package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
  109. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +17 -1
  110. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
  111. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +98 -11
  112. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +146 -68
  113. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +140 -37
  114. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +111 -23
  115. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +218 -40
  116. package/esm2015/base/lib/vendor/classes/helpers.js +24 -4
  117. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +191 -48
  118. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +271 -27
  119. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +59 -11
  120. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
  121. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
  122. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +63 -11
  123. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +183 -23
  124. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
  125. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +2 -2
  126. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  127. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  128. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  129. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  130. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  131. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  134. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  135. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  144. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  147. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  148. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  149. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  150. package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
  151. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +154 -45
  152. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  153. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  154. package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
  155. package/esm2015/base/lib/vendor/services/requires-reason.service.js +53 -0
  156. package/esm2015/base/lib/vendor/services/search.service.js +82 -101
  157. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  158. package/esm2015/base/lib/vendor/services/user.service.js +64 -9
  159. package/esm2015/base/lib/vendor/services/webtoken.service.js +16 -5
  160. package/esm2015/base/lib/vendor/types/graphql.types.js +15 -2
  161. package/esm2015/base/lib/vendor/types/types.js +1679 -21
  162. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  163. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  164. package/esm2015/base/services.js +2 -1
  165. package/esm2015/base/updaters.js +2 -1
  166. package/fesm2015/sabstravtech-obtservices-angular.js +570 -148
  167. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  168. package/fesm2015/sabstravtech-obtservices-base.js +3725 -466
  169. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  170. package/package.json +1 -1
@@ -4,7 +4,7 @@ import moment from 'moment';
4
4
  import Countries from '../data/countries.json';
5
5
  import { BehaviorSubject, forkJoin, of, Subscription } from 'rxjs';
6
6
  import { ParkingEnterpriseSearch } from '../classes/parking-enterprise-search';
7
- import { BookerType, FareType, RailClass, RailSearchJourneyType, ServiceType, CabHireVehicleType, FlightCabinClass, IrlJourneyType } from '../types/graphql.types';
7
+ import * as graphqlTypes from '../types/graphql.types';
8
8
  import { LoungesEnterpriseSearch } from '../classes/lounges-enterprise-search';
9
9
  import { HotelEnterpriseSearch } from '../classes/hotel-enterprise-search';
10
10
  import { CarhireEnterpriseSearch } from '../classes/carhire-enterprise-search';
@@ -22,6 +22,7 @@ import _ from 'lodash';
22
22
  import { EurostarSearchType } from '../classes/eurostar-search-type.enum';
23
23
  import { FastTrackEnterpriseSearch } from '../classes/fast-track-enterprise-search';
24
24
  import { ModalTypes } from '../classes/modal-types.enum';
25
+ import { ServiceType } from '../types/graphql.types';
25
26
  export const MAX_TRAVELLERS = 8;
26
27
  export var TravellerSearchTypes;
27
28
  (function (TravellerSearchTypes) {
@@ -30,7 +31,7 @@ export var TravellerSearchTypes;
30
31
  TravellerSearchTypes["employeeNumber"] = "employeeNumber";
31
32
  })(TravellerSearchTypes || (TravellerSearchTypes = {}));
32
33
  export class BaseEnterpriseSearchService {
33
- constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, modalService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, getConfermaRoomImagesFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, confermaOfficeFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, baseSaveFavouriteSearchUpdater, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, getCovidMicrositeTokenFetcher, eurostarFetcher, searchUsersCanBookForFetcher, searchIrlStationsFetcher, irlDiscountCardsFetcher, getFlightFareRulesFetcher, getFlightSeatMapFetcher, getRailLiveDeparturesFetcher, applyHotelRulesFetcher, applyFlightRules, getUserFavouriteSearchesFetcher, deleteFavouriteSearchUpdater, emailBasketFetcher, fasttrackFetcher, sendOfflineNotificationFetcher, getHotelChainsFetcher, getRailProvidersFetcher, getAllAirlinesFetcher, getCarHireProvidersFetcher) {
34
+ constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, modalService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, getConfermaRoomImagesFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, confermaOfficeFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, baseSaveFavouriteSearchUpdater, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, getIrlSupplierStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, getCovidMicrositeTokenFetcher, eurostarFetcher, searchUsersCanBookForFetcher, searchIrlStationsFetcher, irlDiscountCardsFetcher, getFlightFareRulesFetcher, getFlightSeatMapFetcher, getRailLiveDeparturesFetcher, applyHotelRulesFetcher, applyFlightRules, getUserFavouriteSearchesFetcher, deleteFavouriteSearchUpdater, emailBasketFetcher, fasttrackFetcher, sendOfflineNotificationFetcher, getHotelChainsFetcher, getRailProvidersFetcher, getAllAirlinesFetcher, getCarHireProvidersFetcher) {
34
35
  this.searchAirportsFetcher = searchAirportsFetcher;
35
36
  this.searchAirlinesFetcher = searchAirlinesFetcher;
36
37
  this.storageService = storageService;
@@ -59,6 +60,8 @@ export class BaseEnterpriseSearchService {
59
60
  this.getUserCurrentCarbonAllowanceFetcher = getUserCurrentCarbonAllowanceFetcher;
60
61
  this.baseSaveFavouriteSearchUpdater = baseSaveFavouriteSearchUpdater;
61
62
  this.getRailStationFetcher = getRailStationFetcher;
63
+ this.getIrlSupplierStationFetcher = getIrlSupplierStationFetcher;
64
+ this.baseWebTokenService = baseWebTokenService;
62
65
  this.riskAlertsFetcher = riskAlertsFetcher;
63
66
  this.getUserRecentSearchesFetcher = getUserRecentSearchesFetcher;
64
67
  this.getRailCardsFetcher = getRailCardsFetcher;
@@ -97,17 +100,17 @@ export class BaseEnterpriseSearchService {
97
100
  this.eurostations = _.toArray(EuroStations);
98
101
  console.log('Enterpise search service being inited');
99
102
  this.searches = {
100
- [ServiceType.Lounge]: new LoungesEnterpriseSearch(loungeFetcher, helpers, basketService, storageService, this),
101
- [ServiceType.Parking]: new ParkingEnterpriseSearch(parkingFetcher, helpers, basketService, storageService, this),
102
- [ServiceType.Flight]: new FlightEnterpriseSearch(flightFetcher, helpers, userService, basketService, storageService, this, applyFlightRules, modalService),
103
- [ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher, applyHotelRulesFetcher),
104
- [ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
105
- [ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
106
- [ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this),
107
- [ServiceType.FastTrack]: new FastTrackEnterpriseSearch(fasttrackFetcher, helpers, basketService, storageService, this),
108
- [ServiceType.Coach]: null,
109
- [ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this, userService, modalService),
110
- [ServiceType.Eurostar]: new EurostarEnterpriseSearch(eurostarFetcher, helpers, userService, basketService, storageService, this, modalService)
103
+ [graphqlTypes.ServiceType.Lounge]: new LoungesEnterpriseSearch(loungeFetcher, helpers, basketService, storageService, this),
104
+ [graphqlTypes.ServiceType.Parking]: new ParkingEnterpriseSearch(parkingFetcher, helpers, basketService, storageService, this),
105
+ [graphqlTypes.ServiceType.Flight]: new FlightEnterpriseSearch(flightFetcher, helpers, userService, basketService, storageService, this, applyFlightRules, modalService),
106
+ [graphqlTypes.ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher, applyHotelRulesFetcher),
107
+ [graphqlTypes.ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
108
+ [graphqlTypes.ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
109
+ [graphqlTypes.ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this, getIrlSupplierStationFetcher),
110
+ [graphqlTypes.ServiceType.FastTrack]: new FastTrackEnterpriseSearch(fasttrackFetcher, helpers, basketService, storageService, this),
111
+ [graphqlTypes.ServiceType.Coach]: null,
112
+ [graphqlTypes.ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this, userService, modalService),
113
+ [graphqlTypes.ServiceType.Eurostar]: new EurostarEnterpriseSearch(eurostarFetcher, helpers, userService, basketService, storageService, this, modalService)
111
114
  };
112
115
  console.log('Newly created search objects: ', this.searches);
113
116
  this.search_objects = this.helpers.clone(this.init_search_objects());
@@ -410,12 +413,13 @@ export class BaseEnterpriseSearchService {
410
413
  }
411
414
  return of([]);
412
415
  }
413
- getStationLocations(term, isLoading) {
416
+ getStationLocations(term, isLoading, hasTod = false) {
414
417
  if (term.length > 2) {
415
418
  isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(true);
416
419
  return this.railStationFetcher
417
420
  .fetchList({
418
- query: term
421
+ query: term,
422
+ hasTod
419
423
  })
420
424
  .pipe(take(1), map((results) => {
421
425
  if (isLoading) {
@@ -436,6 +440,14 @@ export class BaseEnterpriseSearchService {
436
440
  return of([]);
437
441
  }
438
442
  }
443
+ getRailStationById(id) {
444
+ if (id) {
445
+ return this.getRailStationFetcher.fetchList({ id }).pipe(take(1));
446
+ }
447
+ else {
448
+ return of();
449
+ }
450
+ }
439
451
  /**
440
452
  * @description - get irl station locations
441
453
  * @param term - the term to search
@@ -481,7 +493,7 @@ export class BaseEnterpriseSearchService {
481
493
  }
482
494
  const subs = forkJoin([
483
495
  this.getAirportLocations(term, countryCode, isLoading),
484
- this.getCityLocations(term, countryCode, isLoading, this.userService.userHasServiceProvider(ServiceType.Hotel, ServiceProvider.Confirma)),
496
+ this.getCityLocations(term, countryCode, isLoading, this.userService.userHasServiceProvider(graphqlTypes.ServiceType.Hotel, ServiceProvider.Confirma)),
485
497
  this.getStationLocations(term, isLoading),
486
498
  this.getConfirmaOffices(term)
487
499
  ]).pipe(map((results) => {
@@ -593,6 +605,9 @@ export class BaseEnterpriseSearchService {
593
605
  updateTravellerInformation() {
594
606
  this.storageService.setSessionItem(BaseEnterpriseSearchService.SESSION_TRAVELLER, this.selectedTravellers);
595
607
  this.travellerInformation.next([...this.selectedTravellers]);
608
+ if (this.searches[ServiceType.Rail]) {
609
+ this.searches[ServiceType.Rail].railCards = new Array(this.selectedTravellers.length).fill({ name: '', code: '' }, 0, this.selectedTravellers.length);
610
+ }
596
611
  }
597
612
  /*
598
613
  * @desc - determine and return the highest priority value,
@@ -621,7 +636,8 @@ export class BaseEnterpriseSearchService {
621
636
  }
622
637
  getSelectedOptions() {
623
638
  return Object.keys(this.search_objects).reduce((cv, itemIndex) => {
624
- if (this.search_objects[itemIndex].chosen) {
639
+ var _a;
640
+ if ((_a = this.search_objects[itemIndex]) === null || _a === void 0 ? void 0 : _a.chosen) {
625
641
  cv.push(itemIndex);
626
642
  }
627
643
  return cv;
@@ -653,13 +669,14 @@ export class BaseEnterpriseSearchService {
653
669
  }
654
670
  canSearch(type) {
655
671
  // check that the selected type is chosen, has highest priority and has not already had a booking chosen
672
+ var _a, _b;
656
673
  this.determineHighestSearchPriority();
657
674
  // firstly check that the type of search exists
658
675
  if (this.search_objects[type]) {
659
676
  console.log('can search here');
660
677
  // now check that the type is chosen has highest priority
661
- if (this.search_objects[type].chosen &&
662
- this.hasHighestSearchPriority(this.search_objects[type].priority)) {
678
+ if (((_a = this.search_objects[type]) === null || _a === void 0 ? void 0 : _a.chosen) &&
679
+ this.hasHighestSearchPriority((_b = this.search_objects[type]) === null || _b === void 0 ? void 0 : _b.priority)) {
663
680
  console.log(type + ' can be searched');
664
681
  return true;
665
682
  }
@@ -675,57 +692,13 @@ export class BaseEnterpriseSearchService {
675
692
  * travellers (or will do when it's complete) TODO - add Flight, Rail Car
676
693
  **/
677
694
  getAllErrorMessages() {
678
- const concattedErrors = this.travellerValidationMessages;
679
- if (this.search_objects[ServiceType.Lounge].chosen &&
680
- this.canSearch(ServiceType.Lounge)) {
681
- concattedErrors.push(...this.searches[ServiceType.Lounge].validationMessages);
682
- }
683
- if (this.search_objects[ServiceType.Car].chosen &&
684
- this.canSearch(ServiceType.Car)) {
685
- concattedErrors.push(...this.searches[ServiceType.Car].validationMessages);
686
- }
687
- if (this.search_objects[ServiceType.Rail].chosen &&
688
- this.canSearch(ServiceType.Rail)) {
689
- concattedErrors.push(...this.searches[ServiceType.Rail].validationMessages);
690
- }
691
- if (this.search_objects[ServiceType.Parking].chosen &&
692
- this.canSearch(ServiceType.Parking)) {
693
- concattedErrors.push(...this.searches[ServiceType.Parking].validationMessages);
694
- }
695
- if (this.search_objects[ServiceType.Cab].chosen &&
696
- this.canSearch(ServiceType.Cab)) {
697
- concattedErrors.push(...this.searches[ServiceType.Cab].validationMessages);
698
- }
699
- if (this.search_objects[ServiceType.Hotel].chosen &&
700
- this.canSearch(ServiceType.Hotel)) {
701
- concattedErrors.push(...this.searches[ServiceType.Hotel].validationMessages);
702
- }
703
- /*
704
- if (this.search_objects.hotel.chosen && this.canSearch(TravelTypeEnum.HOTEL)) {
705
- concattedErrors = concattedErrors.concat(this.hotel.validationMessages);
706
- }
707
-
708
-
709
-
710
- if (this.search_objects.flight.chosen && this.canSearch(TravelTypeEnum.FLIGHT)) {
711
- concattedErrors = concattedErrors.concat(this.flight.validationMessages);
712
- }
713
-
714
- if (this.search_objects.parking.chosen && this.canSearch(TravelTypeEnum.AIR_PARKING)) {
715
- concattedErrors.push(...this.parking.validationMessages);
716
- }
717
-
718
- if (this.search_objects.taxi.chosen && this.canSearch(TravelTypeEnum.TAXI)) {
719
- concattedErrors.push(...this.taxi.validationMessages);
720
- }
721
-
722
- if (this.search_objects.eurostar.chosen && this.canSearch(TravelTypeEnum.EUROSTAR)) {
723
- concattedErrors.push(...this.eurostar.validationMessages);
724
- }
725
-
726
- if (this.search_objects.coach.chosen && this.canSearch(TravelTypeEnum.COACH)) {
727
- concattedErrors.push(...this.coach.validationMessages);
728
- }*/
695
+ const concattedErrors = Object.entries(this.search_objects).reduce((accum, [type, searchObject]) => {
696
+ if ((searchObject === null || searchObject === void 0 ? void 0 : searchObject.chosen) && this.canSearch(type)) {
697
+ accum.push(...this.searches[type]
698
+ .validationMessages);
699
+ }
700
+ return accum;
701
+ }, this.travellerValidationMessages);
729
702
  this.errors.next(concattedErrors);
730
703
  return concattedErrors;
731
704
  }
@@ -737,25 +710,25 @@ export class BaseEnterpriseSearchService {
737
710
  validateTravellers() {
738
711
  this.travellerValidationMessages = [];
739
712
  switch (this.userService.fullUserDetails.userData.value.booker_type) {
740
- case BookerType.SelfBook:
713
+ case graphqlTypes.BookerType.SelfBook:
741
714
  if (!(this.selectedTravellers.length === 1 && this.travellersContainUser())) {
742
715
  // this should never trigger under normal conditions as the user should be loaded in as a traveller on login
743
716
  this.travellerValidationMessages.push('Current user must be a traveller');
744
717
  }
745
718
  break;
746
- case BookerType.BookerWithSelf:
719
+ case graphqlTypes.BookerType.BookerWithSelf:
747
720
  if (!(this.selectedTravellers.length < 1) ||
748
721
  !this.travellersContainUser()) {
749
722
  this.travellerValidationMessages.push('Please add your self.');
750
723
  this.traveller_error = true;
751
724
  }
752
725
  break;
753
- case BookerType.Booker:
754
- case BookerType.Company:
755
- case BookerType.CompanyGroup:
756
- case BookerType.Office:
757
- case BookerType.Tmc:
758
- case BookerType.Root:
726
+ case graphqlTypes.BookerType.Booker:
727
+ case graphqlTypes.BookerType.Company:
728
+ case graphqlTypes.BookerType.CompanyGroup:
729
+ case graphqlTypes.BookerType.Office:
730
+ case graphqlTypes.BookerType.Tmc:
731
+ case graphqlTypes.BookerType.Root:
759
732
  if (!(this.selectedTravellers.length >= 1)) {
760
733
  this.travellerValidationMessages.push('Please select at least one traveller');
761
734
  this.traveller_error = true;
@@ -819,9 +792,9 @@ export class BaseEnterpriseSearchService {
819
792
  // }, this.environment.searchTimeout);
820
793
  try {
821
794
  Promise.all(Object.values(this.searches).map((search) => {
795
+ var _a;
822
796
  return !!search &&
823
- this.search_objects[search.type] &&
824
- this.search_objects[search.type].chosen
797
+ this.search_objects[search.type] && ((_a = this.search_objects[search.type]) === null || _a === void 0 ? void 0 : _a.chosen)
825
798
  ? search.startSearch()
826
799
  : Promise.resolve(false);
827
800
  })).finally(() => {
@@ -1097,7 +1070,7 @@ export class BaseEnterpriseSearchService {
1097
1070
  toAddress: null,
1098
1071
  toStation: null,
1099
1072
  toLocationType: TaxiFormMode.ADDRESS,
1100
- vehicleType: CabHireVehicleType.Any,
1073
+ vehicleType: graphqlTypes.CabHireVehicleType.Any,
1101
1074
  viasFrom: null,
1102
1075
  viasTo: null
1103
1076
  };
@@ -1151,11 +1124,11 @@ export class BaseEnterpriseSearchService {
1151
1124
  const defaultVal = {
1152
1125
  adults: 0,
1153
1126
  arriveLocation: null,
1154
- cabinClass: FlightCabinClass.Any,
1127
+ cabinClass: graphqlTypes.FlightCabinClass.Any,
1155
1128
  children: 0,
1156
1129
  chosenSearchType: null,
1157
1130
  departLocation: null,
1158
- fareType: FareType.Flexible,
1131
+ fareType: graphqlTypes.FareType.Flexible,
1159
1132
  inboundDate: momentOutDateTime,
1160
1133
  inTimeCriteria: TimeWindow.Depart,
1161
1134
  maxConnections: null,
@@ -1164,7 +1137,7 @@ export class BaseEnterpriseSearchService {
1164
1137
  outBoundDate: momentInDateTime,
1165
1138
  outTimeCriteria: TimeWindow.Depart,
1166
1139
  preferredCarriers: [null, null, null, null],
1167
- returnCabinClass: FlightCabinClass.Any
1140
+ returnCabinClass: graphqlTypes.FlightCabinClass.Any
1168
1141
  };
1169
1142
  return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['outBoundDate', 'inboundDate']);
1170
1143
  }
@@ -1246,8 +1219,8 @@ export class BaseEnterpriseSearchService {
1246
1219
  airportExpressStation: null,
1247
1220
  applyRailcards: false,
1248
1221
  carnetTicket: false,
1249
- chosenSearchClass: RailClass.All,
1250
- chosenSearchType: RailSearchJourneyType.ReturnJourney,
1222
+ chosenSearchClass: graphqlTypes.RailClass.All,
1223
+ chosenSearchType: graphqlTypes.RailSearchJourneyType.ReturnJourney,
1251
1224
  disableAutoDiscounts: false,
1252
1225
  extraTime: false,
1253
1226
  inBoundDateTime: time,
@@ -1262,7 +1235,8 @@ export class BaseEnterpriseSearchService {
1262
1235
  travellingTo: null,
1263
1236
  via: false,
1264
1237
  viaLocation: null,
1265
- railCards: null
1238
+ railCards: [],
1239
+ transactionIdentifier: null
1266
1240
  };
1267
1241
  return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['inBoundDateTime', 'outBoundDateTime']);
1268
1242
  }
@@ -1276,7 +1250,7 @@ export class BaseEnterpriseSearchService {
1276
1250
  const defaultVal = {
1277
1251
  supplier: null,
1278
1252
  countryCode: '',
1279
- journeyType: IrlJourneyType.ReturnJourney,
1253
+ journeyType: graphqlTypes.IrlJourneyType.ReturnJourney,
1280
1254
  class: null,
1281
1255
  outboundDepartureDateTime: time,
1282
1256
  departureLocationId: null,
@@ -1301,11 +1275,11 @@ export class BaseEnterpriseSearchService {
1301
1275
  const defaultVal = {
1302
1276
  adults: 0,
1303
1277
  arriveLocation: null,
1304
- cabinClass: FlightCabinClass.Any,
1278
+ cabinClass: graphqlTypes.FlightCabinClass.Any,
1305
1279
  children: 0,
1306
1280
  chosenSearchType: EurostarSearchType.return,
1307
1281
  departLocation: null,
1308
- fareType: FareType.Flexible,
1282
+ fareType: graphqlTypes.FareType.Flexible,
1309
1283
  inboundDate: momentOutDateTime,
1310
1284
  inTimeCriteria: TimeWindow.Depart,
1311
1285
  maxConnections: null,
@@ -1314,7 +1288,7 @@ export class BaseEnterpriseSearchService {
1314
1288
  outBoundDate: momentInDateTime,
1315
1289
  outTimeCriteria: TimeWindow.Depart,
1316
1290
  preferredCarriers: [null, null, null, null],
1317
- returnCabinClass: FlightCabinClass.Any
1291
+ returnCabinClass: graphqlTypes.FlightCabinClass.Any
1318
1292
  };
1319
1293
  return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['outBoundDate', 'inboundDate']);
1320
1294
  }
@@ -1396,7 +1370,9 @@ export class BaseEnterpriseSearchService {
1396
1370
  return this.deleteFavouriteSearchUpdater.updateOne({ id: id });
1397
1371
  }
1398
1372
  saveRecentSearch(query) {
1399
- if (query) {
1373
+ if (query &&
1374
+ !this.selectedTravellers.find((traveller) => traveller.guest)) {
1375
+ // prevent it saving recent searches with guests - atm it's erroring
1400
1376
  this.baseSaveRecentSearchUpdater
1401
1377
  .updateOne(query)
1402
1378
  .pipe(take(1))
@@ -1429,8 +1405,8 @@ export class BaseEnterpriseSearchService {
1429
1405
  type = this.userService.getUserFavoriteValue('AgentCanBookFor');
1430
1406
  }*/
1431
1407
  if (type &&
1432
- type !== BookerType.SelfBook &&
1433
- type !== BookerType.Traveller &&
1408
+ type !== graphqlTypes.BookerType.SelfBook &&
1409
+ type !== graphqlTypes.BookerType.Traveller &&
1434
1410
  input.length >= 1) {
1435
1411
  const inputWords = input.toLowerCase().match(/([\w])+/g);
1436
1412
  const args = {};
@@ -1485,7 +1461,7 @@ export class BaseEnterpriseSearchService {
1485
1461
  }
1486
1462
  submitIrlForm() {
1487
1463
  const currentUserEmail = this.userService.getUserEmail();
1488
- let searchParams = this.searches[ServiceType.InternationalRail];
1464
+ const searchParams = this.searches[graphqlTypes.ServiceType.InternationalRail];
1489
1465
  let onBehalfOf;
1490
1466
  let passengers;
1491
1467
  // get passengers
@@ -1493,8 +1469,8 @@ export class BaseEnterpriseSearchService {
1493
1469
  passengers = travellers.map((traveller, index) => {
1494
1470
  let age;
1495
1471
  if (traveller.dob) {
1496
- let timeDiff = Math.abs(new Date().getTime() - new Date(traveller.dob).getTime());
1497
- age = Math.floor((timeDiff / (1000 * 3600 * 24)) / 365);
1472
+ const timeDiff = Math.abs(new Date().getTime() - new Date(traveller.dob).getTime());
1473
+ age = Math.floor(timeDiff / (1000 * 3600 * 24) / 365);
1498
1474
  }
1499
1475
  return {
1500
1476
  name: traveller.name,
@@ -1503,7 +1479,9 @@ export class BaseEnterpriseSearchService {
1503
1479
  loyaltyCard: `Loyalty Card ${index + 1}`
1504
1480
  };
1505
1481
  });
1506
- onBehalfOf = travellers[0].email ? travellers[0].email : currentUserEmail;
1482
+ onBehalfOf = travellers[0].email
1483
+ ? travellers[0].email
1484
+ : currentUserEmail;
1507
1485
  }));
1508
1486
  // get jrfreference
1509
1487
  this.allSubscription.add(searchParams.results.subscribe((irlJourney) => {
@@ -1523,8 +1501,8 @@ export class BaseEnterpriseSearchService {
1523
1501
  serviceClass: searchParams.irlClass || 'Any',
1524
1502
  offlineReference: this.jrfReference,
1525
1503
  notifyEmail: currentUserEmail,
1526
- onBehalfOf: onBehalfOf,
1527
- passengers: passengers
1504
+ onBehalfOf,
1505
+ passengers
1528
1506
  };
1529
1507
  console.log(payload);
1530
1508
  this.sendOfflineNotification(payload).subscribe((result) => {
@@ -1540,6 +1518,9 @@ export class BaseEnterpriseSearchService {
1540
1518
  sendOfflineNotification(jrfReference) {
1541
1519
  return this.sendOfflineNotificationFetcher.fetchOne(jrfReference);
1542
1520
  }
1521
+ getCountries() {
1522
+ return this.countries;
1523
+ }
1543
1524
  }
1544
1525
  BaseEnterpriseSearchService.SESSION_TRAVELLER = 'search_travellers';
1545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEVBSUwsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QscUJBQXFCLEVBRXJCLFdBQVcsRUFFWCxrQkFBa0IsRUFVbEIsZ0JBQWdCLEVBS2hCLGNBQWMsRUFVZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1M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O2dCQUM3QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsVUFBVSxFQUFFLFVBQVU7YUFDdkIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDN0MsQ0FBQyxNQUE4QixFQUFFLEVBQUU7Z0JBQ2pDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLFVBQVUsQ0FBQyw2QkFBNkIsRUFDeEMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFDOUIsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixVQUFVLENBQUMsbUJBQW1CLEVBQzlCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQixFQUFFLEtBQUssRUFBRSxxQ0FBcUMsRUFBRSxDQUNqRCxDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FDckIsWUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O0FBeGlFTSw2Q0FBaUIsR0FBVyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBDb3VudHJpZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMuanNvbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFya2luZ0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL3BhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaE9iamVjdCxcclxuICBTZWFyY2hPYmplY3RzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQWlycG9ydCxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJvb2tlclR5cGUsXHJcbiAgRmFyZVR5cGUsXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBTZWFyY2hBaXJwb3J0cyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlcyxcclxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lcyxcclxuICBDb25mZXJtYU9mZmljZUluZm8sXHJcbiAgQ29uZmVybWFPZmZpY2VSZXN1bHQsXHJcbiAgQ2FyYm9uQWxsb3dhbmNlLFxyXG4gIFJpc2tBbGVydCxcclxuICBSaXNrTGV2ZWwsXHJcbiAgR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEFpcmxpbmVzLFxyXG4gIEFpcmxpbmVSZXN1bHQsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxTdXBwbGllclN0YXRpb24sXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUXVlcnlWYXJpYWJsZXMsXHJcbiAgR2V0RmxpZ2h0U2VhdE1hcFF1ZXJ5VmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcclxuICBGbGlnaHRTZWF0TWFwUmVzdWx0LFxyXG4gIEZsaWdodFNlYXRNYXBSZXNwb25zZSxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFza2V0LFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIElybE9mZmxpbmVOb3RpZnlSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgQWlybGluZXNTZWFyY2hSZXN1bHQsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lUmVzdWx0LFxyXG4gIEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXksXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHRBcnJheSxcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBTZXJ2aWNlUHJvdmlkZXJcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcixcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY29tcGFueS1vZmZpY2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcixcclxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvbmZlcm1hLXJvb20taW1hZ2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcclxuICBWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFR5cGVcclxufSBmcm9tICcuLi90ZXN0ZXJzL3Bvc3Rjb2RlLXZhbGlkYXRlLnRlc3Rlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hEZXBvdEZldGNoZXIsXHJcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWRlcG90cy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWlybC1zdGF0aW9ucy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcixcclxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIERlbGV0ZVVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtdXNlci1hZGRyZXNzLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcixcclxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWxpdmUtZGVwYXJ0dXJlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7IEhvdGVsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWhvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUmFpbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IExvdW5nZXNUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFBhcmtpbmdUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXHJcbiAgVGF4aUZvcm1Nb2RlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcixcclxuICBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jdXJyZW50LWNhcmJvbi1hbGxvd2FuY2UuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcixcclxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmlzay1hbGVydHMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IElybFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lpcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXJlY2VudC1zZWFyY2hlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXHJcbiAgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1jYXJkcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLFxyXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb3ZpZC1taWNyb3NpdGUtdG9rZW4uZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEV1cm9zdGFyVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXHJcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC11c2Vycy1jYW4tYm9vay1mb3ItZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcixcclxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhdC1tYXAtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQmFzZUhvdGVsUnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktSklULWhvdGVsLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxyXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1mYXZvdXJpdGUtc2VhcmNoZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZURlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRW1haWxCYXNrZXRGZXRjaGVyLFxyXG4gIEVtYWlsQmFza2V0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEZhc3RUcmFja1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcixcclxuICBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcclxuICBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VuZC1vZmZsaW5lLW5vdGlmaWNhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SG90ZWxDaGFpbnNGZXRjaGVyLFxyXG4gIEdldEhvdGVsQ2hhaW5zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1wcm92aWRlcnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcclxuICBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWFsbC1haXJsaW5lcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhfVFJBVkVMTEVSUyA9IDg7XHJcblxyXG5leHBvcnQgZW51bSBUcmF2ZWxsZXJTZWFyY2hUeXBlcyB7XHJcbiAgZW1haWwgPSAnZW1haWwnLFxyXG4gIG5hbWUgPSAnbmFtZScsXHJcbiAgZW1wbG95ZWVOdW1iZXIgPSAnZW1wbG95ZWVOdW1iZXInXHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xyXG4gIGhpZ2hlc3Q6IG51bWJlcjtcclxuICBjdXJyZW50SXRlbTogU2VhcmNoT2JqZWN0O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlPFxyXG4gIFNQX1EgZXh0ZW5kcyBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNSX1EgZXh0ZW5kcyBTZWFyY2hSYWlsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBTTF9RIGV4dGVuZHMgTG91bmdlUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUEFfUSBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNGTF9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSE9fUSBleHRlbmRzIEhvdGVsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcclxuICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGUsXHJcbiAgU1RIX1EgZXh0ZW5kcyBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQV9RIGV4dGVuZHMgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBTF9RIGV4dGVuZHMgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIEhBX1EgZXh0ZW5kcyBIb3RlbEF2YWxpbmlsaXR5RmV0Y2hlclR5cGUsXHJcbiAgU0NfUSBleHRlbmRzIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0NDX1EgZXh0ZW5kcyBTZWFyY2hDb25mZXJtYUNpdGllc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JBX1EgZXh0ZW5kcyBSYWlsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSV9RIGV4dGVuZHMgSXJsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTVUFfUSBleHRlbmRzIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxyXG4gIFNVX1EgZXh0ZW5kcyBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlLFxyXG4gIEdVQ09fUSBleHRlbmRzIEdldFVzZXJDb21wYW55T2ZmaWNlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0hDX1EgZXh0ZW5kcyBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR0NSSV9RIGV4dGVuZHMgR2V0Q29uZmVybWFSb29tSW1hZ2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBJUFZfUSBleHRlbmRzIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZSxcclxuICBTRF9RIGV4dGVuZHMgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlLFxyXG4gIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxyXG4gICAgcHJpdmF0ZSBjaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ2l0eUZldGNoZXI8U0NfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hQ2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXI8U0NDX1E+LFxyXG4gICAgcHJpdmF0ZSBwb3N0Y29kZUZldGNoZXI6IEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXI8U1BfUT4sXHJcbiAgICBwcml2YXRlIHJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXI8U1JfUT4sXHJcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcclxuICAgIHByaXZhdGUgdXNlckFkZHJlc3Nlc0ZldGNoZXI6IEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcjxTVV9RPixcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXHJcbiAgICBwcml2YXRlIHNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjxTSENfUT4sXHJcbiAgICBwcml2YXRlIGdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI6IEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyPEdDUklfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcclxuICAgIHByaXZhdGUgZGVwb3RGZXRjaGVyOiBCYXNlU2VhcmNoRGVwb3RGZXRjaGVyPFNEX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcjogQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyPEdPTl9RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFPZmZpY2VGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyPENPX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyOiBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyPERVQV9RPixcclxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcclxuICAgIHByaXZhdGUgYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI8U1JTX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI6IEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxTRlNfUT4sXHJcbiAgICBlbnZpcm9ubWVudDogQmFzZUVudmlyb25tZW50LFxyXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcclxuICAgIHBhcmtpbmdGZXRjaGVyOiBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcjxTUEFfUT4sXHJcbiAgICBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXHJcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXHJcbiAgICBjYXJoaXJlRmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8U0NIX1E+LFxyXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcclxuICAgIHJhaWxGZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxTUkFfUT4sXHJcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlOiBCYXNlV2ViVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcclxuICAgIHF1aWNrbGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyPEdVUlNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI6IEJhc2VHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlcjxHQ01URl9RPixcclxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcclxuICAgIHByb3RlY3RlZCBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI6IEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI8U0lTX1E+LFxyXG4gICAgcHJvdGVjdGVkIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjogQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyPEdGU01fUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI6IEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyPEdSTERfRj4sXHJcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxyXG4gICAgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI8R1VGU0ZfUT4sXHJcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcclxuICAgIHByaXZhdGUgZW1haWxCYXNrZXRGZXRjaGVyOiBCYXNlRW1haWxCYXNrZXRGZXRjaGVyPEVCX0Y+LFxyXG4gICAgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXHJcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXHJcbiAgICBwcml2YXRlIGdldEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcjxHSFRfUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxQcm92aWRlcnNGZXRjaGVyOiBCYXNlR2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI8R1JQX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyPEdDSFBfUT5cclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdFbnRlcnBpc2Ugc2VhcmNoIHNlcnZpY2UgYmVpbmcgaW5pdGVkJyk7XHJcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xyXG4gICAgICBbU2VydmljZVR5cGUuTG91bmdlXTogbmV3IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGxvdW5nZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZsaWdodEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkhvdGVsXTogbmV3IEhvdGVsRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBob3RlbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgaHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgICAgIHF1aWNrbGlzdEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXJcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuQ2FiXTogbmV3IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGNhYmhpcmVGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF06IG5ldyBJUkxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGlybEZldGNoZXIsXHJcbiAgICAgICAgaXJsRGlzY291bnRDYXJkc0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZhc3RUcmFja106IG5ldyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZhc3R0cmFja0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcmFpbEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRXVyb3N0YXJdOiBuZXcgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGV1cm9zdGFyRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKVxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKCdOZXdseSBjcmVhdGVkIHNlYXJjaCBvYmplY3RzOiAnLCB0aGlzLnNlYXJjaGVzKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFxyXG4gICAgICBUcmF2ZWxsZXJbXVxyXG4gICAgPihCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIpO1xyXG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcclxuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyU2VydmljZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xyXG4gICAgICAgIGlmIChzZXJ2aWNlcykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgICAgICAgKG9iamVjdHM6IFNlYXJjaE9iamVjdHMsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID1cclxuICAgICAgICAgICAgICAgICEhc2VydmljZXMgJiYgISFzZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvdW50cmllcykpIHtcclxuICAgICAgdGhpcy5jb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFsbFNlYXJjaEl0ZW1zKCkge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIGl0ZW0/LnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlbW92ZUFsbFRyYXZlbGxlcnMoKTtcclxuICAgIHRoaXMucmVzZXRTZWFyY2hPYmplY3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZShcclxuICAgIHVzZXI/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBDYXJib25BbGxvd2FuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSaXNrQWxlcnRzKFxyXG4gICAgbWluTGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIG1heExldmVsOiBSaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSaXNrQWxlcnRbXT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeTogR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBtaW5MZXZlbCxcclxuICAgICAgbWF4TGV2ZWwsXHJcbiAgICAgIGNvdW50cnlJc29Db2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHQ6IFJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICAgIGlmICghIWNvdW50cnlDb2RlKSB7XHJcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc0xvdW5nZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzTG91bmdlID0gaGFzTG91bmdlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzUGFya2luZyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzUGFya2luZyA9IGhhc1Bhcmtpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNGYXN0VHJhY2sgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0Zhc3RUcmFjayA9IGhhc0Zhc3RUcmFjaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmdlbmVyYWxNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhpcyBhcyB0aGlzIGNyZWF0ZXMgZHVwbGljYXRlIGFpcnBvcnRzIGluIHRoZSBsaXN0XHJcbiAgICAgICAgICAgIC8vIGlmIChyZXN1bHRzLmlhdGFNYXRjaCkge1xyXG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcclxuICAgICAgICAgICAgICAgIC8vIC5maWx0ZXIoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgcmV0dXJuICEhY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA6IGFpcnBvcnQ7XHJcbiAgICAgICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogQWlycG9ydCk6IE9CVEFpcnBvcnREZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMucHJvY2Vzc1Rlcm1pbmFscyhhaXJwb3J0LnRlcm1pbmFscyksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJsaW5lc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPE9CVEFpcmxpbmVzRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPj0gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IEFpcmxpbmVSZXN1bHQpOiBPQlRBaXJsaW5lc0RldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYWlybGluZXMubmFtZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxyXG4gICAgaGFzUGFya2luZz86IGJvb2xlYW4sXHJcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgY29uc3QgY29udmVydCA9IChyZXN1bHRzOiBPQlRBaXJwb3J0RGV0YWlsc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0LmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICAgICAgYWlycG9ydDogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgICB0ZXJtLFxyXG4gICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICBoYXNMb3VuZ2UsXHJcbiAgICAgIGhhc1BhcmtpbmcsXHJcbiAgICAgIGhhc0Zhc3RUcmFja1xyXG4gICAgKS5waXBlKG1hcChjb252ZXJ0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGlzQ29uZmlybWE/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29uZmlybWEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2dldENpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5jaXRpZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgIChyZXN1bHQ6IFNlYXJjaENpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQuY29vcmRpbmF0ZXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGNpdHlOYW1lOiB0ZXJtIH07XHJcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcclxuICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdD4gPVxyXG4gICAgICB0aGlzLmNvbmZlcm1hQ2l0aWVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENvbmZlcm1hQ2l0aWVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKCFyZXN1bHRzPy5zdWdnZXN0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcChcclxuICAgICAgICAocmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBjYXIgaGlyZSBkZXBvdHMgYmFzZWQgb24gY2l0eSBjb3Jkc1xyXG4gICAqL1xyXG4gIGdldENhckhpcmVEZXBvdHMoXHJcbiAgICBsYXRpdHVkZTogbnVtYmVyLFxyXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXHJcbiAgICByYWRpdXM/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH07XHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIHF1ZXJ5LnJhZGl1cyA9IHJhZGl1cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5kZXBvdEZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG5cclxuICAgIC8vIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcG9zdGNvZGUgbG9jYXRpb25zLCB0aGVzZSB3aWxsIHVzZSBwYXJ0aWFsIHBvc3Rjb2RlLFxyXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnd2ExNCcgc2hvdWxkIGJyaW5nIGJhY2ssIG91ciBvZmZpY2UsICdtMzMnIHNob2l1bGQgYnJpbmcgYmFjayBteSBhZGRyc1xyXG4gICAqL1xyXG4gIGdldFBvc3Rjb2RlTGlzdCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnBvc3Rjb2RlRmV0Y2hlci5mZXRjaExpc3QoeyBwb3N0Y29kZTogdGVybSB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogU2VhcmNoUG9zdGNvZGVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG5cclxuICAgICAgcmV0dXJuIHN1YnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFBsYWNlQnlJZChwbGFjZUlkOiBzdHJpbmcpOiBBZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGxpc3Qgb2YgT2ZmaWNlIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICAgIHJlc3VsdHM6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5XHJcbiAgICAgICk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICBvZmZpY2U6IHJlc3VsdC5hZGRyZXNzZXNbMF0sXHJcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5yYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgPyByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGlybCBzdGF0aW9uIGxvY2F0aW9uc1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoXHJcbiAgICogQHBhcmFtIGlzTG9hZGluZyAtIEJlaGF2aW9yU3ViamVjdCBzbyB3ZSBrbm93IHNvbWV0aGluZyBpcyBoYXBwZW5pbmdcclxuICAgKi9cclxuICBzZWFyY2hJcmxTdGF0aW9uc0xvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IElybFN1cHBsaWVyU3RhdGlvbltdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBJcmxTdXBwbGllclN0YXRpb24pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24sXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LnN1cHBsaWVyfSlgLFxyXG4gICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBob3RlbCBsb2NhdGlvbnMsIHRoZXNlIHNob3VsZCBiZSBjaXR5LCBvZmZpY2UsIGFpcnBvcnQsIHJhaWxzdGF0aW9uXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnTWFuJyBzaG91bGQgYnJpbmcgYmFjaywgbWFuY2hlc3RlciwgbWFuY2hlc3RlciBhaXJwb3J0LCBtYW5jaGVzdGVyIHBpY2FkaWxseSwgZXRjXHJcbiAgICovXHJcbiAgZ2V0SG90ZWxMb2NhdGlvbnNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zdGNvZGVMaXN0KHRlcm0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgICB0aGlzLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyksXHJcbiAgICAgICAgICB0aGlzLmdldENpdHlMb2NhdGlvbnMoXHJcbiAgICAgICAgICAgIHRlcm0sXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBpc0xvYWRpbmcsXHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlckhhc1NlcnZpY2VQcm92aWRlcihcclxuICAgICAgICAgICAgICBTZXJ2aWNlVHlwZS5Ib3RlbCxcclxuICAgICAgICAgICAgICBTZXJ2aWNlUHJvdmlkZXIuQ29uZmlybWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDb25maXJtYU9mZmljZXModGVybSlcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbnNBbmRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQGRlc2MgLSByZW1vdmUgYSBzcGVjaWZpZWQgdHJhdmVsbGVyIGZyb20gdGhlIHNlbGVjdGVkIGFycmF5XHJcbiAgKiovXHJcbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXJUb1Rlc3Q6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZSBhbGwgdHJhdmVsbGVycyBjYWxsZWQhJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMudHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcikgJiZcclxuICAgICAgIXRoaXMuY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcclxuICAgICAgPyAxXHJcbiAgICAgIDogTUFYX1RSQVZFTExFUlM7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICBAZGVzYyAtIGhlbHBlciBmdW5jdGlvbiAtIGRldGVybWluZXMgaWYgYSBzZWxlY3RlZCB0cmF2ZWxsZXIgaXMgYWxyZWFkeSBhZGRlZCAtXHJcbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcclxuICAqKi9cclxuICB0cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cclxuICAgICAgVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJzLCB0cmF2ZWxsZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5pc1VzZXJGYXZvcml0ZVNldChVc2VyRmF2b3J1cml0ZS5Eb250VXNlVHJhdmVsbGVyUG9saWN5KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXVxyXG4gICAgICAgIC5ndWVzdCAvKiYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgIT09IHVzZXIuUGF4SWRcclxuICAgICk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmFsdWUsXHJcbiAgICogICB0aGUgaGlnaGVzdCBpcyBiYXNlZCBvbiB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIHNlYXJjaCB0eXBlLFxyXG4gICAqICAgIGlmIGl0IGlzIGNob3NlbiBhbmQgaWYgdGhlIGJvb2tpbmcgaGFzIG5vdCBiZWVuIGNob3NlblxyXG4gICAqKi9cclxuICBkZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9XHJcbiAgICAgIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdCgpLmhpZ2hlc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiBTZWFyY2hPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXHJcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPiA9IHt9IGFzIFJlY29yZDxcclxuICAgICAgU2VydmljZVR5cGUsXHJcbiAgICAgIEJhc2tldEl0ZW1cclxuICAgID5cclxuICApOiBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAoeyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9LCBpdGVtOiBTZWFyY2hPYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaG9zZW4gJiYgaXRlbS5wcmlvcml0eSA8IGhpZ2hlc3QpIHtcclxuICAgICAgICAgIGlmICghYmFza2V0SXRlbXNbaXRlbS50eXBlIGFzIFNlcnZpY2VUeXBlXSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBoaWdoZXN0OiBpdGVtLnByaW9yaXR5LCBjdXJyZW50SXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5jaG9zZW4gPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfTtcclxuICAgICAgfSxcclxuICAgICAgeyBoaWdoZXN0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVudEl0ZW06IG51bGwgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkT3B0aW9ucygpOiBTZXJ2aWNlVHlwZVtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcclxuICAgICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2l0ZW1JbmRleF0uY2hvc2VuKSB7XHJcbiAgICAgICAgY3YucHVzaChpdGVtSW5kZXggYXMgU2VydmljZVR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdjtcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBzZWxlY3RlZCB0cmF2ZWxsZXJzIGNvbnRhaW5zIGFueSBndWVzdHMgd2l0aG91dCBhbGwgb2YgZGV0YWlsc1xyXG4gICAqL1xyXG4gIGhhc1NpbXBsZUd1ZXN0cygpOiBib29sZWFuIHtcclxuICAgIC8qcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgoeyBndWVzdCwgcGhvbmUsIG5hdGlvbmFsaXR5LCBlbWFpbCB9KSA9PiB7XHJcbiAgICAgIHJldHVybiBndWVzdCAmJiAhKCEhZW1haWwgJiYgISFwaG9uZSAmJiAhIW5hdGlvbmFsaXR5KTtcclxuICAgIH0pOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdGhlIHNlYXJjaCBvYmplY3RzIHRvIHRoZSBnZXQgbWUgdGhlcmUgb2JqZWN0cyAtIGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGdldCBtZSB0aGVyZSBzZWFyY2hlc1xyXG4gICAqL1xyXG4gIHNldEdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJysrKyBTZXR0aW5nIEdldE1lVGhlcmUgU2VhcmNoIE9iamVjdHMgKysrJyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKSk7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaFBhcmFtcygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdSZXNldGluZyBTZWFyY2ggUGFyYW1zIScpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICk7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChwcm9kdWN0U2VhcmNoU2VydmljZTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIHByb2R1Y3RTZWFyY2hTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjYW5TZWFyY2godHlwZTogU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXHJcblxyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXHJcbiAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xyXG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLmNob3NlbiAmJlxyXG4gICAgICAgIHRoaXMuaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KFxyXG4gICAgICAgICAgKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0ucHJpb3JpdHlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHR5cGUgKyAnIGNhbiBiZSBzZWFyY2hlZCcpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYXNIaWdoZXN0U2VhcmNoUHJpb3JpdHkocHJpb3JpdHlWYWw6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIHJldHVybiBwcmlvcml0eVZhbCA8PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgQGRlc2MgLSBjb25jYXRpbmF0cyBhbGwgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMgYWNyb3NzIGFsbCBzZWxlY3RlZCB0eXBlcyArXHJcbiAgICogICB0cmF2ZWxsZXJzIChvciB3aWxsIGRvIHdoZW4gaXQncyBjb21wbGV0ZSkgVE9ETyAtIGFkZCBGbGlnaHQsIFJhaWwgQ2FyXHJcbiAgICoqL1xyXG4gIGdldEFsbEVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29uY2F0dGVkRXJyb3JzOiBzdHJpbmdbXSA9IHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkxvdW5nZV0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkxvdW5nZSlcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkxvdW5nZV0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhcl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhcilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhcl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5SYWlsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlBhcmtpbmddLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5QYXJraW5nKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUGFya2luZ10udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhYl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhYilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhYl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuSG90ZWwpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLmhvdGVsLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5IT1RFTCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmhvdGVsLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5mbGlnaHQuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkZMSUdIVCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmZsaWdodC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLnBhcmtpbmcuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkFJUl9QQVJLSU5HKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnBhcmtpbmcudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy50YXhpLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5UQVhJKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnRheGkudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ldXJvc3Rhci5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uRVVST1NUQVIpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuZXVyb3N0YXIudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5jb2FjaC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uQ09BQ0gpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuY29hY2gudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH0qL1xyXG4gICAgdGhpcy5lcnJvcnMubmV4dChjb25jYXR0ZWRFcnJvcnMpO1xyXG4gICAgcmV0dXJuIGNvbmNhdHRlZEVycm9ycztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmF2ZWxsZXJzQ29udGFpblVzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICByZXR1cm4gdHJhdmVsbGVyLmlkID09PSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJZCgpLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVRyYXZlbGxlcnMoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGEudmFsdWUuYm9va2VyX3R5cGUpIHtcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlNlbGZCb29rOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zIGFzIHRoZSB1c2VyIHNob3VsZCBiZSBsb2FkZWQgaW4gYXMgYSB0cmF2ZWxsZXIgb24gbG9naW5cclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdDdXJyZW50IHVzZXIgbXVzdCBiZSBhIHRyYXZlbGxlcidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSkgfHxcclxuICAgICAgICAgICF0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXI6XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Db21wYW55OlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuT2ZmaWNlOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuVG1jOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuUm9vdDpcclxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPj0gMSkpIHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybXMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIHRoaXMuZ2V0QWxsRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICB0aGlzLmVycm9ycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5tZXNzYWdlcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgJiZcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZpbmQoKG9iajogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISFvYmogJiYgb2JqLnByaW9yaXR5ID09PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ICYmIG9iai5jaG9zZW5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hlcyh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubmV3U2VhcmNoU3RhcnRlZC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3Q7XHJcbiAgICBzZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XHJcbiAgICAgIHNlYXJjaE9iamVjdC5jaG9zZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hlcy5JTlRFUk5BVElPTkFMX1JBSUwpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdElybEZvcm0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgc2VhcmNoT2JqZWN0ICYmXHJcbiAgICAgICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnJlc3VsdFVybF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qSWYgdGhlIHNlYXJjaCBleGNlZWRzIHRoZSB0aW1lb3V0IHRpbWUsIGNhbmNlbCBzZWFyY2ggYW5kIHRlbGwgT0JUIHRoYXQgaXQncyB0aW1lZCBvdXQqL1xyXG4gICAgLy8gY29uc3QgY29udGV4dCA9IHRoaXM7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgaWYgKGNvbnRleHQuc2VhcmNoX2xvYWRpbmcpIHtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hUaW1lZE91dC5uZXh0KHRydWUpO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgdGhpcy5lbnZpcm9ubWVudC5zZWFyY2hUaW1lb3V0KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcChcclxuICAgICAgICAgIChzZWFyY2g6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXS5jaG9zZW5cclxuICAgICAgICAgICAgICA/IHNlYXJjaC5zdGFydFNlYXJjaCgpXHJcbiAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMb2FkaW5nRG9uZS5uZXh0KHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRheGlTdGF0aW9uTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSYWlsQWlycG9ydFtdPiB7XHJcbiAgICByZXR1cm4gdGVybS5sZW5ndGggPCAzXHJcbiAgICAgID8gb2YoW10pXHJcbiAgICAgIDogb2YoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgQWlycG90JyxcclxuICAgICAgICAgICAgaXNhaXJwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICBzdXBwbGllcl9jb2RlOiAnTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgQWlycG9ydCcsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTkwIDFRWCdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgICAgaXNhaXJwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01NQU4nLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgICAgcG9zdGNvZGU6ICdNMSAyUFonXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ0xvbmRvbiBIZWF0aHJvdycsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ0xIUicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdMb25kb24gSGVhdGhyb3cgQWlycG9ydCcsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnVFc2IDFFVydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldEFkZHJlc3Nlcyhpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPik6IE9ic2VydmFibGU8QWRkcmVzc0Zvcm1bXT4ge1xyXG4gICAgcmV0dXJuIG9mKFtcclxuICAgICAge1xyXG4gICAgICAgIEhvdXNlOiAnQ2VjaWwgQ291cnQnLFxyXG4gICAgICAgIFN0cmVldDogJzI4LTM2IENlY2lsIFJvYWQnLFxyXG4gICAgICAgIFRvd246ICdIYWxlJyxcclxuICAgICAgICBQb3N0Q29kZTogJ1dBMTUgOVBCJyxcclxuICAgICAgICBDb3VudHJ5OiAnVUsnXHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckFkZHJlc3NlcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8QWRkcmVzc0Zvcm1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckFkZHJlc3Nlc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIElEOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgIEhvdXNlOiByZXN1bHQubnVtYmVyT3JOYW1lLFxyXG4gICAgICAgICAgICBTdHJlZXQ6IHJlc3VsdC5zdHJlZXQsXHJcbiAgICAgICAgICAgIFRvd246IHJlc3VsdC50b3duLFxyXG4gICAgICAgICAgICBQb3N0Q29kZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICBDb3VudHJ5OiByZXN1bHQuY291bnRyeUNvZGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlckFkZHJlc3NCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRIb3RlbENoYWluKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hIb3RlbENoYWluc0ZldGNoZXIuZmV0Y2hMaXN0KHsgcXVlcnk6IHRlcm0gfSk7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZU5hbWVzKFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVzW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzPy5yZXN1bHRzPy5tYXAoKHJlc3VsdDogQ29uZmVybWFPZmZpY2VOYW1lcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmaWNlKG9mZmljZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvbmZlcm1hT2ZmaWNlSW5mbz4ge1xyXG4gICAgaWYgKG9mZmljZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZlcm1hT2ZmaWNlRmV0Y2hlci5mZXRjaE9uZSh7IG9mZmljZUlkIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbEhvdGVsQ2hhaW5zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0SG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmFpbFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Z2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FySGlyZVByb2l2ZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQWlybGluZXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRBbGxBaXJsaW5lc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0QWxsQWlybGluZXNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgY29uc3QgcmFpbENhcmRzID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQ6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgY29kZTogcmVzdWx0LmNvZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIHJhaWxDYXJkcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFpcnBvcnRCeUNvZGUoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBaXJwb3J0U2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgaWYgKGNvZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHsgcXVlcnk6IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUTyBCRSBPVkVSIFJJRERFTiBCWSBPQlQgU1VCQ0xBU1NFU1xyXG4gIHB1YmxpYyBpbml0X3NlYXJjaF9vYmplY3RzKCk6IFNlYXJjaE9iamVjdHMge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICogU0VBUkNIIE9CSkVDVFMgRk9SIEdFVCBNRSBUSEVSRSBET09SIDIgRE9PUiAgICAgICAgICAqXHJcbiAgICogRGlmZmVyZW5jZShzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICogQWxsIG9iamVjdHMgaGF2ZSBhIHByaW9yaXR5IG9mIDEgc28gdGhhdCB0aGV5IGFyZSAgICAqXHJcbiAgICogc2VhcmNoZWQgYXQgdGhlIHNhbWUgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICogVXJscyBjaGFuZ2VkIHRvIGdldG1ldGhlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgcHJvdGVjdGVkIGdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IFNlYXJjaE9iamVjdHMge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGdldHMgYWxsIHNlbGVjdGVkIHRyYXZlbGxlcnNcclxuICAgKiAgIEltcGxlbWVudGVkIGZvciByYWlsIGNhcmQgcmVhc29ucyBpbiBMVVxyXG4gICAqKi9cclxuICBnZXRTZWxlY3RlZHRyYXZlbGxlcnMoKTogVHJhdmVsbGVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICBUaGVzZSBhcmUgdGhlIHBvc3NpYmxlIGFycmF5IG9mIHZhbHVlcyBmcm9tIEFQSSBhcmUgZXhwdGVjdGVkIGFuZCBmdW5jdGlvbiBtYW5pcHVsYXRlIHRvIGNyZWF0ZSB0aGUgbGlzdFxyXG4gICAgW1wiTWFpblwiXVxyXG4gICAgW1wiMVwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIl1cclxuICAgIFtcIlNvdXRoXCIsIFwiTm9ydGhcIl1cclxuICAqL1xyXG4gIHB1YmxpYyBwcm9jZXNzVGVybWluYWxzKHRlcm1pbmFsczogc3RyaW5nW10pOiBUZXJtaW5hbHNUeXBlW10ge1xyXG4gICAgY29uc3QgdGVtcFRlcm1pbmFsOiBUZXJtaW5hbHNUeXBlW10gPSBbXTtcclxuICAgIGlmIChcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcxJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcyJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCczJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc0JykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc1JylcclxuICAgICkge1xyXG4gICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgdGVybWluYWxzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYFRlcm1pbmFsICR7aXRlbX1gLCB2YWx1ZTogYCR7aXRlbX1gIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0ZXJtaW5hbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke3Rlcm1pbmFsc1swXX0gVGVybWluYWxgLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6ICdBbnkgVGVybWluYWwnLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgICAgdGVybWluYWxzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHtpdGVtfSBUZXJtaW5hbGAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wVGVybWluYWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYXZlVXNlckFkZHJlc3MoXHJcbiAgICBhZGRyZXNzOiBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUoYWRkcmVzcylcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5Cb29rKHNlcnZpY2U6IFNlcnZpY2VUeXBlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5jYW5Cb29rKHNlcnZpY2UpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNQb3N0Y29kZVZhaWxkKHBvc3Rjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3Rlci50ZXN0KHsgcG9zdGNvZGUgfSk7XHJcbiAgfVxyXG5cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgU3RhcnQgKi9cclxuICAvKlxyXG4gICAqIENyZWF0ZSB0aGUgQ2FiIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgLi4uYXJncyBleGFtcGxlIC0gc2VhcmNoU2VydmljZS5zZXRDYWJIaXJlUXVlcnkoZGF0YS5xdWVyeSwgeyBkZXBhcnRzOiBtb21lbnREYXRlVGltZSB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUNhYkhpcmVRdWVyeSguLi5hcmdzOiBhbnkpOiBDYWJIaXJlVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYWJIaXJlVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhaXJwb3J0OiBudWxsLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY291bnRyeUNvZGU6IG51bGwsXHJcbiAgICAgIGRlcGFydHM6IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLFxyXG4gICAgICBmcm9tQWRkcmVzczogbnVsbCxcclxuICAgICAgZnJvbVN0YXRpb246IG51bGwsXHJcbiAgICAgIGZyb21Mb2NhdGlvblR5cGU6IFRheGlGb3JtTW9kZS5BRERSRVNTLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB0b0FkZHJlc3M6IG51bGwsXHJcbiAgICAgIHRvU3RhdGlvbjogbnVsbCxcclxuICAgICAgdG9Mb2NhdGlvblR5cGU6IFRheGlGb3JtTW9kZS5BRERSRVNTLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSxcclxuICAgICAgdmlhc0Zyb206IG51bGwsXHJcbiAgICAgIHZpYXNUbzogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxDYWJIaXJlVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2RlcGFydHMnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIHRoZSBDYXIgSGlyZSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbSwgYXV0byBmaWxsIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhckhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYXJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlQ2FySGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhckhpcmVUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhckhpcmVUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFpckNvbjogbnVsbCxcclxuICAgICAgY2FyQ2xhc3M6IG51bGwsXHJcbiAgICAgIGNhclR5cGU6IG51bGwsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5WZW5kb3I6IG51bGwsXHJcbiAgICAgIGNob3NlbkRpc3RhbmNlOiAnNScsXHJcbiAgICAgIGNpdHlEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBjaXR5RHJvcG9mZkRlcG90OiBudWxsLFxyXG4gICAgICBjaXR5UGlja3VwOiBudWxsLFxyXG4gICAgICBjaXR5UGlja3VwRGVwb3Q6IG51bGwsXHJcbiAgICAgIGRyb3BvZmZfY291bnRyeTogJ0dCJyxcclxuICAgICAgZHJvcG9mZl9kYXRldGltZTogbnVsbCxcclxuICAgICAgZHJvcG9mZl9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgZXN0aW1hdGVkTWlsZWFnZTogbnVsbCxcclxuICAgICAgbG9jYXRpb25UeXBlOiBudWxsLFxyXG4gICAgICBwaWNrdXBfY291bnRyeTogbnVsbCxcclxuICAgICAgcGlja3VwX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBwaWNrdXBfbG9jYXRpb246IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmUmF3OiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cDogbnVsbCxcclxuICAgICAgcG9zdGNvZGVQaWNrdXBSYXc6IG51bGwsXHJcbiAgICAgIHJldHVybl90b19waWNrdXA6IHRydWUsXHJcbiAgICAgIHRyYW5zbWlzc2lvbjogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxDYXJIaXJlVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ3BpY2t1cF9kYXRldGltZScsICdkcm9wb2ZmX2RhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBGbGlnaHQgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEZsaWdodHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hGbGlnaHRzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VGbGlnaHRRdWVyeSguLi5hcmdzOiBhbnkpOiBGbGlnaHRUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEZsaWdodFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZlTG9jYXRpb246IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogbnVsbCxcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcclxuICAgICAgaW5ib3VuZERhdGU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxyXG4gICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IGZhbHNlLFxyXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcclxuICAgICAgb3V0Qm91bmREYXRlOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxyXG4gICAgICByZXR1cm5DYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGbGlnaHRUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnb3V0Qm91bmREYXRlJywgJ2luYm91bmREYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBIb3RlbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUhvdGVsUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hIb3RlbHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hIb3RlbHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUhvdGVsUXVlcnkoLi4uYXJnczogYW55KTogSG90ZWxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGNoZWNraW5fZGF0ZTogbW9tZW50KCkuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjaGVja291dF9kYXRlOiBtb21lbnQoKS5hZGQoMSwgJ2RheScpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcclxuICAgICAgY291bnRyeTogeyBjQ29kZTogJ0dCJywgY05hbWU6ICdVbml0ZWQgS2luZ2RvbScgfSxcclxuICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICBkaXN0YW5jZTogNSwgLy8gZGVmYXVsdCA1IG1pbGVzIHJhZGl1c1xyXG4gICAgICBob3RlbF9hdmFpbGFiaWxpdHk6IG51bGwsXHJcbiAgICAgIGhvdGVsX2NoYWluOiBudWxsLFxyXG4gICAgICBob3RlbF9uYW1lOiBudWxsLFxyXG4gICAgICBsb2NhdGlvbl90eXBlX3NlbGVjdDogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICBsb2NhdGlvbjogbnVsbCwgLy8gbWlnaHQgd2FudCB0byBzcGxpdCB0aGlzIG91dCB0byBjaXR5LCBhaXJwb3J0LCBvZmZpY2UsIHJhaWxzdGF0aW9uIC0gdGhpcyB3aWxsIGRvIGZvciBub3dcclxuICAgICAgbm9fb2Zfb2NjdXBhbnRzOiAxLCAvLyBzaW1pbGFybHkgdGhpbmsgdGhpcyBpcyBhIG1heCBvZiAzXHJcbiAgICAgIG5vX29mX3Jvb21zOiAxLCAvLyBtYXggb2YgNCBpbiBvbGQgc2Ficywgbm90IHN1cmUgaGVyZVxyXG4gICAgICBvZmZpY2U6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlOiBudWxsLFxyXG4gICAgICBwcmVmZXJlZF9ob3RlbHNfb25seTogZmFsc2UsXHJcbiAgICAgIHRyYWluc1N0YXRpb246IG51bGxcclxuICAgIH0gYXMgSG90ZWxUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEhvdGVsVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2NoZWNraW5fZGF0ZScsICdjaGVja291dF9kYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBMb3VuZ2VzIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlTG91bmdlc1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoTG91bmdlc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaExvdW5nZXNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUxvdW5nZXNRdWVyeSguLi5hcmdzOiBhbnkpOiBMb3VuZ2VzVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXHJcbiAgICAgIHRlcm1pbmFsOiBudWxsXHJcbiAgICB9IGFzIExvdW5nZXNUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPExvdW5nZXNUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBQYXJraW5nIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlUGFya2luZ1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUGFya2luZ0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFBhcmtpbmdBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZVBhcmtpbmdRdWVyeSguLi5hcmdzOiBhbnkpOiBQYXJraW5nVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBjYXJQYXJrZWRGb3JZb3U6IG51bGwsXHJcbiAgICAgIGRlcGFydERhdGV0aW1lOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXHJcbiAgICAgIG1lZXRBbmRHcmVldDogbnVsbCxcclxuICAgICAgb25BaXJwb3J0OiBudWxsLFxyXG4gICAgICBvdXRGbGlnaHROdW1iZXI6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRSaWRlOiBudWxsLFxyXG4gICAgICBwYXJrQW5kU3Ryb2xsOiBudWxsLFxyXG4gICAgICByZWNvbW1lbmRlZDogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgUGFya2luZ1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UGFya2luZ1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnLCAnZGVwYXJ0RGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hSYWlsQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUmFpbEFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUmFpbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IFJhaWxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBSYWlsVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWlycG9ydEV4cHJlc3NTdGF0aW9uOiBudWxsLFxyXG4gICAgICBhcHBseVJhaWxjYXJkczogZmFsc2UsXHJcbiAgICAgIGNhcm5ldFRpY2tldDogZmFsc2UsXHJcbiAgICAgIGNob3NlblNlYXJjaENsYXNzOiBSYWlsQ2xhc3MuQWxsLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSxcclxuICAgICAgZGlzYWJsZUF1dG9EaXNjb3VudHM6IGZhbHNlLFxyXG4gICAgICBleHRyYVRpbWU6IGZhbHNlLFxyXG4gICAgICBpbkJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGlzQWlycG9ydEV4cHJlc3M6IGZhbHNlLFxyXG4gICAgICBub09mQWR1bHRzOiAwLFxyXG4gICAgICBub09mQ2hpbGRyZW46IDAsXHJcbiAgICAgIG91dGJvdW5kQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIG91dEJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIHByaW9yaXRpc2VCeVByaWNlOiBmYWxzZSxcclxuICAgICAgcmV0dXJuQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIHRyYXZlbGxpbmdGcm9tOiBudWxsLFxyXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXHJcbiAgICAgIHZpYTogZmFsc2UsXHJcbiAgICAgIHZpYUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICByYWlsQ2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UmFpbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydpbkJvdW5kRGF0ZVRpbWUnLCAnb3V0Qm91bmREYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUlybFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IElybFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IElybFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIHN1cHBsaWVyOiBudWxsLCAvLyBJUkxTdXBwbGllciFcclxuICAgICAgY291bnRyeUNvZGU6ICcnLFxyXG4gICAgICBqb3VybmV5VHlwZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSwgLy8gSVJMSm91cm5leVR5cGUhXHJcbiAgICAgIGNsYXNzOiBudWxsLCAvLyBJUkxDbGFzc1xyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBudWxsLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogbnVsbCxcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGlybERpc2NvdW50Q2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SXJsVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ3JldHVybkRlcGFydHVyZURhdGVUaW1lJywgJ291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEV1cm9zdGFyIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtFdXJvc3RhclRlbXBQYXJhbXN9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEV1cm9zdGFyQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VFdXJvc3RhclF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEV1cm9zdGFyVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBFdXJvc3RhclRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZlTG9jYXRpb246IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybixcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcclxuICAgICAgaW5ib3VuZERhdGU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxyXG4gICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IGZhbHNlLFxyXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcclxuICAgICAgb3V0Qm91bmREYXRlOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxyXG4gICAgICByZXR1cm5DYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxFdXJvc3RhclRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZhc3RUcmFjayBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZhc3RUcmFja1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoTG91bmdlc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaExvdW5nZXNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZhc3RUcmFja1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZhc3RUcmFja1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudCgpLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsXHJcbiAgICB9IGFzIEZhc3RUcmFja1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RmFzdFRyYWNrVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgRW5kICovXHJcblxyXG4gIHNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEF1dG9Mb2dvdXRDb25maWcoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE92ZXJ3cml0ZSBpZiB0aGUgT0JUIGRpc3BsYXlzIGEgbGlzdCBvZiBvZmZpY2VzIGluc3RlYWQgb2Ygc2VhcmNoaW5nIG9uIHRoZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0ZsaWdodHNHcm91cGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBnZXRDb3VudHJ5RnVsbE5hbWVGcm9tQ291bnRyeUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmdWxsTmFtZSA9ICdVbmtub3duJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmNvdW50cmllc1tpXTtcclxuXHJcbiAgICAgIGlmIChjb3VudHJ5LmNDb2RlID09PSBjb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuY05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVsbE5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUmVjZW50U2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheSkgPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCB0YXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUmVjZW50U2VhcmNoQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcclxuICB9XHJcbiAgZGVsZXRlRmF2b3VyaXRlU2VhcmNoQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVSZWNlbnRTZWFyY2gocXVlcnk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyk6IHZvaWQge1xyXG4gICAgaWYgKHF1ZXJ5KSB7XHJcbiAgICAgIHRoaXMuYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyXHJcbiAgICAgICAgLnVwZGF0ZU9uZShxdWVyeSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvdmlkTWljcm9zaXRlVG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcihcclxuICAgICAgICAgICh2KSA9PiB2LmRlc3RpbmF0aW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTFcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWFyY2hUcmF2ZWxsZXJzKFxyXG4gICAgaW5wdXQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFRyYXZlbGxlcnNCeTogVHJhdmVsbGVyU2VhcmNoVHlwZXNcclxuICApOiBPYnNlcnZhYmxlPFRyYXZlbGxlcltdPiB7XHJcbiAgICBjb25zdCB0eXBlOiBCb29rZXJUeXBlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyQm9va2luZ1R5cGUoKTtcclxuICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gZmFsc2U7XHJcbiAgICAvKiBUT0RPXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VBZ2VudENhbkJvb2tGb3IoKSkge1xyXG4gICAgICB0eXBlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVWYWx1ZSgnQWdlbnRDYW5Cb29rRm9yJyk7XHJcbiAgICB9Ki9cclxuICAgIGlmIChcclxuICAgICAgdHlwZSAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlNlbGZCb29rICYmXHJcbiAgICAgIHR5cGUgIT09IEJvb2tlclR5cGUuVHJhdmVsbGVyICYmXHJcbiAgICAgIGlucHV0Lmxlbmd0aCA+PSAxXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaW5wdXRXb3JkcyA9IGlucHV0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhbXFx3XSkrL2cpO1xyXG4gICAgICBjb25zdCBhcmdzOiBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzID0ge307XHJcbiAgICAgIHN3aXRjaCAoc2VhcmNoVHJhdmVsbGVyc0J5KSB7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5uYW1lOlxyXG4gICAgICAgICAgYXJncy51c2VyTmFtZSA9IGlucHV0V29yZHMubGVuZ3RoID4gMSA/IGlucHV0V29yZHNbMF0gOiBpbnB1dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMuZW1haWw6XHJcbiAgICAgICAgICBhcmdzLmVtYWlsID0gaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtcGxveWVlTnVtYmVyOlxyXG4gICAgICAgICAgYXJncy5lbXBsb3llZUlkID0gaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlci5mZXRjaExpc3QoYXJncykucGlwZShcclxuICAgICAgICBtYXAoKGRhdGE6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmNsb25lKGRhdGEpLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYS5zdXJuYW1lIDwgYi5zdXJuYW1lID8gLTEgOiBhLnN1cm5hbWUgPiBiLnN1cm5hbWUgPyAxIDogMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZsaWdodEZhcmVSdWxlcyhcclxuICAgIGZsaWdodDogSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRGbGlnaHRGYXJlUnVsZXNSZXN1bHRBcnJheT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlci5mZXRjaExpc3QoeyBmbGlnaHQgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsTGl2ZURlcGFydHVyZXMoXHJcbiAgICBzdGF0aW9uOiBzdHJpbmcsXHJcbiAgICBkYXRlVGltZT86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8U2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLmZldGNoTGlzdCh7XHJcbiAgICAgIHN0YXRpb25Db2RlOiBzdGF0aW9uLFxyXG4gICAgICBkZXBhcnREYXRlVGltZTogZGF0ZVRpbWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmxpZ2h0U2VhdE1hcChcclxuICAgIGZsaWdodDogSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxGbGlnaHRTZWF0TWFwUmVzcG9uc2VbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0OiBmbGlnaHQgfSkucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBGbGlnaHRTZWF0TWFwUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHJldHVybiBkYXRhLnJlc3VsdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNhdmVGYXZvdXJpdGVTZWFyY2goXHJcbiAgICBzZWFyY2g6IFNhdmVGYXZvdXJpdGVTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShzZWFyY2gpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmVybWFSb29tSW1hZ2VzKGhvdGVsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U3RyaW5nW10+IHtcclxuICAgIGlmIChob3RlbElkKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLmZldGNoTGlzdCh7IGhvdGVsSWQgfSk7XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtYWlsQmFza2V0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW1haWxCYXNrZXRGZXRjaGVyLmZldGNoTGlzdCh7IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0SXJsRm9ybSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRVc2VyRW1haWwgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJFbWFpbCgpO1xyXG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdO1xyXG4gICAgbGV0IG9uQmVoYWxmT2Y6IHN0cmluZztcclxuICAgIGxldCBwYXNzZW5nZXJzOiB7fTtcclxuXHJcbiAgICAvLyBnZXQgcGFzc2VuZ2Vyc1xyXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICBwYXNzZW5nZXJzID0gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGFnZTogbnVtYmVyO1xyXG4gICAgICAgIGlmICh0cmF2ZWxsZXIuZG9iKXtcclxuICAgICAgICAgIGxldCB0aW1lRGlmZiA9IE1hdGguYWJzKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbmV3IERhdGUodHJhdmVsbGVyLmRvYikuZ2V0VGltZSgpKTtcclxuICAgICAgICAgIGFnZSA9IE1hdGguZmxvb3IoKHRpbWVEaWZmIC8gKDEwMDAgKiAzNjAwICogMjQpKS8zNjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogdHJhdmVsbGVyLm5hbWUsXHJcbiAgICAgICAgICBhZ2U6IGFnZT8udG9TdHJpbmcoKSB8fCAnTm90IHNwZWNpZmllZCcsXHJcbiAgICAgICAgICBkaXNjb3VudENhcmQ6IGBEaXNjb3VudCBDYXJkICR7aW5kZXgrMX1gLFxyXG4gICAgICAgICAgbG95YWx0eUNhcmQ6IGBMb3lhbHR5IENhcmQgJHtpbmRleCsxfWBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIG9uQmVoYWxmT2YgPSB0cmF2ZWxsZXJzWzBdLmVtYWlsID8gdHJhdmVsbGVyc1swXS5lbWFpbCA6IGN1cnJlbnRVc2VyRW1haWw7XHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gZ2V0IGpyZnJlZmVyZW5jZVxyXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICBzZWFyY2hQYXJhbXMucmVzdWx0cy5zdWJzY3JpYmUoKGlybEpvdXJuZXk6IElybEpvdXJuZXlPcHRpb25zW10pID0+IHtcclxuICAgICAgICBpZiAoaXJsSm91cm5leVswXT8uanJmcmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICB0aGlzLmpyZlJlZmVyZW5jZSA9IGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLmpyZlJlZmVyZW5jZSAmJiBwYXNzZW5nZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgdHJhaW5OdW1iZXI6IHNlYXJjaFBhcmFtcy50cmFpbk51bWJlciB8fCAnQW55JyxcclxuICAgICAgICBkZXBhcnR1cmVTdGF0aW9uOiBzZWFyY2hQYXJhbXMudHJhdmVsbGluZ0Zyb20ubmFtZSxcclxuICAgICAgICBkZXN0aW5hdGlvblN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nVG8ubmFtZSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIGluYm91bmREYXRlOiBzZWFyY2hQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgYWRkaXRpb25hbEluZm86XHJcbiAgICAgICAgICBzZWFyY2hQYXJhbXMuYWRkaXRpb25hbEluc3RydWN0aW9ucyB8fCAnTm8gYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMnLFxyXG4gICAgICAgIHNlcnZpY2VDbGFzczogc2VhcmNoUGFyYW1zLmlybENsYXNzIHx8ICdBbnknLFxyXG4gICAgICAgIG9mZmxpbmVSZWZlcmVuY2U6IHRoaXMuanJmUmVmZXJlbmNlLFxyXG4gICAgICAgIG5vdGlmeUVtYWlsOiBjdXJyZW50VXNlckVtYWlsLCBcclxuICAgICAgICBvbkJlaGFsZk9mOiBvbkJlaGFsZk9mLFxyXG4gICAgICAgIHBhc3NlbmdlcnM6IHBhc3NlbmdlcnNcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2cocGF5bG9hZCk7XHJcblxyXG4gICAgICB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uKHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0OiBJcmxPZmZsaW5lTm90aWZ5UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcgfSxcclxuICAgICAgICAgICAgICB7IGpyZlJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgIHsgZXJyb3I6ICdVbmFibGUgdG8gc2VuZCBvZmZsaW5lIG5vdGlmaWNhdGlvbicgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uKFxyXG4gICAganJmUmVmZXJlbmNlOiBhbnlcclxuICApOiBPYnNlcnZhYmxlPElybE9mZmxpbmVOb3RpZnlSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlci5mZXRjaE9uZShqcmZSZWZlcmVuY2UpO1xyXG4gIH1cclxufVxyXG4iXX0=
1526
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1MLGFBQWEsRUFrQ2IsZUFBZSxFQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBeUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7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S0FBSztnQkFDNUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ25DLFdBQVcsRUFBRSxnQkFBZ0I7Z0JBQzdCLFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQzdDLENBQUMsTUFBMkMsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixVQUFVLENBQUMsNkJBQTZCLEVBQ3hDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQzlCLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsVUFBVSxDQUFDLG1CQUFtQixFQUM5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFDbEIsRUFBRSxLQUFLLEVBQUUscUNBQXFDLEVBQUUsQ0FDakQsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLFlBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOztBQS9nRU0sNkNBQWlCLEdBQVcsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgQ291bnRyaWVzIGZyb20gJy4uL2RhdGEvY291bnRyaWVzLmpzb24nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hPYmplY3QsXHJcbiAgU2VhcmNoT2JqZWN0c1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcclxuaW1wb3J0ICogYXMgZ3JhcGhxbFR5cGVzIGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEhvdGVsRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaCxcclxuICBUaW1lV2luZG93XHJcbn0gZnJvbSAnLi4vY2xhc3Nlcy9mbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbEVudGVycHJpc2VTZWFyY2gsXHJcbiAgUmFpbFNlYXJjaENyaXRlcmlhXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyLCBUcmF2ZWxsZXJPYmplY3QgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9oZWxwZXJzJztcclxuaW1wb3J0IHsgQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9ob3RlbC1hdmFsbGliaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VFbnZpcm9ubWVudCB9IGZyb20gJy4uL2NsYXNzZXMvZW52aXJvbWVudCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcixcclxuICBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXBvc3Rjb2Rlcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzRm9ybSxcclxuICBBaXJwb3J0U2VhcmNoUmVzdWx0cyxcclxuICBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheSxcclxuICBDb3VudHJ5Q29kZSxcclxuICBMb2NhdGlvbkRldGFpbHMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBSYWlsQWlycG9ydCxcclxuICBSb3V0ZXIsXHJcbiAgU2VhcmNoQ2l0aWVzUmVzdWx0LFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdCxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0QXJyYXksXHJcbiAgVGVybWluYWxzVHlwZSxcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheSxcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHQsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdCxcclxuICBBaXJsaW5lc1NlYXJjaFJlc3VsdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdCxcclxuICBDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0LFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSxcclxuICBHZXRIb3RlbENoYWluc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0LFxyXG4gIGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBHZXRBbGxBaXJsaW5lc1Jlc3VsdCxcclxuICBHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHQsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5LFxyXG4gIFNlcnZpY2VQcm92aWRlclxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hSYWlsU3RhdGlvbnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1yYWlsLXN0YXRpb25zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VMb3VuZ2VRdW90ZUZldGNoZXIsXHJcbiAgTG91bmdlUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2xvdW5nZS1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcixcclxuICBQYXJraW5nUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3BhcmtpbmctcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZsaWdodFF1b3RlRmV0Y2hlcixcclxuICBGbGlnaHRRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VIb3RlbFF1b3RlRmV0Y2hlcixcclxuICBIb3RlbFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ob3RlbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcixcclxuICBDYXJIaXJlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLWF2YWlsYWJpbGl0eS1kZXRhaWwuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhYmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYWJoaXJlLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VSYWlsUXVvdGVGZXRjaGVyLFxyXG4gIFJhaWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsUXVvdGVGZXRjaGVyLFxyXG4gIElybFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7IFJlZ0V4cHMgfSBmcm9tICcuLi9tb2RlbHMvcmVnZXhwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICBTZWFyY2hQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEFpcnBvcnRzRmV0Y2hlcixcclxuICBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlycG9ydHMtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcixcclxuICBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtYWlybGluZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgVXNlclNlcnZpY2VzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoQ2l0eUZldGNoZXIsXHJcbiAgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXIsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWNvbmZlcm1hLWNpdGllcy5mZXRjaGVyJztcclxuaW1wb3J0IHsgQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2h0dHAtY2FsbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSG90ZWxBdmFsaW5pbGl0eUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtYXZhbGlhYmlsaXR5LWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS11c2VyLWFkZHJlc3MudXBkYXRlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyLFxyXG4gIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWFkZHJlc3Nlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLFxyXG4gIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLW5hbWVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyLFxyXG4gIENvbmZlcm1hT2ZmaWNlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jb25mZXJtYS1vZmZpY2UuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLFxyXG4gIEdldFVzZXJDb21wYW55T2ZmaWNlc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jb21wYW55LW9mZmljZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcixcclxuICBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLFxyXG4gIEdldENvbmZlcm1hUm9vbUltYWdlc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY29uZmVybWEtcm9vbS1pbWFnZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLFxyXG4gIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZVxyXG59IGZyb20gJy4uL3Rlc3RlcnMvcG9zdGNvZGUtdmFsaWRhdGUudGVzdGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaERlcG90RmV0Y2hlcixcclxuICBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtZGVwb3RzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyLFxyXG4gIFNlYXJjaElybFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaXJsLXN0YXRpb25zLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxyXG4gIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jb25mZXJtYS1xdWlja2xpc3QuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIsXHJcbiAgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS11c2VyLWFkZHJlc3MtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLFxyXG4gIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcixcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLWZhdm91cml0ZS1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLFxyXG4gIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtbGl2ZS1kZXBhcnR1cmVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHsgSG90ZWxUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBSYWlsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGbGlnaHRUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgTG91bmdlc1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lsb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUGFya2luZ1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lwYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBDYWJIaXJlVGVtcFBhcmFtcyxcclxuICBUYXhpRm9ybU1vZGVcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FySGlyZVRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLFxyXG4gIEdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWN1cnJlbnQtY2FyYm9uLWFsbG93YW5jZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgQmFzZVdlYlRva2VuU2VydmljZSB9IGZyb20gJy4vd2VidG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyLFxyXG4gIEdldFJpc2tBbGVydHNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yaXNrLWFsZXJ0cy5mZXRjaGVyJztcclxuaW1wb3J0IHsgSXJsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElSTEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItcmVjZW50LXNlYXJjaGVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbGNhcmRzRmV0Y2hlcixcclxuICBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWNhcmRzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXIsXHJcbiAgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvdmlkLW1pY3Jvc2l0ZS10b2tlbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyLFxyXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2V1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRXVyb3N0YXJUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgRXVyb1N0YXRpb25zIGZyb20gJy4uL2RhdGEvZXVyby1zdGF0aW9ucy5qc29uJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLXVzZXJzLWNhbi1ib29rLWZvci1mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcixcclxuICBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2lybC1kaXNjb3VudC1jYXJkLWZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcixcclxuICBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LWZhcmUtcnVsZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyLFxyXG4gIEdldEZsaWdodFNlYXRNYXBUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWZsaWdodC1zZWF0LW1hcC1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBBcHBseUhvdGVsUnVsZXNGZXRjaGVyVHlwZSxcclxuICBCYXNlSG90ZWxSdWxlc0ZldGNoZXJcclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1KSVQtaG90ZWwtcnVsZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWZhdm91cml0ZS1zZWFyY2hlcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VFbWFpbEJhc2tldEZldGNoZXIsXHJcbiAgRW1haWxCYXNrZXRGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2VtYWlsLWJhc2tldC5mZXRjaGVyJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZhc3QtdHJhY2stZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyLFxyXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9mYXN0LXRyYWNrLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VuZE9mZmxpbmVOb3RpZmljYXRpb25GZXRjaGVyLFxyXG4gIFNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZW5kLW9mZmxpbmUtbm90aWZpY2F0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1ob3RlbC1jaGFpbnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyLFxyXG4gIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXByb3ZpZGVycy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0QWxsQWlybGluZXNGZXRjaGVyLFxyXG4gIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYWxsLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY2FyLWhpcmUtcHJvdmlkZXJzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyLFxyXG4gIEdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWlybC1zdXBwbGllci1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQgeyBTZXJ2aWNlVHlwZSB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9UUkFWRUxMRVJTID0gODtcclxuXHJcbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgbmFtZSA9ICduYW1lJyxcclxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XHJcbiAgaGlnaGVzdDogbnVtYmVyO1xyXG4gIGN1cnJlbnRJdGVtOiBTZWFyY2hPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XHJcbiAgU1BfUSBleHRlbmRzIFNlYXJjaFBvc3Rjb2Rlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JfUSBleHRlbmRzIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlLFxyXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNQQV9RIGV4dGVuZHMgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0ZMX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZSxcclxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBX1EgZXh0ZW5kcyBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FMX1EgZXh0ZW5kcyBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcclxuICBTQ19RIGV4dGVuZHMgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0NfUSBleHRlbmRzIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUkFfUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQV9RIGV4dGVuZHMgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGUsXHJcbiAgU1VfUSBleHRlbmRzIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGUsXHJcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSENfUSBleHRlbmRzIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZSxcclxuICBHQ1JJX1EgZXh0ZW5kcyBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxyXG4gIFNEX1EgZXh0ZW5kcyBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBzZWFyY2hBaXJwb3J0c0ZldGNoZXI6IEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXI8U0FfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlybGluZXNGZXRjaGVyOiBCYXNlU2VhcmNoQWlybGluZXNGZXRjaGVyPFNBTF9RPixcclxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByb3RlY3RlZCBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJvdGVjdGVkIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlOiBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2U8SEFfUT4sXHJcbiAgICBwcml2YXRlIGNpdGllc0ZldGNoZXI6IEJhc2VTZWFyY2hDaXR5RmV0Y2hlcjxTQ19RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFDaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFDaXR5RmV0Y2hlcjxTQ0NfUT4sXHJcbiAgICBwcml2YXRlIHBvc3Rjb2RlRmV0Y2hlcjogQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcjxTUF9RPixcclxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcclxuICAgIHByaXZhdGUgc2F2ZVVzZXJBZGRyZXNzVXBkYXRlcjogQmFzZVNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI8U1VBX1E+LFxyXG4gICAgcHJpdmF0ZSB1c2VyQWRkcmVzc2VzRmV0Y2hlcjogQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyPFNVX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcjogQmFzZUdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI8R1VDT19RPixcclxuICAgIHByaXZhdGUgc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyOiBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyPFNIQ19RPixcclxuICAgIHByaXZhdGUgZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcjogQmFzZUdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI8R0NSSV9RPixcclxuICAgIHByaXZhdGUgYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyOiBCYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXI8SVBWX1E+LFxyXG4gICAgcHJpdmF0ZSBkZXBvdEZldGNoZXI6IEJhc2VTZWFyY2hEZXBvdEZldGNoZXI8U0RfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXI8R09OX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZUZldGNoZXI6IEJhc2VDb25mZXJtYU9mZmljZUZldGNoZXI8Q09fUT4sXHJcbiAgICBwcml2YXRlIGJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI8RFVBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcjogQmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI8RFJTX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcjxTUlNfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjogQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjxVQ0FfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjogQmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPFNGU19RPixcclxuICAgIGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnQsXHJcbiAgICBsb3VuZ2VGZXRjaGVyOiBCYXNlTG91bmdlUXVvdGVGZXRjaGVyPFNMX1E+LFxyXG4gICAgcGFya2luZ0ZldGNoZXI6IEJhc2VQYXJraW5nUXVvdGVGZXRjaGVyPFNQQV9RPixcclxuICAgIGh0dHBDYWxsU2VydmljZTogQWJzdHJhY3RIdHRwQ2FsbFNlcnZpY2UsXHJcbiAgICBmbGlnaHRGZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPFNGTF9RPixcclxuICAgIGhvdGVsRmV0Y2hlcjogQmFzZUhvdGVsUXVvdGVGZXRjaGVyPFNIT19RPixcclxuICAgIGNhcmhpcmVGZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxTQ0hfUT4sXHJcbiAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXHJcbiAgICBjYWJoaXJlRmV0Y2hlcjogQmFzZUNhYmhpcmVRdW90ZUZldGNoZXI8U1RIX1E+LFxyXG4gICAgcmFpbEZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFNSQV9RPixcclxuICAgIGlybEZldGNoZXI6IEJhc2VJcmxRdW90ZUZldGNoZXI8U0lfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyPEdSU19RPixcclxuICAgIHByb3RlY3RlZCBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyOiBCYXNlR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjxHSVNTRl9RPixcclxuICAgIHByaXZhdGUgYmFzZVdlYlRva2VuU2VydmljZTogQmFzZVdlYlRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgcmlza0FsZXJ0c0ZldGNoZXI6IEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcjxHUkFfUT4sXHJcbiAgICBxdWlja2xpc3RGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyPFFMX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyOiBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcjxHVVJTRl9RPixcclxuICAgIHByb3RlY3RlZCBnZXRSYWlsQ2FyZHNGZXRjaGVyOiBCYXNlR2V0UmFpbGNhcmRzRmV0Y2hlcjxHUkNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyOiBCYXNlR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI8R0NNVEZfUT4sXHJcbiAgICBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcclxuICAgIHB1YmxpYyBzZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyOiBCYXNlU2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlcjxTVUNCRj4sXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyOiBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyPFNJU19RPixcclxuICAgIHByb3RlY3RlZCBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcjogQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXI8R0lERl9RPixcclxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjogQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXI8R0ZGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXI6IEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjxHRlNNX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyOiBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcjxHUkxEX0Y+LFxyXG4gICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlcjogQmFzZUhvdGVsUnVsZXNGZXRjaGVyPEFIUl9RPixcclxuICAgIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBRlJfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyPEdVRlNGX1E+LFxyXG4gICAgcHJpdmF0ZSBkZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyOiBCYXNlRGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxERlNfUT4sXHJcbiAgICBwcml2YXRlIGVtYWlsQmFza2V0RmV0Y2hlcjogQmFzZUVtYWlsQmFza2V0RmV0Y2hlcjxFQl9GPixcclxuICAgIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxyXG4gICAgcHJpdmF0ZSBzZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXI6IEJhc2VTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXI8U09OX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRIb3RlbENoYWluc0ZldGNoZXI6IEJhc2VHZXRIb3RlbENoYWluc0ZldGNoZXI8R0hUX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldFJhaWxQcm92aWRlcnNGZXRjaGVyPEdSUF9RPixcclxuICAgIHByaXZhdGUgZ2V0QWxsQWlybGluZXNGZXRjaGVyOiBCYXNlR2V0QWxsQWlybGluZXNGZXRjaGVyPEdBQV9RPixcclxuICAgIHByaXZhdGUgZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXI6IEJhc2VHZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjxHQ0hQX1E+XHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnRW50ZXJwaXNlIHNlYXJjaCBzZXJ2aWNlIGJlaW5nIGluaXRlZCcpO1xyXG4gICAgdGhpcy5zZWFyY2hlcyA9IHtcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Mb3VuZ2VdOiBuZXcgTG91bmdlc0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgbG91bmdlRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5GbGlnaHRdOiBuZXcgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBmbGlnaHRGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGFwcGx5RmxpZ2h0UnVsZXMsXHJcbiAgICAgICAgbW9kYWxTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuSG90ZWxdOiBuZXcgSG90ZWxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGhvdGVsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGVudmlyb25tZW50LFxyXG4gICAgICAgIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBodHRwQ2FsbFNlcnZpY2UsXHJcbiAgICAgICAgcXVpY2tsaXN0RmV0Y2hlcixcclxuICAgICAgICBnZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgICAgICAgYXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclxyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNhYl06IG5ldyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYWJoaXJlRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbmV3IElSTEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgaXJsRmV0Y2hlcixcclxuICAgICAgICBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBnZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyXHJcbiAgICAgICksXHJcbiAgICAgIFtncmFwaHFsVHlwZXMuU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbmV3IEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgZmFzdHRyYWNrRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5SYWlsXTogbmV3IFJhaWxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIHJhaWxGZXRjaGVyLFxyXG4gICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW2dyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5FdXJvc3Rhcl06IG5ldyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgZXVyb3N0YXJGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApXHJcbiAgICB9O1xyXG4gICAgY29uc29sZS5sb2coJ05ld2x5IGNyZWF0ZWQgc2VhcmNoIG9iamVjdHM6ICcsIHRoaXMuc2VhcmNoZXMpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8XHJcbiAgICAgIFRyYXZlbGxlcltdXHJcbiAgICA+KEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUik7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgdXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJTZXJ2aWNlcy5zdWJzY3JpYmUoXHJcbiAgICAgIChzZXJ2aWNlczogVXNlclNlcnZpY2VzKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlcnZpY2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAgICAgICAob2JqZWN0czogU2VhcmNoT2JqZWN0cywga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAob2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldLmVuYWJsZWQgPVxyXG4gICAgICAgICAgICAgICAgISFzZXJ2aWNlcyAmJiAhIXNlcnZpY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY291bnRyaWVzKSkge1xyXG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYS5jTmFtZSA8IGIuY05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPiBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJhc2VXZWJUb2tlblNlcnZpY2UuYXV0b0xvZ291dENvbmZpZyA9IHRoaXMuZ2V0QXV0b0xvZ291dENvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5hbGxTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5yZXNldEFsbFNlYXJjaEl0ZW1zKCk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0QWxsU2VhcmNoSXRlbXMoKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgaXRlbT8ucmVzZXQoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVtb3ZlQWxsVHJhdmVsbGVycygpO1xyXG4gICAgdGhpcy5yZXNldFNlYXJjaE9iamVjdHMoKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlKFxyXG4gICAgdXNlcj86IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLkNhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBncmFwaHFsVHlwZXMuQ2FyYm9uQWxsb3dhbmNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Umlza0FsZXJ0cyhcclxuICAgIG1pbkxldmVsOiBncmFwaHFsVHlwZXMuUmlza0xldmVsLFxyXG4gICAgbWF4TGV2ZWw6IGdyYXBocWxUeXBlcy5SaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuUmlza0FsZXJ0W10+IHtcclxuICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnk6IGdyYXBocWxUeXBlcy5HZXRSaXNrQWxlcnRzUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIG1pbkxldmVsLFxyXG4gICAgICBtYXhMZXZlbCxcclxuICAgICAgY291bnRyeUlzb0NvZGVcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucmlza0FsZXJ0c0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdDogZ3JhcGhxbFR5cGVzLlJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBncmFwaHFsVHlwZXMuU2VhcmNoQWlycG9ydHMuVmFyaWFibGVzID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgICBpZiAoISFjb3VudHJ5Q29kZSkge1xyXG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNMb3VuZ2UgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0xvdW5nZSA9IGhhc0xvdW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc1BhcmtpbmcgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc1BhcmtpbmcgPSBoYXNQYXJraW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzRmFzdFRyYWNrID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBxdWVyeS5oYXNGYXN0VHJhY2sgPSBoYXNGYXN0VHJhY2s7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgYXMgdGhpcyBjcmVhdGVzIGR1cGxpY2F0ZSBhaXJwb3J0cyBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgICAvLyBpZiAocmVzdWx0cy5pYXRhTWF0Y2gpIHtcclxuICAgICAgICAgICAgLy8gICBnZW5lcmFsTWF0Y2hlcy5wdXNoKHJlc3VsdHMuaWF0YU1hdGNoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGdlbmVyYWxNYXRjaGVzXHJcbiAgICAgICAgICAgICAgICAvLyAuZmlsdGVyKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIHJldHVybiAhIWNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgPyBjb3VudHJ5Q29kZSA9PT0gYWlycG9ydC5kZXRhaWxzLmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBhaXJwb3J0O1xyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIC5tYXAoKGFpcnBvcnQ6IGdyYXBocWxUeXBlcy5BaXJwb3J0KTogT0JUQWlycG9ydERldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQudGVybWluYWxzKSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcmxpbmVzTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlybGluZXNEZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBxdWVyeTogZ3JhcGhxbFR5cGVzLlNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IGdyYXBocWxUeXBlcy5BaXJsaW5lUmVzdWx0KTogT0JUQWlybGluZXNEZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IGFpcmxpbmVzLmlhdGEsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmxpbmVzLm5hbWVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJwb3J0TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGNvbnN0IGNvbnZlcnQgPSAocmVzdWx0czogT0JUQWlycG9ydERldGFpbHNbXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IE9CVEFpcnBvcnREZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdC5kZXN0aW5hdGlvbixcclxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgICAgICAgIGFpcnBvcnQ6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmdldEFpcnBvcnRzTGlzdChcclxuICAgICAgdGVybSxcclxuICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgIGlzTG9hZGluZyxcclxuICAgICAgaGFzTG91bmdlLFxyXG4gICAgICBoYXNQYXJraW5nLFxyXG4gICAgICBoYXNGYXN0VHJhY2tcclxuICAgICkucGlwZShtYXAoY29udmVydCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBpc0NvbmZpcm1hPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbmZpcm1hKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dldENpdHlMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgIGlmIChjb3VudHJ5Q29kZSkge1xyXG4gICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFNlYXJjaENpdGllc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuY2l0aWVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBTZWFyY2hDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5jb29yZGluYXRlcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogcmVzdWx0LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBjaXR5TmFtZTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQ+ID1cclxuICAgICAgdGhpcy5jb25mZXJtYUNpdGllc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghcmVzdWx0cz8uc3VnZ2VzdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5zdWdnZXN0aW9ucy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgY2FyIGhpcmUgZGVwb3RzIGJhc2VkIG9uIGNpdHkgY29yZHNcclxuICAgKi9cclxuICBnZXRDYXJIaXJlRGVwb3RzKFxyXG4gICAgbGF0aXR1ZGU6IG51bWJlcixcclxuICAgIGxvbmdpdHVkZTogbnVtYmVyLFxyXG4gICAgcmFkaXVzPzogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxDYXJIaXJlRGVwb3RSZXN1bHRBcnJheT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSB9O1xyXG4gICAgaWYgKHJhZGl1cykge1xyXG4gICAgICBxdWVyeS5yYWRpdXMgPSByYWRpdXM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZGVwb3RGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIG9iczsgLy8gLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuXHJcbiAgICAvLyByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHBvc3Rjb2RlIGxvY2F0aW9ucywgdGhlc2Ugd2lsbCB1c2UgcGFydGlhbCBwb3N0Y29kZSxcclxuICAgKiAgZnVsbCBhbmQgdGhlbiBncmFiYmluZyB0aGVtIHdpbGwgbGV0IHVzIGZpbGwgaW4gdGhlIGFkZHJlc3MgZm9ybVxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoIGJ5IGUuZy4gJ3dhMTQnIHNob3VsZCBicmluZyBiYWNrLCBvdXIgb2ZmaWNlLCAnbTMzJyBzaG9pdWxkIGJyaW5nIGJhY2sgbXkgYWRkcnNcclxuICAgKi9cclxuICBnZXRQb3N0Y29kZUxpc3QodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKFJlZ0V4cHMuVUtfUE9TVENPREUudGVzdCh0ZXJtKSkge1xyXG4gICAgICBjb25zdCBzdWJzID0gdGhpcy5wb3N0Y29kZUZldGNoZXIuZmV0Y2hMaXN0KHsgcG9zdGNvZGU6IHRlcm0gfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdEFycmF5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaFBvc3Rjb2Rlc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcclxuXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRvU2VsZWN0ZWRQbGFjZXMoYWRkcmVzczogZ3JhcGhxbFR5cGVzLkFkZHJlc3MpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQbGFjZXMucHVzaChhZGRyZXNzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUGxhY2VCeUlkKHBsYWNlSWQ6IHN0cmluZyk6IGdyYXBocWxUeXBlcy5BZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IGdyYXBocWxUeXBlcy5Db25mZXJtYU9mZmljZU5hbWVzKTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLk9mZmljZSxcclxuICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIE9mZmljZSBsb2NhdGlvbnMgYmFzZWQgb24gc2VhcmNoIHRlcm0gZ2l2ZW5cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgc28gdGhhdCBpdCBhY3R1YWxseSBwZXJmb3JtcyBhIGh0dHAgY2FsbFxyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gd2Ugd2FudCB0byBzZWFyY2ggYnlcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldE9mZmljZUxvY2F0aW9ucyh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICAgICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgICByZXN1bHRzOiBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHRBcnJheVxyXG4gICAgICApOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgb2ZmaWNlOiByZXN1bHQuYWRkcmVzc2VzWzBdLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRpb25Mb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNUb2Q6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5yYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtLFxyXG4gICAgICAgICAgaGFzVG9kXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgPyByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbFN0YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SYWlsU3RhdGlvbj4ge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KS5waXBlKHRha2UoMSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHNlYXJjaElybFN0YXRpb25zTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaElybFN0YXRpb25zRmV0Y2hlclxyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xyXG4gICAgICAgICAgcXVlcnk6IHRlcm1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIG1hcChcclxuICAgICAgICAgICAgKHJlc3VsdHM6IGdyYXBocWxUeXBlcy5JcmxTdXBwbGllclN0YXRpb25bXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBncmFwaHFsVHlwZXMuSXJsU3VwcGxpZXJTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC5zdXBwbGllcn0pYCxcclxuICAgICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGhvdGVsIGxvY2F0aW9ucywgdGhlc2Ugc2hvdWxkIGJlIGNpdHksIG9mZmljZSwgYWlycG9ydCwgcmFpbHN0YXRpb25cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgZm9yIHRoZSBvdGhlciBsb2NhdGlvbiB0eXBlcywgbWF5IG5lZWQgdG8gbWVyZ2VNYXAgdGhlbSBvciBzb21lIG90aGVyIHJ4anMgbWFnaWNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICdNYW4nIHNob3VsZCBicmluZyBiYWNrLCBtYW5jaGVzdGVyLCBtYW5jaGVzdGVyIGFpcnBvcnQsIG1hbmNoZXN0ZXIgcGljYWRpbGx5LCBldGNcclxuICAgKi9cclxuICBnZXRIb3RlbExvY2F0aW9uc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmIChSZWdFeHBzLlVLX1BPU1RDT0RFLnRlc3QodGVybSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3N0Y29kZUxpc3QodGVybSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3VicyA9IGZvcmtKb2luKFtcclxuICAgICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgICAgICAgICAgdGVybSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlzTG9hZGluZyxcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VySGFzU2VydmljZVByb3ZpZGVyKFxyXG4gICAgICAgICAgICAgIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZS5Ib3RlbCxcclxuICAgICAgICAgICAgICBTZXJ2aWNlUHJvdmlkZXIuQ29uZmlybWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDb25maXJtYU9mZmljZXModGVybSlcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbnNBbmRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQGRlc2MgLSByZW1vdmUgYSBzcGVjaWZpZWQgdHJhdmVsbGVyIGZyb20gdGhlIHNlbGVjdGVkIGFycmF5XHJcbiAgKiovXHJcbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXJUb1Rlc3Q6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZSBhbGwgdHJhdmVsbGVycyBjYWxsZWQhJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMudHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcikgJiZcclxuICAgICAgIXRoaXMuY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcclxuICAgICAgPyAxXHJcbiAgICAgIDogTUFYX1RSQVZFTExFUlM7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICBAZGVzYyAtIGhlbHBlciBmdW5jdGlvbiAtIGRldGVybWluZXMgaWYgYSBzZWxlY3RlZCB0cmF2ZWxsZXIgaXMgYWxyZWFkeSBhZGRlZCAtXHJcbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcclxuICAqKi9cclxuICB0cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cclxuICAgICAgVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJzLCB0cmF2ZWxsZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5pc1VzZXJGYXZvcml0ZVNldChVc2VyRmF2b3J1cml0ZS5Eb250VXNlVHJhdmVsbGVyUG9saWN5KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXVxyXG4gICAgICAgIC5ndWVzdCAvKiYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgIT09IHVzZXIuUGF4SWRcclxuICAgICk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXSkge1xyXG4gICAgICB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnJhaWxDYXJkcyA9IG5ldyBBcnJheShcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGhcclxuICAgICAgKS5maWxsKHsgbmFtZTogJycsIGNvZGU6ICcnIH0sIDAsIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxyXG4gICAqICAgdGhlIGhpZ2hlc3QgaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IHZhbHVlIG9mIHRoZSBzZWFyY2ggdHlwZSxcclxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cclxuICAgKiovXHJcbiAgZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPVxyXG4gICAgICB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcclxuICB9XHJcblxyXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcclxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8Z3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLCBncmFwaHFsVHlwZXMuQmFza2V0SXRlbT5cclxuICApOiBTZWFyY2hPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXHJcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPFxyXG4gICAgICBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUsXHJcbiAgICAgIGdyYXBocWxUeXBlcy5CYXNrZXRJdGVtXHJcbiAgICA+ID0ge30gYXMgUmVjb3JkPGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSwgZ3JhcGhxbFR5cGVzLkJhc2tldEl0ZW0+XHJcbiAgKTogSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuICYmIGl0ZW0ucHJpb3JpdHkgPCBoaWdoZXN0KSB7XHJcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBncmFwaHFsVHlwZXMuU2VydmljZVR5cGVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGhpZ2hlc3Q6IGl0ZW0ucHJpb3JpdHksIGN1cnJlbnRJdGVtOiBpdGVtIH07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLmNob3NlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9O1xyXG4gICAgICB9LFxyXG4gICAgICB7IGhpZ2hlc3Q6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW50SXRlbTogbnVsbCB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRPcHRpb25zKCk6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZVtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcclxuICAgICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2l0ZW1JbmRleF0/LmNob3Nlbikge1xyXG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN2O1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHNlbGVjdGVkIHRyYXZlbGxlcnMgY29udGFpbnMgYW55IGd1ZXN0cyB3aXRob3V0IGFsbCBvZiBkZXRhaWxzXHJcbiAgICovXHJcbiAgaGFzU2ltcGxlR3Vlc3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgLypyZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh7IGd1ZXN0LCBwaG9uZSwgbmF0aW9uYWxpdHksIGVtYWlsIH0pID0+IHtcclxuICAgICAgcmV0dXJuIGd1ZXN0ICYmICEoISFlbWFpbCAmJiAhIXBob25lICYmICEhbmF0aW9uYWxpdHkpO1xyXG4gICAgfSk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNldCB0aGUgc2VhcmNoIG9iamVjdHMgdG8gdGhlIGdldCBtZSB0aGVyZSBvYmplY3RzIC0gY2FsbGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZ2V0IG1lIHRoZXJlIHNlYXJjaGVzXHJcbiAgICovXHJcbiAgc2V0R2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnKysrIFNldHRpbmcgR2V0TWVUaGVyZSBTZWFyY2ggT2JqZWN0cyArKysnKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5nZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U2VhcmNoUGFyYW1zKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ1Jlc2V0aW5nIFNlYXJjaCBQYXJhbXMhJyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1xyXG4gICAgKTtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hlcykuZm9yRWFjaChcclxuICAgICAgKHByb2R1Y3RTZWFyY2hTZXJ2aWNlOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgcHJvZHVjdFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhblNlYXJjaCh0eXBlOiBncmFwaHFsVHlwZXMuU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXHJcblxyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXHJcbiAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xyXG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdPy5jaG9zZW4gJiZcclxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShcclxuICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdPy5wcmlvcml0eVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2codHlwZSArICcgY2FuIGJlIHNlYXJjaGVkJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShwcmlvcml0eVZhbDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmRldGVybWluZUhpZ2hlc3RTZWFyY2hQcmlvcml0eSgpO1xyXG4gICAgcmV0dXJuIHByaW9yaXR5VmFsIDw9IHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGNvbmNhdGluYXRzIGFsbCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcyBhY3Jvc3MgYWxsIHNlbGVjdGVkIHR5cGVzICtcclxuICAgKiAgIHRyYXZlbGxlcnMgKG9yIHdpbGwgZG8gd2hlbiBpdCdzIGNvbXBsZXRlKSBUT0RPIC0gYWRkIEZsaWdodCwgUmFpbCBDYXJcclxuICAgKiovXHJcbiAgZ2V0QWxsRXJyb3JNZXNzYWdlcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjb25jYXR0ZWRFcnJvcnM6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICkucmVkdWNlKFxyXG4gICAgICAoYWNjdW06IHN0cmluZ1tdLCBbdHlwZSwgc2VhcmNoT2JqZWN0XTogW3N0cmluZywgU2VhcmNoT2JqZWN0XSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWFyY2hPYmplY3Q/LmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaCh0eXBlKSkge1xyXG4gICAgICAgICAgYWNjdW0ucHVzaChcclxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hlc1t0eXBlIGFzIGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZV1cclxuICAgICAgICAgICAgICAudmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZXJyb3JzLm5leHQoY29uY2F0dGVkRXJyb3JzKTtcclxuICAgIHJldHVybiBjb25jYXR0ZWRFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuU2VsZkJvb2s6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIShcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmIHRoaXMudHJhdmVsbGVyc0NvbnRhaW5Vc2VyKClcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMgYXMgdGhlIHVzZXIgc2hvdWxkIGJlIGxvYWRlZCBpbiBhcyBhIHRyYXZlbGxlciBvbiBsb2dpblxyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICAgJ0N1cnJlbnQgdXNlciBtdXN0IGJlIGEgdHJhdmVsbGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSkgfHxcclxuICAgICAgICAgICF0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQm9va2VyOlxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLkNvbXBhbnk6XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxyXG4gICAgICBjYXNlIGdyYXBocWxUeXBlcy5Cb29rZXJUeXBlLk9mZmljZTpcclxuICAgICAgY2FzZSBncmFwaHFsVHlwZXMuQm9va2VyVHlwZS5UbWM6XHJcbiAgICAgIGNhc2UgZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuUm9vdDpcclxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPj0gMSkpIHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybXMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIHRoaXMuZ2V0QWxsRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICB0aGlzLmVycm9ycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5tZXNzYWdlcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgJiZcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZpbmQoKG9iajogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISFvYmogJiYgb2JqLnByaW9yaXR5ID09PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ICYmIG9iai5jaG9zZW5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hlcyh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubmV3U2VhcmNoU3RhcnRlZC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3Q7XHJcbiAgICBzZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XHJcbiAgICAgIHNlYXJjaE9iamVjdC5jaG9zZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hlcy5JTlRFUk5BVElPTkFMX1JBSUwpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdElybEZvcm0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgc2VhcmNoT2JqZWN0ICYmXHJcbiAgICAgICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnJlc3VsdFVybF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qSWYgdGhlIHNlYXJjaCBleGNlZWRzIHRoZSB0aW1lb3V0IHRpbWUsIGNhbmNlbCBzZWFyY2ggYW5kIHRlbGwgT0JUIHRoYXQgaXQncyB0aW1lZCBvdXQqL1xyXG4gICAgLy8gY29uc3QgY29udGV4dCA9IHRoaXM7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgaWYgKGNvbnRleHQuc2VhcmNoX2xvYWRpbmcpIHtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hUaW1lZE91dC5uZXh0KHRydWUpO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgdGhpcy5lbnZpcm9ubWVudC5zZWFyY2hUaW1lb3V0KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcChcclxuICAgICAgICAgIChzZWFyY2g6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXT8uY2hvc2VuXHJcbiAgICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxyXG4gICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xyXG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgM1xyXG4gICAgICA/IG9mKFtdKVxyXG4gICAgICA6IG9mKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIEFpcnBvdCcsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01BTicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTEgMlBaJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdMb25kb24gSGVhdGhyb3cnLFxyXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTG9uZG9uIEhlYXRocm93IEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ1RXNiAxRVcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzZXMoaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiBvZihbXHJcbiAgICAgIHtcclxuICAgICAgICBIb3VzZTogJ0NlY2lsIENvdXJ0JyxcclxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcclxuICAgICAgICBUb3duOiAnSGFsZScsXHJcbiAgICAgICAgUG9zdENvZGU6ICdXQTE1IDlQQicsXHJcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJBZGRyZXNzZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICBIb3VzZTogcmVzdWx0Lm51bWJlck9yTmFtZSxcclxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxyXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcclxuICAgICAgICAgICAgUG9zdENvZGU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJBZGRyZXNzQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG90ZWxDaGFpbihcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtIH0pO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2VOYW1lcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlTmFtZXNbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM/LnJlc3VsdHM/Lm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogZ3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlTmFtZXMpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZShvZmZpY2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuQ29uZmVybWFPZmZpY2VJbmZvPiB7XHJcbiAgICBpZiAob2ZmaWNlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmVybWFPZmZpY2VGZXRjaGVyLmZldGNoT25lKHsgb2ZmaWNlSWQgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogZ3JhcGhxbFR5cGVzLkNvbmZlcm1hT2ZmaWNlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbEhvdGVsQ2hhaW5zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0SG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmFpbFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Z2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FySGlyZVByb2l2ZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQWlybGluZXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRBbGxBaXJsaW5lc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0QWxsQWlybGluZXNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5SZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsQ2FyZHNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIGNvbnN0IHJhaWxDYXJkcyA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgICAocmVzdWx0OiBncmFwaHFsVHlwZXMuUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiByZXN1bHQuY29kZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gcmFpbENhcmRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWlycG9ydEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFpcnBvcnRTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICBpZiAoY29kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUoeyBxdWVyeTogY29kZSB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQ6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPIEJFIE9WRVIgUklEREVOIEJZIE9CVCBTVUJDTEFTU0VTXHJcbiAgcHVibGljIGluaXRfc2VhcmNoX29iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBTRUFSQ0ggT0JKRUNUUyBGT1IgR0VUIE1FIFRIRVJFIERPT1IgMiBET09SICAgICAgICAgICpcclxuICAgKiBEaWZmZXJlbmNlKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBBbGwgb2JqZWN0cyBoYXZlIGEgcHJpb3JpdHkgb2YgMSBzbyB0aGF0IHRoZXkgYXJlICAgICpcclxuICAgKiBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBVcmxzIGNoYW5nZWQgdG8gZ2V0bWV0aGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBwcm90ZWN0ZWQgZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZ2V0cyBhbGwgc2VsZWN0ZWQgdHJhdmVsbGVyc1xyXG4gICAqICAgSW1wbGVtZW50ZWQgZm9yIHJhaWwgY2FyZCByZWFzb25zIGluIExVXHJcbiAgICoqL1xyXG4gIGdldFNlbGVjdGVkdHJhdmVsbGVycygpOiBUcmF2ZWxsZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnM7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgYXJyYXkgb2YgdmFsdWVzIGZyb20gQVBJIGFyZSBleHB0ZWN0ZWQgYW5kIGZ1bmN0aW9uIG1hbmlwdWxhdGUgdG8gY3JlYXRlIHRoZSBsaXN0XHJcbiAgICBbXCJNYWluXCJdXHJcbiAgICBbXCIxXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiXVxyXG4gICAgW1wiU291dGhcIiwgXCJOb3J0aFwiXVxyXG4gICovXHJcbiAgcHVibGljIHByb2Nlc3NUZXJtaW5hbHModGVybWluYWxzOiBzdHJpbmdbXSk6IFRlcm1pbmFsc1R5cGVbXSB7XHJcbiAgICBjb25zdCB0ZW1wVGVybWluYWw6IFRlcm1pbmFsc1R5cGVbXSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzEnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzInKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzMnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzQnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzUnKVxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgVGVybWluYWwgJHtpdGVtfWAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRlcm1pbmFscy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7dGVybWluYWxzWzBdfSBUZXJtaW5hbGAsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke2l0ZW19IFRlcm1pbmFsYCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVVc2VyQWRkcmVzcyhcclxuICAgIGFkZHJlc3M6IGdyYXBocWxUeXBlcy5TYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUoYWRkcmVzcylcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5Cb29rKHNlcnZpY2U6IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuY2FuQm9vayhzZXJ2aWNlKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzUG9zdGNvZGVWYWlsZChwb3N0Y29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIudGVzdCh7IHBvc3Rjb2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIFN0YXJ0ICovXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhYiBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FiSGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhYkhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYWJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FiSGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FiSGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlycG9ydDogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNvdW50cnlDb2RlOiBudWxsLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSxcclxuICAgICAgZnJvbUFkZHJlc3M6IG51bGwsXHJcbiAgICAgIGZyb21TdGF0aW9uOiBudWxsLFxyXG4gICAgICBmcm9tTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgdG9BZGRyZXNzOiBudWxsLFxyXG4gICAgICB0b1N0YXRpb246IG51bGwsXHJcbiAgICAgIHRvTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgdmVoaWNsZVR5cGU6IGdyYXBocWxUeXBlcy5DYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxyXG4gICAgICB2aWFzRnJvbTogbnVsbCxcclxuICAgICAgdmlhc1RvOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhYkhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnZGVwYXJ0cyddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhciBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FySGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhckhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYXJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FySGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FySGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlyQ29uOiBudWxsLFxyXG4gICAgICBjYXJDbGFzczogbnVsbCxcclxuICAgICAgY2FyVHlwZTogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblZlbmRvcjogbnVsbCxcclxuICAgICAgY2hvc2VuRGlzdGFuY2U6ICc1JyxcclxuICAgICAgY2l0eURyb3BvZmY6IG51bGwsXHJcbiAgICAgIGNpdHlEcm9wb2ZmRGVwb3Q6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXA6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXBEZXBvdDogbnVsbCxcclxuICAgICAgZHJvcG9mZl9jb3VudHJ5OiAnR0InLFxyXG4gICAgICBkcm9wb2ZmX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBlc3RpbWF0ZWRNaWxlYWdlOiBudWxsLFxyXG4gICAgICBsb2NhdGlvblR5cGU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9jb3VudHJ5OiBudWxsLFxyXG4gICAgICBwaWNrdXBfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmZSYXc6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cFJhdzogbnVsbCxcclxuICAgICAgcmV0dXJuX3RvX3BpY2t1cDogdHJ1ZSxcclxuICAgICAgdHJhbnNtaXNzaW9uOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhckhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncGlja3VwX2RhdGV0aW1lJywgJ2Ryb3BvZmZfZGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZsaWdodCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEZsaWdodHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZsaWdodFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZsaWdodFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmxpZ2h0VGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogbnVsbCxcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZsaWdodFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEhvdGVsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEhvdGVsc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEhvdGVsc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlSG90ZWxRdWVyeSguLi5hcmdzOiBhbnkpOiBIb3RlbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgY2hlY2tpbl9kYXRlOiBtb21lbnQoKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudCgpLmFkZCgxLCAnZGF5Jykuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxyXG4gICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgIGRpc3RhbmNlOiA1LCAvLyBkZWZhdWx0IDUgbWlsZXMgcmFkaXVzXHJcbiAgICAgIGhvdGVsX2F2YWlsYWJpbGl0eTogbnVsbCxcclxuICAgICAgaG90ZWxfY2hhaW46IG51bGwsXHJcbiAgICAgIGhvdGVsX25hbWU6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uX3R5cGVfc2VsZWN0OiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXHJcbiAgICAgIGxvY2F0aW9uOiBudWxsLCAvLyBtaWdodCB3YW50IHRvIHNwbGl0IHRoaXMgb3V0IHRvIGNpdHksIGFpcnBvcnQsIG9mZmljZSwgcmFpbHN0YXRpb24gLSB0aGlzIHdpbGwgZG8gZm9yIG5vd1xyXG4gICAgICBub19vZl9vY2N1cGFudHM6IDEsIC8vIHNpbWlsYXJseSB0aGluayB0aGlzIGlzIGEgbWF4IG9mIDNcclxuICAgICAgbm9fb2Zfcm9vbXM6IDEsIC8vIG1heCBvZiA0IGluIG9sZCBzYWJzLCBub3Qgc3VyZSBoZXJlXHJcbiAgICAgIG9mZmljZTogbnVsbCxcclxuICAgICAgcG9zdGNvZGU6IG51bGwsXHJcbiAgICAgIHByZWZlcmVkX2hvdGVsc19vbmx5OiBmYWxzZSxcclxuICAgICAgdHJhaW5zU3RhdGlvbjogbnVsbFxyXG4gICAgfSBhcyBIb3RlbFRlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SG90ZWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnY2hlY2tpbl9kYXRlJywgJ2NoZWNrb3V0X2RhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIExvdW5nZXMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlTG91bmdlc1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IExvdW5nZXNUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgTG91bmdlc1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8TG91bmdlc1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFBhcmtpbmcgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hQYXJraW5nQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUGFya2luZ0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUGFya2luZ1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFBhcmtpbmdUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGNhclBhcmtlZEZvcllvdTogbnVsbCxcclxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgbWVldEFuZEdyZWV0OiBudWxsLFxyXG4gICAgICBvbkFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIG91dEZsaWdodE51bWJlcjogbnVsbCxcclxuICAgICAgcGFya0FuZFJpZGU6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRTdHJvbGw6IG51bGwsXHJcbiAgICAgIHJlY29tbWVuZGVkOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBQYXJraW5nVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxQYXJraW5nVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZScsICdkZXBhcnREYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VSYWlsUXVlcnkoLi4uYXJnczogYW55KTogUmFpbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IFJhaWxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhaXJwb3J0RXhwcmVzc1N0YXRpb246IG51bGwsXHJcbiAgICAgIGFwcGx5UmFpbGNhcmRzOiBmYWxzZSxcclxuICAgICAgY2FybmV0VGlja2V0OiBmYWxzZSxcclxuICAgICAgY2hvc2VuU2VhcmNoQ2xhc3M6IGdyYXBocWxUeXBlcy5SYWlsQ2xhc3MuQWxsLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBncmFwaHFsVHlwZXMuUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksXHJcbiAgICAgIGRpc2FibGVBdXRvRGlzY291bnRzOiBmYWxzZSxcclxuICAgICAgZXh0cmFUaW1lOiBmYWxzZSxcclxuICAgICAgaW5Cb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpc0FpcnBvcnRFeHByZXNzOiBmYWxzZSxcclxuICAgICAgbm9PZkFkdWx0czogMCxcclxuICAgICAgbm9PZkNoaWxkcmVuOiAwLFxyXG4gICAgICBvdXRib3VuZENyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICBvdXRCb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBwcmlvcml0aXNlQnlQcmljZTogZmFsc2UsXHJcbiAgICAgIHJldHVybkNyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICB0cmF2ZWxsaW5nRnJvbTogbnVsbCxcclxuICAgICAgdHJhdmVsbGluZ1RvOiBudWxsLFxyXG4gICAgICB2aWE6IGZhbHNlLFxyXG4gICAgICB2aWFMb2NhdGlvbjogbnVsbCxcclxuICAgICAgcmFpbENhcmRzOiBbXSxcclxuICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFJhaWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnaW5Cb3VuZERhdGVUaW1lJywgJ291dEJvdW5kRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBJcmxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcclxuICAgICAgam91cm5leVR5cGU6IGdyYXBocWxUeXBlcy5JcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LCAvLyBJUkxKb3VybmV5VHlwZSFcclxuICAgICAgY2xhc3M6IG51bGwsIC8vIElSTENsYXNzXHJcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFycml2YWxMb2NhdGlvbklkOiBudWxsLFxyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICByZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogdGltZSxcclxuICAgICAgaXJsRGlzY291bnRDYXJkczogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxJcmxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUnLCAnb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRXVyb3N0YXIgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge0V1cm9zdGFyVGVtcFBhcmFtc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRXVyb3N0YXJBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUV1cm9zdGFyUXVlcnkoLi4uYXJnczogYW55KTogRXVyb3N0YXJUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEV1cm9zdGFyVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybixcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBncmFwaHFsVHlwZXMuRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogZ3JhcGhxbFR5cGVzLkZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEV1cm9zdGFyVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRmFzdFRyYWNrIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRmFzdFRyYWNrUXVlcnkoLi4uYXJnczogYW55KTogRmFzdFRyYWNrVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGxcclxuICAgIH0gYXMgRmFzdFRyYWNrVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGYXN0VHJhY2tUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qIENyZWF0ZSBRdWVyeSBEZWZhdWx0cyBFbmQgKi9cclxuXHJcbiAgc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0b0xvZ291dENvbmZpZygpIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3ZlcndyaXRlIGlmIHRoZSBPQlQgZGlzcGxheXMgYSBsaXN0IG9mIG9mZmljZXMgaW5zdGVhZCBvZiBzZWFyY2hpbmcgb24gdGhlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaG91bGRGZXRjaEFsbE9mZmljZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGlzRmxpZ2h0c0dyb3VwZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGdldENvdW50cnlGdWxsTmFtZUZyb21Db3VudHJ5Q29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZ1bGxOYW1lID0gJ1Vua25vd24nO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY291bnRyeSA9IHRoaXMuY291bnRyaWVzW2ldO1xyXG5cclxuICAgICAgaWYgKGNvdW50cnkuY0NvZGUgPT09IGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gY291bnRyeS5jTmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdWxsTmFtZTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJSZWNlbnRTZWFyY2hlcyhcclxuICAgIHNlcnZpY2VUeXBlPzogZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IGdyYXBocWxUeXBlcy5TZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgdGFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlY2VudFNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG4gIGRlbGV0ZUZhdm91cml0ZVNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlUmVjZW50U2VhcmNoKFxyXG4gICAgcXVlcnk6IGdyYXBocWxUeXBlcy5TYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgcXVlcnkgJiZcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmd1ZXN0KVxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHByZXZlbnQgaXQgc2F2aW5nIHJlY2VudCBzZWFyY2hlcyB3aXRoIGd1ZXN0cyAtIGF0bSBpdCdzIGVycm9yaW5nXHJcbiAgICAgIHRoaXMuYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyXHJcbiAgICAgICAgLnVwZGF0ZU9uZShxdWVyeSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvdmlkTWljcm9zaXRlVG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcihcclxuICAgICAgICAgICh2KSA9PiB2LmRlc3RpbmF0aW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTFcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWFyY2hUcmF2ZWxsZXJzKFxyXG4gICAgaW5wdXQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFRyYXZlbGxlcnNCeTogVHJhdmVsbGVyU2VhcmNoVHlwZXNcclxuICApOiBPYnNlcnZhYmxlPFRyYXZlbGxlcltdPiB7XHJcbiAgICBjb25zdCB0eXBlOiBncmFwaHFsVHlwZXMuQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuU2VsZkJvb2sgJiZcclxuICAgICAgdHlwZSAhPT0gZ3JhcGhxbFR5cGVzLkJvb2tlclR5cGUuVHJhdmVsbGVyICYmXHJcbiAgICAgIGlucHV0Lmxlbmd0aCA+PSAxXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaW5wdXRXb3JkcyA9IGlucHV0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhbXFx3XSkrL2cpO1xyXG4gICAgICBjb25zdCBhcmdzOiBncmFwaHFsVHlwZXMuU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5jbG9uZShkYXRhKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZSA/IC0xIDogYS5zdXJuYW1lID4gYi5zdXJuYW1lID8gMSA6IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBmbGlnaHQ6IGdyYXBocWxUeXBlcy5JbnB1dEZsaWdodEpvdXJuZXlcclxuICApOiBPYnNlcnZhYmxlPEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5PiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodCB9KTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxMaXZlRGVwYXJ0dXJlcyhcclxuICAgIHN0YXRpb246IHN0cmluZyxcclxuICAgIGRhdGVUaW1lPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxTZWFyY2hSYWlsTGl2ZURlcGFydHVyZXNSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3RhdGlvbkNvZGU6IHN0YXRpb24sXHJcbiAgICAgIGRlcGFydERhdGVUaW1lOiBkYXRlVGltZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRTZWF0TWFwKFxyXG4gICAgZmxpZ2h0OiBncmFwaHFsVHlwZXMuSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxncmFwaHFsVHlwZXMuRmxpZ2h0U2VhdE1hcFJlc3BvbnNlW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodFNlYXRNYXBGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodDogZmxpZ2h0IH0pLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogZ3JhcGhxbFR5cGVzLkZsaWdodFNlYXRNYXBSZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGEucmVzdWx0cztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUZhdm91cml0ZVNlYXJjaChcclxuICAgIHNlYXJjaDogZ3JhcGhxbFR5cGVzLlNhdmVGYXZvdXJpdGVTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShzZWFyY2gpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmVybWFSb29tSW1hZ2VzKGhvdGVsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcclxuICAgIGlmIChob3RlbElkKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLmZldGNoTGlzdCh7IGhvdGVsSWQgfSk7XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtYWlsQmFza2V0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdyYXBocWxUeXBlcy5CYXNrZXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmVtYWlsQmFza2V0RmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdElybEZvcm0oKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlckVtYWlsID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRW1haWwoKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XHJcbiAgICAgIHRoaXMuc2VhcmNoZXNbZ3JhcGhxbFR5cGVzLlNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTtcclxuICAgIGxldCBvbkJlaGFsZk9mOiBzdHJpbmc7XHJcbiAgICBsZXQgcGFzc2VuZ2Vyczoge307XHJcblxyXG4gICAgLy8gZ2V0IHBhc3NlbmdlcnNcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGFnZTogbnVtYmVyO1xyXG4gICAgICAgICAgaWYgKHRyYXZlbGxlci5kb2IpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZURpZmYgPSBNYXRoLmFicyhcclxuICAgICAgICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHRyYXZlbGxlci5kb2IpLmdldFRpbWUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhZ2UgPSBNYXRoLmZsb29yKHRpbWVEaWZmIC8gKDEwMDAgKiAzNjAwICogMjQpIC8gMzY1KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRyYXZlbGxlci5uYW1lLFxyXG4gICAgICAgICAgICBhZ2U6IGFnZT8udG9TdHJpbmcoKSB8fCAnTm90IHNwZWNpZmllZCcsXHJcbiAgICAgICAgICAgIGRpc2NvdW50Q2FyZDogYERpc2NvdW50IENhcmQgJHtpbmRleCArIDF9YCxcclxuICAgICAgICAgICAgbG95YWx0eUNhcmQ6IGBMb3lhbHR5IENhcmQgJHtpbmRleCArIDF9YFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBvbkJlaGFsZk9mID0gdHJhdmVsbGVyc1swXS5lbWFpbFxyXG4gICAgICAgICAgPyB0cmF2ZWxsZXJzWzBdLmVtYWlsXHJcbiAgICAgICAgICA6IGN1cnJlbnRVc2VyRW1haWw7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGdldCBqcmZyZWZlcmVuY2VcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgc2VhcmNoUGFyYW1zLnJlc3VsdHMuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpcmxKb3VybmV5OiBncmFwaHFsVHlwZXMuSXJsSm91cm5leU9wdGlvbnNbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmpyZlJlZmVyZW5jZSA9IGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuanJmUmVmZXJlbmNlICYmIHBhc3NlbmdlcnMpIHtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICB0cmFpbk51bWJlcjogc2VhcmNoUGFyYW1zLnRyYWluTnVtYmVyIHx8ICdBbnknLFxyXG4gICAgICAgIGRlcGFydHVyZVN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nRnJvbS5uYW1lLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdUby5uYW1lLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogc2VhcmNoUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgaW5ib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICBhZGRpdGlvbmFsSW5mbzpcclxuICAgICAgICAgIHNlYXJjaFBhcmFtcy5hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zIHx8ICdObyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucycsXHJcbiAgICAgICAgc2VydmljZUNsYXNzOiBzZWFyY2hQYXJhbXMuaXJsQ2xhc3MgfHwgJ0FueScsXHJcbiAgICAgICAgb2ZmbGluZVJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UsXHJcbiAgICAgICAgbm90aWZ5RW1haWw6IGN1cnJlbnRVc2VyRW1haWwsXHJcbiAgICAgICAgb25CZWhhbGZPZixcclxuICAgICAgICBwYXNzZW5nZXJzXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHBheWxvYWQpO1xyXG5cclxuICAgICAgdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdDogZ3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuT2ZmbGluZVJlcXVlc3REaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJyB9LFxyXG4gICAgICAgICAgICAgIHsganJmUmVmZXJlbmNlOiB0aGlzLmpyZlJlZmVyZW5jZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgeyBlcnJvcjogJ1VuYWJsZSB0byBzZW5kIG9mZmxpbmUgbm90aWZpY2F0aW9uJyB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZE9mZmxpbmVOb3RpZmljYXRpb24oXHJcbiAgICBqcmZSZWZlcmVuY2U6IGFueVxyXG4gICk6IE9ic2VydmFibGU8Z3JhcGhxbFR5cGVzLklybE9mZmxpbmVOb3RpZnlSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlci5mZXRjaE9uZShqcmZSZWZlcmVuY2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q291bnRyaWVzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvdW50cmllcztcclxuICB9XHJcbn1cclxuIl19