@sabstravtech/obtservices 0.0.22042501 → 0.0.22051001

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 (165) hide show
  1. package/angular/fetchers.d.ts +8 -0
  2. package/angular/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +7 -0
  9. package/angular/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +7 -0
  10. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  11. package/angular/lib/vendor/services/search.service.d.ts +10 -3
  12. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  13. package/angular/lib/vendor/services/user.service.d.ts +5 -3
  14. package/angular/lib/vendor/types/graphql.angular.types.d.ts +438 -16
  15. package/angular/lib/vendor/updaters/edit-user.updater.d.ts +6 -0
  16. package/angular/lib/vendor/updaters/set-user-language-updater.d.ts +6 -0
  17. package/angular/sabstravtech-obtservices-angular.d.ts +16 -13
  18. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  19. package/angular/services.d.ts +1 -0
  20. package/base/fetchers.d.ts +10 -0
  21. package/base/interfaces.d.ts +2 -0
  22. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
  23. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  24. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +8 -2
  25. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +57 -0
  26. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
  27. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +3 -1
  28. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +27 -7
  29. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
  30. package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
  31. package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
  32. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
  33. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
  34. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +23 -0
  35. package/base/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +20 -0
  36. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  37. package/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +20 -0
  38. package/base/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +20 -0
  39. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  40. package/base/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +20 -0
  41. package/base/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +21 -0
  42. package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -3
  43. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  44. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  45. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
  46. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
  47. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +26 -0
  48. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
  49. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
  50. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -3
  51. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  52. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  53. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
  54. package/base/lib/vendor/interfaces/Isearch.service.d.ts +7 -1
  55. package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
  56. package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +2 -0
  57. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  58. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  59. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  60. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  61. package/base/lib/vendor/models/traveller.object.d.ts +1 -0
  62. package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
  63. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  64. package/base/lib/vendor/services/search.service.d.ts +30 -5
  65. package/base/lib/vendor/services/user.service.d.ts +12 -5
  66. package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
  67. package/base/lib/vendor/types/graphql.types.d.ts +398 -16
  68. package/base/lib/vendor/types/types.d.ts +53 -16
  69. package/base/lib/vendor/updaters/edit-user-updater.d.ts +19 -0
  70. package/base/lib/vendor/updaters/set-user-language-updater.d.ts +19 -0
  71. package/base/sabstravtech-obtservices-base.d.ts +5 -5
  72. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  73. package/base/services.d.ts +1 -0
  74. package/base/updaters.d.ts +2 -0
  75. package/bundles/sabstravtech-obtservices-angular.umd.js +499 -91
  76. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  77. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  78. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  79. package/bundles/sabstravtech-obtservices-base.umd.js +3204 -176
  80. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  81. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  82. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  83. package/esm2015/angular/fetchers.js +9 -1
  84. package/esm2015/angular/lib/vendor/fetchers/fast-track-quote.fetcher.js +25 -0
  85. package/esm2015/angular/lib/vendor/fetchers/get-all-airlines.fetcher.js +25 -0
  86. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  87. package/esm2015/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +25 -0
  88. package/esm2015/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/fetchers/get-rail-providers.fetcher.js +25 -0
  91. package/esm2015/angular/lib/vendor/fetchers/send-offline-notification.fetcher.js +25 -0
  92. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  93. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  94. package/esm2015/angular/lib/vendor/services/search.service.js +58 -37
  95. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  96. package/esm2015/angular/lib/vendor/services/user.service.js +12 -6
  97. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +583 -5
  98. package/esm2015/angular/lib/vendor/updaters/edit-user.updater.js +22 -0
  99. package/esm2015/angular/lib/vendor/updaters/set-user-language-updater.js +22 -0
  100. package/esm2015/angular/obtservices.module.js +3 -1
  101. package/esm2015/angular/sabstravtech-obtservices-angular.js +17 -14
  102. package/esm2015/angular/services.js +2 -1
  103. package/esm2015/base/fetchers.js +11 -1
  104. package/esm2015/base/interfaces.js +3 -1
  105. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
  106. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
  107. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +46 -16
  108. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +77 -10
  109. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +296 -0
  110. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
  111. package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
  112. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +58 -19
  113. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +214 -25
  114. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
  115. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
  116. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
  117. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
  118. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
  119. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
  120. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +11 -0
  121. package/esm2015/base/lib/vendor/fetchers/get-all-airlines.fetcher.js +11 -0
  122. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  123. package/esm2015/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +11 -0
  124. package/esm2015/base/lib/vendor/fetchers/get-hotel-chains.fetcher.js +11 -0
  125. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  126. package/esm2015/base/lib/vendor/fetchers/get-rail-providers.fetcher.js +11 -0
  127. package/esm2015/base/lib/vendor/fetchers/send-offline-notification.fetcher.js +11 -0
  128. package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +1 -1
  129. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  130. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  131. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +2 -0
  134. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  135. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  144. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  147. package/esm2015/base/lib/vendor/models/traveller.object.js +3 -2
  148. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
  149. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  150. package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
  151. package/esm2015/base/lib/vendor/services/search.service.js +166 -20
  152. package/esm2015/base/lib/vendor/services/user.service.js +44 -6
  153. package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
  154. package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
  155. package/esm2015/base/lib/vendor/types/types.js +1704 -1
  156. package/esm2015/base/lib/vendor/updaters/edit-user-updater.js +11 -0
  157. package/esm2015/base/lib/vendor/updaters/set-user-language-updater.js +11 -0
  158. package/esm2015/base/sabstravtech-obtservices-base.js +6 -5
  159. package/esm2015/base/services.js +2 -1
  160. package/esm2015/base/updaters.js +3 -1
  161. package/fesm2015/sabstravtech-obtservices-angular.js +790 -19
  162. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  163. package/fesm2015/sabstravtech-obtservices-base.js +3041 -169
  164. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  165. package/package.json +1 -1
@@ -1168,7 +1168,7 @@ export class BaseHelperRoutines {
1168
1168
  : arrivalTimeReturn;
1169
1169
  (result1.inboundFlights || []).forEach(updateFlightItems);
1170
1170
  indexedFlight(result1.inboundFlights, 'depatureReturnAirport', 'originAirport', 'originAirportName', 0);
1171
- indexedFlight(result1.inboundFlights, 'arrivalReturnAirport', 'destinationAirport', 'destinationAirportName', result1.outboundFlights.length - 1);
1171
+ indexedFlight(result1.inboundFlights, 'arrivalReturnAirport', 'destinationAirport', 'destinationAirportName', result1.inboundFlights.length - 1);
1172
1172
  }
1173
1173
  return filters;
1174
1174
  }, this.clone(defaultFilters));
@@ -1273,6 +1273,10 @@ export class BaseHelperRoutines {
1273
1273
  fare1.unavailable = rule.unavailable;
1274
1274
  fare1.unavailableMessage = rule.unavailableMessage;
1275
1275
  }
1276
+ if (isSet(rule === null || rule === void 0 ? void 0 : rule.requiresReason)) {
1277
+ fare1.requiresReason = rule.requiresReason;
1278
+ fare1.requiresReasonMessage = rule.requiresReasonMessage;
1279
+ }
1276
1280
  return fare1;
1277
1281
  }, fare);
1278
1282
  }
@@ -1380,4 +1384,4 @@ __decorate([
1380
1384
  function isSet(obj) {
1381
1385
  return obj !== undefined && obj !== null;
1382
1386
  }
1383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDakQsQ0FBQztJ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QUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwcyxcclxuICBNYWluRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBTY2hlbWEsXHJcbiAgVW5wYWNrZWRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWlycG9ydCxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJ1bGVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTiA9IDE2MDk7XHJcbmNvbnN0IFRJTUVfQkFTRSA9IDYwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgR1JBUEhRTF9EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyA9ICdZWVlZTU1ERCc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUID0gJ0hIbW0nO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XHJcbiAgc3RhdGljIE1NRERZWV9EQVRFID0gJ0RETU1ZWVlZJztcclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtW2tleV0pIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIG1pbjogTnVtYmVyKGl0ZW1ba2V5XSkgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XHJcbiAgICApLml0ZW07XHJcbiAgfVxyXG5cclxuICBqb2luQnlDb21tYSguLi5hdHRyaWJ1dGVzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcclxuICAgICAgICBpZiAoXy5pc0VtcHR5KGF0dHIpKSB7XHJcbiAgICAgICAgICBhY2MgKz0gYXR0ciArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgJycpXHJcbiAgICAgIC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhLmluY2x1ZGVzKGIpIHx8IGIuaW5jbHVkZXMoYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIG11dHVhbGx5IGNvbXBhcmUgdW5kZWZpbmVkIHZhcmlhYmxlLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAucG9wKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1lZTU1ERChkYXRlOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnl5eXltbWRkVGltZVRvTW9tZW50KGRhdGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZUNvbG9uKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVRfQ09MT04pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEdyYXBoUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZEluT2JqZWN0KFxyXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcclxuICAgIHZhbHVlOiBhbnlcclxuICApOiBhbnkge1xyXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBvYmogPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dID0gb2JqW2ZpZWxkc1swXV0gfHwgW107XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dLnB1c2godmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGZpZWxkc1swXTtcclxuICAgICAgb2JqW2ZpZWxkXSA9IHRoaXMuc2V0RmllbGRJbk9iamVjdChvYmpbZmllbGRdLCBmaWVsZHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb09iamVjdEFycmF5PFxyXG4gICAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBRIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gID4oYXJyYXk6IFRbXSwgZmllbGRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBRIHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcclxuICAgICAgICAgIChhY2N1bTogc3RyaW5nW10sIGZpZWxkOiBrZXlvZiBUIHwgKGtleW9mIFQpW10pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICAgICAgPyBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAubWFwKChrZXk6IGtleW9mIFQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZylcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmZpZWxkRnJvbU9iamVjdChjb25maWdJdGVtLCBmaWVsZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW0gJiYgZmV0Y2hWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGFjY3VtLnB1c2goZmV0Y2hWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRJbk9iamVjdChjb25maWdzLCBmaWVsZFZhbHVlcywgY29uZmlnSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBhaXJwb3J0LnRlcm1pbmFscztcclxuICB9XHJcblxyXG4gIGZpZWxkRnJvbU9iamVjdDxUPihvYmo6IG9iamVjdCwgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShmaWVsZHMpID8gZmllbGRzIDogKGZpZWxkcyB8fCAnJykuc3BsaXQoJy4nKSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9LFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09ICdudWxsJykgfHxcclxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIChhY2N1bSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIGN1cnJlbnRWYWx1ZTogVHJhdmVsbGVyLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxyXG4gICAgICAgICAgICA/IFtjdXJyZW50VmFsdWUuaWRdXHJcbiAgICAgICAgICAgIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9vcCBvdmVyIHRoZSBxdWVyeSBvYmplY3QgcGFyYW0gYW5kIGNvbnZlcnQgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgdG8gZGF0ZS10aW1lIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gcXVlcnlcclxuICAgKiBAcGFyYW0gZGVidWdcclxuICAgKi9cclxuICBzYW5pdGl6ZU1vbWVudERhdGVzKHF1ZXJ5OiBhbnksIGRlYnVnID0gZmFsc2UpOiBhbnkge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWRRdWVyeSkpIHtcclxuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcclxuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJy0tIHNhbml0aXplTW9tZW50RGF0ZXMoKSBjYWxsZWQgLS0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsIHF1ZXJ5OiAnLCBxdWVyeSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW5pdGl6ZWRRdWVyeTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nczxUPih0b0Zvcm1hdDogVCwgc2NoZW1hOiBTY2hlbWEpOiBUIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudFZhbHVlOiBULCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFNjaGVtYV0pOiBUID0+IHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2Zvcm1hdFZhbHVlKFxyXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgaXNSZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxyXG4gICAgICAgIGNvbnN0IHRtcCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgIGNvbnN0IHRtcDEgPSB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudG9TdHJpbmdzKHZhbHVlLCBzY2hlbWEpIDogaXNSZXF1aXJlZCA/IHt9IDogbnVsbDtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgLy8gVE9ETyB3cml0ZSBhcnJheSB0cmFuc2xhdGlvblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChzdGFydCwgJ2hvdXInKTtcclxuICAgIGNvbnN0IGVuZFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChlbmQsICdob3VyJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGltZShzdGFydFRpbWUpICsgJy0nICsgdGhpcy5mb3JtYXRUaW1lKGVuZFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgaW5SYW5nZSh0b2NoZWNrOiBudW1iZXIsIHJhbmdlOiBNaW5NYXgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcclxuICB9XHJcblxyXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XHJcbiAgICByZXR1cm4gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcclxuICAgICAgICBwYXNzZW5nZXJUeXBlOiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkNoaWxkXHJcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxyXG4gICAgICAgICAgOiBQYXNzZW5nZXJUeXBlLkFkdWx0XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VNb21lbnREYXlUaW1lKGFkZERheT86IG51bWJlciwgaGg/OiBudW1iZXIsIG0/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGR0ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKGFkZERheSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LmFkZChhZGREYXksICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdtaW51dGVzJywgbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgc2FuYXRpemVSZXR1cm5zPFQ+KFxyXG4gICAgZGVmYXVsdHM6IFQsXHJcbiAgICBzdXBwbGllZERhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXVxyXG4gICk6IFQge1xyXG4gICAgY29uc3QgY29tYmluZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc3VwcGxpZWREYXRhKTtcclxuICAgIHJldHVybiAobW9tZW50RmllbGRzIHx8IFtdKS5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IGtleW9mIFQpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xyXG4gICAgICAoY3VycmVudCBhcyBhbnkpW25leHRdID0gIXZhbHVlXHJcbiAgICAgICAgPyBtb21lbnQoKVxyXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKVxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSwgY29tYmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbWlJc1ZhbGlkKHRvQ2hlY2s6IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0b0NoZWNrLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gbWlJdGVtLmlzVmFsaWQoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01pVmFsaWQoXHJcbiAgICBtaVBlckl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxyXG4gICAgbWlQZXJVc2VyOiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyTWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlclVzZXIgfHwge30pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5taUlzVmFsaWQobWlQZXJJdGVtKSAmJlxyXG4gICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAhIXVzZXJNaXMuZmluZChcclxuICAgICAgICAgICh1c2VyTWlzMTogeyBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKG5lZWRzVG9WaWV3TWkgfHxcclxuICAgICAgICAhYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMuZmluZChcclxuICAgICAgICAgIChtaURldGFpbDogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTWlWYWxpZChtaURldGFpbC5taVBlckl0ZW0sIG1pRGV0YWlsLm1pUGVyVXNlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzZXJ2aWNlcykucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBjdXJyZW50IHx8XHJcbiAgICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZTIuaWQgPT09IGlkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBudWxsIGFzIFNlcnZpY2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhbGxUcnVlKFxyXG4gICAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdLFxyXG4gICAgZmlsdGVyOiAoc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSkgPT4gYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHN1cHBJbmZvLmZpbHRlcihmaWx0ZXIpLmxlbmd0aCA9PT0gc3VwcEluZm8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgam9pbkZyb21BdHRyaWJ1dGU8VD4oXHJcbiAgICBqb2luQ2hhcmFjdGVyOiBzdHJpbmcsXHJcbiAgICBhdHRyaWJ1dGU6IGtleW9mIFQsXHJcbiAgICBhcnJheTogVFtdXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoKGl0ZW06IFQpID0+IGl0ZW1bYXR0cmlidXRlXSkuam9pbihqb2luQ2hhcmFjdGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IHVwIGFuIGFycmF5IGludG8gZXF1YWwgcGFydHNcclxuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcclxuICAgKiBAcGFyYW0gc2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBjb25zdGl0dWFudCBwYXJ0c1xyXG4gICAqIEBwYXJhbSBpbmNsdWRlUmVtYWluZGVyIC0gd2V0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGFueSByZW1haW5nIHJlc3VsdHMgLSBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzcGxpdFVwQXJyYXkoXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBzaXplOiBudW1iZXIsXHJcbiAgICBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IGFueVtdIHtcclxuICAgIGNvbnN0IGFycmF5Q29weSA9IF8uY2xvbmVEZWVwKGFycmF5KTsgLy8gbG9kYXNoIGNsb25lIGRlZXBcclxuICAgIGxldCBuZXdBcnJheSA9IFtdO1xyXG5cclxuICAgIGlmIChhcnJheUNvcHkubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICB3aGlsZSAoYXJyYXlDb3B5Lmxlbmd0aCA+PSBzaXplKSB7XHJcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcclxuICAgICAgaWYgKGFycmF5Q29weS5sZW5ndGggJiYgaW5jbHVkZVJlbWFpbmRlcikge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3QXJyYXkgPSBhcnJheUNvcHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBtb21lbnQoZGVwRGF0ZVRpbWUpLmRpZmYobW9tZW50KGFyckRhdGVUaW1lKSwgJ21pbnV0ZXMnKTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZGF5RGlmZmVyZW5jZShkZXB0OiBzdHJpbmcsIGFycjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKVxyXG4gICAgICAuc3RhcnRPZignZGF5JylcclxuICAgICAgLmRpZmYobW9tZW50KGRlcHQpLnN0YXJ0T2YoJ2RheScpLCAnZGF5Jyk7XHJcbiAgICByZXR1cm4gZGlmZiA+IDAgPyBkaWZmLnRvU3RyaW5nKCkgOiAnJztcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID1cclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XHJcbiAgICBjb25zdCBydWxlcyA9IGZsaWdodHMucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICBjdXJyZW50LmNhbmNlbGxhdGlvbiA9IGN1cnJlbnQuY2FuY2VsbGF0aW9uLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LmNhbmNlbGxhdGlvbiB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5jaGFuZ2UgPSBjdXJyZW50LmNoYW5nZS5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQubm9TaG93ID0gY3VycmVudC5ub1Nob3cuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50LnVwZ3JhZGUgPSBjdXJyZW50LnVwZ3JhZGUuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5vdGhlciA9IGN1cnJlbnQub3RoZXIuY29uY2F0KG5leHQuZmFyZUNvbmRpdGlvbnM/Lm90aGVyIHx8IFtdKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNhbmNlbGxhdGlvbjogW10sXHJcbiAgICAgICAgY2hhbmdlOiBbXSxcclxuICAgICAgICBub1Nob3c6IFtdLFxyXG4gICAgICAgIHVwZ3JhZGU6IFtdLFxyXG4gICAgICAgIG90aGVyOiBbXVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHsgcnVsZXMsIGZsaWdodHMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVDb250ZW50cyhiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcyk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcclxuICAgICAgJ1BST0RJRDotLy9NaWNyb3MgVHJhdmVsLy9TQUJTIENvcnBvcmF0ZSAtIE1NWElJSS8vRU5cXHJcXG4nLFxyXG4gICAgICAnVkVSU0lPTjoyLjBcXHJcXG4nLFxyXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxyXG4gICAgICBpY3NCb2R5Q29udGVudCxcclxuICAgICAgJ0VORDpWQ0FMRU5EQVJcXHJcXG4nXHJcbiAgICBdLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBnZW5lcmF0ZXMgaWNzIGZpbGUgYm9keSBjb250ZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBiYXNrZXRJdGVtcyBwYXJhbVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYm9keUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gZ2VuZXJhdGUgY2FsZW5kYXIgZGF0YSBmb3IgZWFjaCBiYXNrZXQgaXRlbVxyXG4gICAgYmFza2V0SXRlbXMubWFwKChiYXNrZXRJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIGRTdGFydDogJycsXHJcbiAgICAgICAgZEVuZDogJycsXHJcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcclxuICAgICAgICBsb2NhdGlvblRvOiAnJyxcclxuICAgICAgICBiYXNrZXRJZDogJycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcclxuICAgICAgICBzdW1tYXJ5OiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ0REIE1NTU0gWVlZWSBISDptbSc7XHJcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xyXG4gICAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIGJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlLCBkZXRhaWwsIHNlcnZpY2UgfSA9XHJcbiAgICAgICAgYmFza2V0SXRlbTtcclxuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxyXFxuYCxcclxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5kZXBhcnRzO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwudG9Mb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRyb3BPZmZEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBDYXIgYm9va2luZyAtIGZyb20gJHtkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5waWNrVXBEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsIFBvaW50OiAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcclxuICAgICAgICAgICAgKGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkZhc3RUcmFjazpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEZsaWdodCBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH0gdG8gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGVzdGluYXRpb25BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmU6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5jaGVja0luO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5jaGVja091dDtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEhvdGVsOiAke2RldGFpbC5ob3RlbE5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWw6ICR7bW9tZW50KGRldGFpbC5jaGVja0luKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZTogJHttb21lbnQoZGV0YWlsLmNoZWNrT3V0KS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbyAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uZGVwYXJ0RGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQWlycG9ydCBwYXJraW5nIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEFpcnBvcnQgUGFya2luZzogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYm9keUNvbnRlbnQucHVzaChcclxuICAgICAgICBbXHJcbiAgICAgICAgICAnQkVHSU46VkVWRU5UXFxyXFxuJyxcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0XHJcbiAgICAgICAgICAgID8gYERUU1RBUlQ6JHttb21lbnQoZGF0YS5kU3RhcnQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgZGF0YS5kRW5kXHJcbiAgICAgICAgICAgID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnT1JHQU5JWkVSO0NOPVwiRG8gbm90IHJlcGx5IHRvIHRoaXMgZW1haWxcIjptYWlsdG86ZG9fbm90X3JlcGx5QHNhYnNjb3JwLmNvbVxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gJiYgZGF0YS5sb2NhdGlvbkZyb21cclxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnVFJBTlNQOk9QQVFVRVxcclxcbicsXHJcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXHJcbiAgICAgICAgICBgVUlEOiR7ZGF0YS5zZXJ2aWNlVHlwZX1fJHtpbmRleH1fJHtkYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxyXG4gICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXHJcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXHJcbiAgICAgICAgICBgU1VNTUFSWToke2RhdGEuc3VtbWFyeX1cXHJcXG5gLFxyXG4gICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXHJcbiAgICAgICAgXS5qb2luKCcnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBjcmVhdGVzIGFuIGVsZW1lbnQgaW4gbWVtb3J5IGFuZCB0cmlnZ2VycyBjbGljayBldmVudCB0byBkb3dubG9hZCBpY3MgZmlsZVxyXG4gICAqL1xyXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXHJcbiAgICApO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IGEgc3RyaW5nIG9uIGNhcGl0YWxzXHJcbiAgICogQHBhcmFtIHJhd1N0cmluZyAtIHRoZSBzdHJpbmcgd2Ugd2FudCB0byBzcGxpdFxyXG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcclxuICAgKiBAcmV0dXJucyBzdHJpbmcvc3RyaW5nW11cclxuICAgKi9cclxuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMoXHJcbiAgICByYXdTdHJpbmc6IHN0cmluZyxcclxuICAgIGpvaW46IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHNwbGl0U3RyaW5nID0gcmF3U3RyaW5nLnNwbGl0KC8oPz1bQS1aXSkvKTtcclxuXHJcbiAgICBpZiAoam9pbikge1xyXG4gICAgICByZXR1cm4gc3BsaXRTdHJpbmcuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcGxpdFN0cmluZztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICBqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVyc1xyXG4gICk6IEZsaWdodEZpbHRlcnMge1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHJlc3VsdDE6IEZsaWdodEl0aW5lcmFyeSk6IEZsaWdodEZpbHRlcnMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG91dFN0b3BzID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzW291dFN0b3BzXSA9IGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIG91dFN0b3BzID09PSAwXHJcbiAgICAgICAgICAgICAgPyAnRGlyZWN0J1xyXG4gICAgICAgICAgICAgIDogYCR7b3V0U3RvcHN9IHN0b3BgICsgKG91dFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IG91dFN0b3BzICsgMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGluU3RvcHMgPSByZXN1bHQxLmluYm91bmRGbGlnaHRzXHJcbiAgICAgICAgICA/IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBpblN0b3BzID4gb3V0U3RvcHMgPyBpblN0b3BzIDogb3V0U3RvcHM7XHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdID0gZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHRvdGFsU3RvcHMgPT09IDBcclxuICAgICAgICAgICAgICA/ICdEaXJlY3QnXHJcbiAgICAgICAgICAgICAgOiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlRmxpZ2h0SXRlbXMgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW1xyXG4gICAgICAgICAgICBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tcclxuICAgICAgICAgICAgZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IHJlc3VsdDEuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSA9IGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSB8fCB7XHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHtiYWdnYWdlfSBiYWcke2JhZ2dhZ2UgPiAxID8gJ3MnIDogJyd9YCxcclxuICAgICAgICAgIHZhbHVlOiBiYWdnYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxyXG4gICAgICAgICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZU5hbWU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBmbGlnaHRzICYmIGZsaWdodHNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgPyBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAodGVtcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSA9IGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSB8fCB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV0sXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlTmFtZV0sXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPCByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA+IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluIDwgcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0VGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW4gPCByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID4gcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVwYXJ0VGltZVJldHVybiA9XHJcbiAgICAgICAgICAgIHJlc3VsdDEgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdXHJcbiAgICAgICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcclxuICAgICAgICAgICAgICA6IC0xO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pblxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhcnJpdmFsVGltZVJldHVybiA9IG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdkZXBhdHVyZVJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVycztcclxuICAgICAgfSxcclxuICAgICAgdGhpcy5jbG9uZShkZWZhdWx0RmlsdGVycylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBPdmVyT2JqZWN0PFY+KFxyXG4gICAgaXRlbXM6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LFxyXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5Pzogc3RyaW5nIHwgbnVtYmVyKSA9PiBWXHJcbiAgKTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGl0ZW1zKS5yZWR1Y2UoXHJcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sIGVudHJpZXM6IFtzdHJpbmcgfCBudW1iZXIsIFZdKSA9PiB7XHJcbiAgICAgICAgYWNjdW1bZW50cmllc1swXV0gPSBjYWxsYmFjayhlbnRyaWVzWzFdLCBlbnRyaWVzWzBdKTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXNlTWludXRlVG9CYXNlMTAobWluOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKG1pbiAqIDEwMCkgLyA2MCk7XHJcbiAgfVxyXG5cclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IE9CVEZsaWdodENhYmluQ2xhc3NcclxuICApOiBNYWluRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzOiBSZWNvcmQ8XHJcbiAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgICAgIE1haW5GbGlnaHRDYWJpbkNsYXNzXHJcbiAgICA+ID0ge1xyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlcclxuICAgIH07XHJcbiAgICByZXR1cm4gT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzc1t2YWx1ZV07XHJcbiAgfVxyXG4gIEZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IEZsaWdodEdyb3VwcyxcclxuICAgIGlzQnJhbmRlZDogYm9vbGVhblxyXG4gICk6IE9CVEZsaWdodENhYmluQ2xhc3Mge1xyXG4gICAgY29uc3QgdHlwZXM6IFJlY29yZDxGbGlnaHRHcm91cHMsIE9CVEZsaWdodENhYmluQ2xhc3M+ID0gaXNCcmFuZGVkXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHtcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RcclxuICAgICAgICB9O1xyXG4gICAgcmV0dXJuIHR5cGVzW3ZhbHVlXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgZnJvbSBtZXRyZXMgdG8gbWlsZXNcclxuICAgKiBAcGFyYW0gbWV0cmVzIC0gdGhlIGFtb3VudCBvZiBtZXRyZXMgdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRNZXRyZXNUb01pbGVzKG1ldHJlczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtaWxlcyA9IG1ldHJlcyAvIE1FVFJFU19UT19NSUxFU19DT05WRVJTSU9OO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihtaWxlcy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWlsZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gaG91cnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9Ib3VycyhzZWNvbmRzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRSAvIFRJTUVfQkFTRTtcclxuXHJcbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBzZWNvbmRzIHRvIG1pbnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9NaW5zKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICBhZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBydWxlczogUnVsZXNbXVxyXG4gICk6IE9CVFJhaWxKb3VybmV5RmFyZSB7XHJcbiAgICByZXR1cm4gcnVsZXMucmVkdWNlKChmYXJlMTogT0JUUmFpbEpvdXJuZXlGYXJlLCBydWxlOiBSdWxlcykgPT4ge1xyXG4gICAgICBpZiAoaXNTZXQocnVsZT8udW5hdmFpbGFibGUpKSB7XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGUgPSBydWxlLnVuYXZhaWxhYmxlIGFzIGJvb2xlYW47XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGVNZXNzYWdlID0gcnVsZS51bmF2YWlsYWJsZU1lc3NhZ2UgYXMgc3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYXJlMTtcclxuICAgIH0sIGZhcmUpO1xyXG4gIH1cclxuXHJcbiAgbWFwPFQ+KG9iajogUmVjb3JkPHN0cmluZywgVD4sIGZ1bmM6IChuZXh0OiBUKSA9PiBUKTogUmVjb3JkPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHt9LFxyXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBUXSk6IFJlY29yZDxcclxuICAgICAgICBzdHJpbmcsXHJcbiAgICAgICAgVFxyXG4gICAgICA+ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgW2tleV06IGZ1bmModmFsdWUpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtZXJnZU9iamVjdHM8VD4oLi4ub2JqczogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gb2Jqcy5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IFQpID0+IHtcclxuICAgICAgcmV0dXJuIF8ubWVyZ2UoY3VycmVudCwgbmV4dCkgYXMgVDtcclxuICAgIH0sIHt9IGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJjZXB0TWV0aG9kQ2FsbHM8VCBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBvYmo6IFQsXHJcbiAgICBmbjogKHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgYXJnOiBhbnlbXSkgPT4gYW55XHJcbiAgKTogVCB7XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xyXG4gICAgICBnZXQodGFyZ2V0OiBhbnksIHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldFtwcm9wXSwge1xyXG4gICAgICAgICAgICBhcHBseTogKHRhcmdldDEsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpID0+IHtcclxuICAgICAgICAgICAgICBmbihwcm9wLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkgYXMgdW5rbm93biBhcyBUO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmV2aW91cyBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSBtaW5zIC0gcmV0dXJuIDE1XHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkRG93blF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSA0NSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCA0NSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJvdW5kZWQgdXAgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgLSByZXR1cm4gMzBcclxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgLSBkYXRlL3RpbWUgaW4gbW9tZW50IGZvcm1hdFxyXG4gICAqIEByZXR1cm5zIG1vbWVudFxyXG4gICAqL1xyXG4gIGdldFJvdW5kZWRVcFF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMCk7XHJcbiAgICAgIGRhdGVUaW1lLmFkZCgxLCAnaG91cicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2V0KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcclxufVxyXG4iXX0=
1387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDakQsQ0FBQztJ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QU8sQ0FBQztBQUM1Qiw4QkFBVyxHQUFHLFVBQVUsQ0FBQztBQXkvQmhDO0lBREMsUUFBUSxFQUFFOzs7OzJEQUdWO0FBR0Q7SUFEQyxRQUFRLEVBQUU7Ozs7dURBTVY7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFnQ1Y7QUF3cEJILFNBQVMsS0FBSyxDQUFDLEdBQVE7SUFDckIsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwcyxcclxuICBNYWluRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBTY2hlbWEsXHJcbiAgVW5wYWNrZWRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWlycG9ydCxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJ1bGVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTiA9IDE2MDk7XHJcbmNvbnN0IFRJTUVfQkFTRSA9IDYwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgR1JBUEhRTF9EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyA9ICdZWVlZTU1ERCc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUID0gJ0hIbW0nO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XHJcbiAgc3RhdGljIE1NRERZWV9EQVRFID0gJ0RETU1ZWVlZJztcclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtW2tleV0pIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIG1pbjogTnVtYmVyKGl0ZW1ba2V5XSkgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XHJcbiAgICApLml0ZW07XHJcbiAgfVxyXG5cclxuICBqb2luQnlDb21tYSguLi5hdHRyaWJ1dGVzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcclxuICAgICAgICBpZiAoXy5pc0VtcHR5KGF0dHIpKSB7XHJcbiAgICAgICAgICBhY2MgKz0gYXR0ciArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgJycpXHJcbiAgICAgIC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhLmluY2x1ZGVzKGIpIHx8IGIuaW5jbHVkZXMoYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIG11dHVhbGx5IGNvbXBhcmUgdW5kZWZpbmVkIHZhcmlhYmxlLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAucG9wKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1lZTU1ERChkYXRlOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnl5eXltbWRkVGltZVRvTW9tZW50KGRhdGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZUNvbG9uKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVRfQ09MT04pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEdyYXBoUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZEluT2JqZWN0KFxyXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcclxuICAgIHZhbHVlOiBhbnlcclxuICApOiBhbnkge1xyXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBvYmogPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dID0gb2JqW2ZpZWxkc1swXV0gfHwgW107XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dLnB1c2godmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGZpZWxkc1swXTtcclxuICAgICAgb2JqW2ZpZWxkXSA9IHRoaXMuc2V0RmllbGRJbk9iamVjdChvYmpbZmllbGRdLCBmaWVsZHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb09iamVjdEFycmF5PFxyXG4gICAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBRIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gID4oYXJyYXk6IFRbXSwgZmllbGRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBRIHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcclxuICAgICAgICAgIChhY2N1bTogc3RyaW5nW10sIGZpZWxkOiBrZXlvZiBUIHwgKGtleW9mIFQpW10pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICAgICAgPyBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAubWFwKChrZXk6IGtleW9mIFQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZylcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmZpZWxkRnJvbU9iamVjdChjb25maWdJdGVtLCBmaWVsZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW0gJiYgZmV0Y2hWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGFjY3VtLnB1c2goZmV0Y2hWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRJbk9iamVjdChjb25maWdzLCBmaWVsZFZhbHVlcywgY29uZmlnSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBhaXJwb3J0LnRlcm1pbmFscztcclxuICB9XHJcblxyXG4gIGZpZWxkRnJvbU9iamVjdDxUPihvYmo6IG9iamVjdCwgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShmaWVsZHMpID8gZmllbGRzIDogKGZpZWxkcyB8fCAnJykuc3BsaXQoJy4nKSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9LFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09ICdudWxsJykgfHxcclxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIChhY2N1bSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIGN1cnJlbnRWYWx1ZTogVHJhdmVsbGVyLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxyXG4gICAgICAgICAgICA/IFtjdXJyZW50VmFsdWUuaWRdXHJcbiAgICAgICAgICAgIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9vcCBvdmVyIHRoZSBxdWVyeSBvYmplY3QgcGFyYW0gYW5kIGNvbnZlcnQgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgdG8gZGF0ZS10aW1lIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gcXVlcnlcclxuICAgKiBAcGFyYW0gZGVidWdcclxuICAgKi9cclxuICBzYW5pdGl6ZU1vbWVudERhdGVzKHF1ZXJ5OiBhbnksIGRlYnVnID0gZmFsc2UpOiBhbnkge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWRRdWVyeSkpIHtcclxuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcclxuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJy0tIHNhbml0aXplTW9tZW50RGF0ZXMoKSBjYWxsZWQgLS0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsIHF1ZXJ5OiAnLCBxdWVyeSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW5pdGl6ZWRRdWVyeTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nczxUPih0b0Zvcm1hdDogVCwgc2NoZW1hOiBTY2hlbWEpOiBUIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudFZhbHVlOiBULCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFNjaGVtYV0pOiBUID0+IHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2Zvcm1hdFZhbHVlKFxyXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgaXNSZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxyXG4gICAgICAgIGNvbnN0IHRtcCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgIGNvbnN0IHRtcDEgPSB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudG9TdHJpbmdzKHZhbHVlLCBzY2hlbWEpIDogaXNSZXF1aXJlZCA/IHt9IDogbnVsbDtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgLy8gVE9ETyB3cml0ZSBhcnJheSB0cmFuc2xhdGlvblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChzdGFydCwgJ2hvdXInKTtcclxuICAgIGNvbnN0IGVuZFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChlbmQsICdob3VyJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGltZShzdGFydFRpbWUpICsgJy0nICsgdGhpcy5mb3JtYXRUaW1lKGVuZFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgaW5SYW5nZSh0b2NoZWNrOiBudW1iZXIsIHJhbmdlOiBNaW5NYXgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcclxuICB9XHJcblxyXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XHJcbiAgICByZXR1cm4gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcclxuICAgICAgICBwYXNzZW5nZXJUeXBlOiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkNoaWxkXHJcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxyXG4gICAgICAgICAgOiBQYXNzZW5nZXJUeXBlLkFkdWx0XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VNb21lbnREYXlUaW1lKGFkZERheT86IG51bWJlciwgaGg/OiBudW1iZXIsIG0/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGR0ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKGFkZERheSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LmFkZChhZGREYXksICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdtaW51dGVzJywgbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgc2FuYXRpemVSZXR1cm5zPFQ+KFxyXG4gICAgZGVmYXVsdHM6IFQsXHJcbiAgICBzdXBwbGllZERhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXVxyXG4gICk6IFQge1xyXG4gICAgY29uc3QgY29tYmluZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc3VwcGxpZWREYXRhKTtcclxuICAgIHJldHVybiAobW9tZW50RmllbGRzIHx8IFtdKS5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IGtleW9mIFQpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xyXG4gICAgICAoY3VycmVudCBhcyBhbnkpW25leHRdID0gIXZhbHVlXHJcbiAgICAgICAgPyBtb21lbnQoKVxyXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKVxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSwgY29tYmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbWlJc1ZhbGlkKHRvQ2hlY2s6IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0b0NoZWNrLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gbWlJdGVtLmlzVmFsaWQoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01pVmFsaWQoXHJcbiAgICBtaVBlckl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxyXG4gICAgbWlQZXJVc2VyOiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyTWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlclVzZXIgfHwge30pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5taUlzVmFsaWQobWlQZXJJdGVtKSAmJlxyXG4gICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAhIXVzZXJNaXMuZmluZChcclxuICAgICAgICAgICh1c2VyTWlzMTogeyBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKG5lZWRzVG9WaWV3TWkgfHxcclxuICAgICAgICAhYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMuZmluZChcclxuICAgICAgICAgIChtaURldGFpbDogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTWlWYWxpZChtaURldGFpbC5taVBlckl0ZW0sIG1pRGV0YWlsLm1pUGVyVXNlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzZXJ2aWNlcykucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBjdXJyZW50IHx8XHJcbiAgICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZTIuaWQgPT09IGlkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBudWxsIGFzIFNlcnZpY2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhbGxUcnVlKFxyXG4gICAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdLFxyXG4gICAgZmlsdGVyOiAoc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSkgPT4gYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHN1cHBJbmZvLmZpbHRlcihmaWx0ZXIpLmxlbmd0aCA9PT0gc3VwcEluZm8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgam9pbkZyb21BdHRyaWJ1dGU8VD4oXHJcbiAgICBqb2luQ2hhcmFjdGVyOiBzdHJpbmcsXHJcbiAgICBhdHRyaWJ1dGU6IGtleW9mIFQsXHJcbiAgICBhcnJheTogVFtdXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoKGl0ZW06IFQpID0+IGl0ZW1bYXR0cmlidXRlXSkuam9pbihqb2luQ2hhcmFjdGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IHVwIGFuIGFycmF5IGludG8gZXF1YWwgcGFydHNcclxuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcclxuICAgKiBAcGFyYW0gc2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBjb25zdGl0dWFudCBwYXJ0c1xyXG4gICAqIEBwYXJhbSBpbmNsdWRlUmVtYWluZGVyIC0gd2V0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGFueSByZW1haW5nIHJlc3VsdHMgLSBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzcGxpdFVwQXJyYXkoXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBzaXplOiBudW1iZXIsXHJcbiAgICBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IGFueVtdIHtcclxuICAgIGNvbnN0IGFycmF5Q29weSA9IF8uY2xvbmVEZWVwKGFycmF5KTsgLy8gbG9kYXNoIGNsb25lIGRlZXBcclxuICAgIGxldCBuZXdBcnJheSA9IFtdO1xyXG5cclxuICAgIGlmIChhcnJheUNvcHkubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICB3aGlsZSAoYXJyYXlDb3B5Lmxlbmd0aCA+PSBzaXplKSB7XHJcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcclxuICAgICAgaWYgKGFycmF5Q29weS5sZW5ndGggJiYgaW5jbHVkZVJlbWFpbmRlcikge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3QXJyYXkgPSBhcnJheUNvcHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBtb21lbnQoZGVwRGF0ZVRpbWUpLmRpZmYobW9tZW50KGFyckRhdGVUaW1lKSwgJ21pbnV0ZXMnKTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZGF5RGlmZmVyZW5jZShkZXB0OiBzdHJpbmcsIGFycjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKVxyXG4gICAgICAuc3RhcnRPZignZGF5JylcclxuICAgICAgLmRpZmYobW9tZW50KGRlcHQpLnN0YXJ0T2YoJ2RheScpLCAnZGF5Jyk7XHJcbiAgICByZXR1cm4gZGlmZiA+IDAgPyBkaWZmLnRvU3RyaW5nKCkgOiAnJztcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID1cclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XHJcbiAgICBjb25zdCBydWxlcyA9IGZsaWdodHMucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICBjdXJyZW50LmNhbmNlbGxhdGlvbiA9IGN1cnJlbnQuY2FuY2VsbGF0aW9uLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LmNhbmNlbGxhdGlvbiB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5jaGFuZ2UgPSBjdXJyZW50LmNoYW5nZS5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQubm9TaG93ID0gY3VycmVudC5ub1Nob3cuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50LnVwZ3JhZGUgPSBjdXJyZW50LnVwZ3JhZGUuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5vdGhlciA9IGN1cnJlbnQub3RoZXIuY29uY2F0KG5leHQuZmFyZUNvbmRpdGlvbnM/Lm90aGVyIHx8IFtdKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNhbmNlbGxhdGlvbjogW10sXHJcbiAgICAgICAgY2hhbmdlOiBbXSxcclxuICAgICAgICBub1Nob3c6IFtdLFxyXG4gICAgICAgIHVwZ3JhZGU6IFtdLFxyXG4gICAgICAgIG90aGVyOiBbXVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHsgcnVsZXMsIGZsaWdodHMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVDb250ZW50cyhiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcyk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcclxuICAgICAgJ1BST0RJRDotLy9NaWNyb3MgVHJhdmVsLy9TQUJTIENvcnBvcmF0ZSAtIE1NWElJSS8vRU5cXHJcXG4nLFxyXG4gICAgICAnVkVSU0lPTjoyLjBcXHJcXG4nLFxyXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxyXG4gICAgICBpY3NCb2R5Q29udGVudCxcclxuICAgICAgJ0VORDpWQ0FMRU5EQVJcXHJcXG4nXHJcbiAgICBdLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBnZW5lcmF0ZXMgaWNzIGZpbGUgYm9keSBjb250ZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBiYXNrZXRJdGVtcyBwYXJhbVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYm9keUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gZ2VuZXJhdGUgY2FsZW5kYXIgZGF0YSBmb3IgZWFjaCBiYXNrZXQgaXRlbVxyXG4gICAgYmFza2V0SXRlbXMubWFwKChiYXNrZXRJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIGRTdGFydDogJycsXHJcbiAgICAgICAgZEVuZDogJycsXHJcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcclxuICAgICAgICBsb2NhdGlvblRvOiAnJyxcclxuICAgICAgICBiYXNrZXRJZDogJycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcclxuICAgICAgICBzdW1tYXJ5OiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ0REIE1NTU0gWVlZWSBISDptbSc7XHJcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xyXG4gICAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIGJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlLCBkZXRhaWwsIHNlcnZpY2UgfSA9XHJcbiAgICAgICAgYmFza2V0SXRlbTtcclxuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxyXFxuYCxcclxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5kZXBhcnRzO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwudG9Mb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRyb3BPZmZEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBDYXIgYm9va2luZyAtIGZyb20gJHtkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5waWNrVXBEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsIFBvaW50OiAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcclxuICAgICAgICAgICAgKGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkZhc3RUcmFjazpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEZsaWdodCBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH0gdG8gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGVzdGluYXRpb25BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmU6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5jaGVja0luO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5jaGVja091dDtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEhvdGVsOiAke2RldGFpbC5ob3RlbE5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWw6ICR7bW9tZW50KGRldGFpbC5jaGVja0luKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZTogJHttb21lbnQoZGV0YWlsLmNoZWNrT3V0KS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbyAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uZGVwYXJ0RGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQWlycG9ydCBwYXJraW5nIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEFpcnBvcnQgUGFya2luZzogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYm9keUNvbnRlbnQucHVzaChcclxuICAgICAgICBbXHJcbiAgICAgICAgICAnQkVHSU46VkVWRU5UXFxyXFxuJyxcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0XHJcbiAgICAgICAgICAgID8gYERUU1RBUlQ6JHttb21lbnQoZGF0YS5kU3RhcnQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgZGF0YS5kRW5kXHJcbiAgICAgICAgICAgID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnT1JHQU5JWkVSO0NOPVwiRG8gbm90IHJlcGx5IHRvIHRoaXMgZW1haWxcIjptYWlsdG86ZG9fbm90X3JlcGx5QHNhYnNjb3JwLmNvbVxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gJiYgZGF0YS5sb2NhdGlvbkZyb21cclxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnVFJBTlNQOk9QQVFVRVxcclxcbicsXHJcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXHJcbiAgICAgICAgICBgVUlEOiR7ZGF0YS5zZXJ2aWNlVHlwZX1fJHtpbmRleH1fJHtkYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxyXG4gICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXHJcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXHJcbiAgICAgICAgICBgU1VNTUFSWToke2RhdGEuc3VtbWFyeX1cXHJcXG5gLFxyXG4gICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXHJcbiAgICAgICAgXS5qb2luKCcnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBjcmVhdGVzIGFuIGVsZW1lbnQgaW4gbWVtb3J5IGFuZCB0cmlnZ2VycyBjbGljayBldmVudCB0byBkb3dubG9hZCBpY3MgZmlsZVxyXG4gICAqL1xyXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXHJcbiAgICApO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IGEgc3RyaW5nIG9uIGNhcGl0YWxzXHJcbiAgICogQHBhcmFtIHJhd1N0cmluZyAtIHRoZSBzdHJpbmcgd2Ugd2FudCB0byBzcGxpdFxyXG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcclxuICAgKiBAcmV0dXJucyBzdHJpbmcvc3RyaW5nW11cclxuICAgKi9cclxuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMoXHJcbiAgICByYXdTdHJpbmc6IHN0cmluZyxcclxuICAgIGpvaW46IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHNwbGl0U3RyaW5nID0gcmF3U3RyaW5nLnNwbGl0KC8oPz1bQS1aXSkvKTtcclxuXHJcbiAgICBpZiAoam9pbikge1xyXG4gICAgICByZXR1cm4gc3BsaXRTdHJpbmcuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcGxpdFN0cmluZztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICBqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVyc1xyXG4gICk6IEZsaWdodEZpbHRlcnMge1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHJlc3VsdDE6IEZsaWdodEl0aW5lcmFyeSk6IEZsaWdodEZpbHRlcnMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG91dFN0b3BzID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzW291dFN0b3BzXSA9IGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIG91dFN0b3BzID09PSAwXHJcbiAgICAgICAgICAgICAgPyAnRGlyZWN0J1xyXG4gICAgICAgICAgICAgIDogYCR7b3V0U3RvcHN9IHN0b3BgICsgKG91dFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IG91dFN0b3BzICsgMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGluU3RvcHMgPSByZXN1bHQxLmluYm91bmRGbGlnaHRzXHJcbiAgICAgICAgICA/IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBpblN0b3BzID4gb3V0U3RvcHMgPyBpblN0b3BzIDogb3V0U3RvcHM7XHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdID0gZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHRvdGFsU3RvcHMgPT09IDBcclxuICAgICAgICAgICAgICA/ICdEaXJlY3QnXHJcbiAgICAgICAgICAgICAgOiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlRmxpZ2h0SXRlbXMgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW1xyXG4gICAgICAgICAgICBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tcclxuICAgICAgICAgICAgZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IHJlc3VsdDEuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSA9IGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSB8fCB7XHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHtiYWdnYWdlfSBiYWcke2JhZ2dhZ2UgPiAxID8gJ3MnIDogJyd9YCxcclxuICAgICAgICAgIHZhbHVlOiBiYWdnYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxyXG4gICAgICAgICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZU5hbWU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBmbGlnaHRzICYmIGZsaWdodHNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgPyBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAodGVtcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSA9IGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSB8fCB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV0sXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlTmFtZV0sXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPCByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA+IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluIDwgcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0VGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW4gPCByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID4gcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVwYXJ0VGltZVJldHVybiA9XHJcbiAgICAgICAgICAgIHJlc3VsdDEgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdXHJcbiAgICAgICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcclxuICAgICAgICAgICAgICA6IC0xO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pblxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhcnJpdmFsVGltZVJldHVybiA9IG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdkZXBhdHVyZVJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmNsb25lKGRlZmF1bHRGaWx0ZXJzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1hcE92ZXJPYmplY3Q8Vj4oXHJcbiAgICBpdGVtczogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sXHJcbiAgICBjYWxsYmFjazogKHZhbHVlOiBWLCBrZXk/OiBzdHJpbmcgfCBudW1iZXIpID0+IFZcclxuICApOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXMpLnJlZHVjZShcclxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiwgZW50cmllczogW3N0cmluZyB8IG51bWJlciwgVl0pID0+IHtcclxuICAgICAgICBhY2N1bVtlbnRyaWVzWzBdXSA9IGNhbGxiYWNrKGVudHJpZXNbMV0sIGVudHJpZXNbMF0pO1xyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSxcclxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpc2VNaW51dGVUb0Jhc2UxMChtaW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgobWluICogMTAwKSAvIDYwKTtcclxuICB9XHJcblxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogT0JURmxpZ2h0Q2FiaW5DbGFzc1xyXG4gICk6IE1haW5GbGlnaHRDYWJpbkNsYXNzIHtcclxuICAgIGNvbnN0IE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3M6IFJlY29yZDxcclxuICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICAgICAgTWFpbkZsaWdodENhYmluQ2xhc3NcclxuICAgID4gPSB7XHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgfTtcclxuICAgIHJldHVybiBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzW3ZhbHVlXTtcclxuICB9XHJcbiAgRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogRmxpZ2h0R3JvdXBzLFxyXG4gICAgaXNCcmFuZGVkOiBib29sZWFuXHJcbiAgKTogT0JURmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCB0eXBlczogUmVjb3JkPEZsaWdodEdyb3VwcywgT0JURmxpZ2h0Q2FiaW5DbGFzcz4gPSBpc0JyYW5kZWRcclxuICAgICAgPyB7XHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRcclxuICAgICAgICB9XHJcbiAgICAgIDoge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdFxyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gdHlwZXNbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBmcm9tIG1ldHJlcyB0byBtaWxlc1xyXG4gICAqIEBwYXJhbSBtZXRyZXMgLSB0aGUgYW1vdW50IG9mIG1ldHJlcyB0byBjb252ZXJ0XHJcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXHJcbiAgICovXHJcbiAgY29udmVydE1ldHJlc1RvTWlsZXMobWV0cmVzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1pbGVzID0gbWV0cmVzIC8gTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT047XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKG1pbGVzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtaWxlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBob3Vyc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb0hvdXJzKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gbWluc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb01pbnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBUSU1FX0JBU0U7XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGhvdXJzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBob3VycztcclxuICB9XHJcblxyXG4gIGFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIHJ1bGVzOiBSdWxlc1tdXHJcbiAgKTogT0JUUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBydWxlcy5yZWR1Y2UoKGZhcmUxOiBPQlRSYWlsSm91cm5leUZhcmUsIHJ1bGU6IFJ1bGVzKSA9PiB7XHJcbiAgICAgIGlmIChpc1NldChydWxlPy51bmF2YWlsYWJsZSkpIHtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZSA9IHJ1bGUudW5hdmFpbGFibGUgYXMgYm9vbGVhbjtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBydWxlLnVuYXZhaWxhYmxlTWVzc2FnZSBhcyBzdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnJlcXVpcmVzUmVhc29uKSkge1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uID0gcnVsZS5yZXF1aXJlc1JlYXNvbiBhcyBib29sZWFuO1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uTWVzc2FnZSA9IHJ1bGUucmVxdWlyZXNSZWFzb25NZXNzYWdlIGFzIHN0cmluZztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFyZTE7XHJcbiAgICB9LCBmYXJlKTtcclxuICB9XHJcblxyXG4gIG1hcDxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBmdW5jOiAobmV4dDogVCkgPT4gVCk6IFJlY29yZDxzdHJpbmcsIFQ+IHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXTogW3N0cmluZywgVF0pOiBSZWNvcmQ8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFRcclxuICAgICAgPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIFtrZXldOiBmdW5jKHZhbHVlKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VPYmplY3RzPFQ+KC4uLm9ianM6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIG9ianMucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBUKSA9PiB7XHJcbiAgICAgIHJldHVybiBfLm1lcmdlKGN1cnJlbnQsIG5leHQpIGFzIFQ7XHJcbiAgICB9LCB7fSBhcyBUKTtcclxuICB9XHJcblxyXG4gIGludGVyY2VwdE1ldGhvZENhbGxzPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgb2JqOiBULFxyXG4gICAgZm46IChwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFyZzogYW55W10pID0+IGFueVxyXG4gICk6IFQge1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcclxuICAgICAgZ2V0KHRhcmdldDogYW55LCBwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXRbcHJvcF0sIHtcclxuICAgICAgICAgICAgYXBwbHk6ICh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgZm4ocHJvcCwgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pIGFzIHVua25vd24gYXMgVDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgcHJldmlvdXMgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgbWlucyAtIHJldHVybiAxNVxyXG4gICAqIEBwYXJhbSBkYXRlVGltZSAtIGRhdGUvdGltZSBpbiBtb21lbnQgZm9ybWF0XHJcbiAgICogQHJldHVybnMgbW9tZW50XHJcbiAgICovXHJcbiAgZ2V0Um91bmRlZERvd25RdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCByb3VuZGVkIHVwIHF1YXJ0ZXIgaG91ciBlLmcuIGlmIDI5IC0gcmV0dXJuIDMwXHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkVXBRdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gMzApIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDQ1KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgICBkYXRlVGltZS5hZGQoMSwgJ2hvdXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZVRpbWU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NldChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XHJcbn1cclxuIl19