simpo-component-library 3.7.5 → 3.7.7

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 (29) hide show
  1. package/esm2022/lib/ecommerce/sections/categories-with-image-background-columns/categories-with-image-background-columns.component.mjs +5 -3
  2. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +5 -5
  3. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +5 -5
  4. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +3 -3
  5. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +19 -5
  6. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +268 -15
  7. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +2 -1
  8. package/esm2022/lib/ecommerce/styles/category.modal.mjs +2 -1
  9. package/esm2022/lib/ecommerce/styles/product.modal.mjs +11 -1
  10. package/esm2022/lib/elements/my-bookings/my-bookings.component.mjs +42 -4
  11. package/esm2022/lib/sections/footer/footer.component.mjs +10 -7
  12. package/esm2022/lib/sections/header-section/header-section.component.mjs +33 -7
  13. package/esm2022/lib/services/rest.service.mjs +42 -2
  14. package/esm2022/lib/utils/list-route.util.mjs +56 -0
  15. package/fesm2022/simpo-component-library.mjs +482 -47
  16. package/fesm2022/simpo-component-library.mjs.map +1 -1
  17. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +4 -0
  18. package/lib/ecommerce/sections/product-list/product-list.component.d.ts +46 -1
  19. package/lib/ecommerce/styles/Collection.modal.d.ts +1 -0
  20. package/lib/ecommerce/styles/category.modal.d.ts +1 -0
  21. package/lib/ecommerce/styles/product.modal.d.ts +42 -0
  22. package/lib/elements/my-bookings/my-bookings.component.d.ts +16 -0
  23. package/lib/sections/footer/footer.component.d.ts +2 -2
  24. package/lib/sections/header-section/header-section.component.d.ts +3 -0
  25. package/lib/services/rest.service.d.ts +16 -2
  26. package/lib/utils/list-route.util.d.ts +21 -0
  27. package/package.json +1 -1
  28. package/simpo-component-library-3.7.7.tgz +0 -0
  29. package/simpo-component-library-3.7.5.tgz +0 -0
@@ -181,7 +181,32 @@ export class RestService {
181
181
  .get(this.BASE_URL + `ecommerce/inventory/${businessId}/brand`)
182
182
  .pipe(map((response) => (response.data ?? response)?.map((brand) => new Brand(brand))));
183
183
  }
184
- getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size, brandIds = []) {
184
+ // PUT product/custom-field/query-options. Returns sorts + filter groups for the sidebar.
185
+ // Ids and slugs are arrays in the JSON body and are combined: a product in any listed category
186
+ // matches, and in any listed collection. When both lists are sent a product must match one of each.
187
+ // An unseeded business returns four sorts and `groups: []`; callers keep the legacy sidebar then.
188
+ getFilterOptions(scope = {}) {
189
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
190
+ const body = {
191
+ businessId,
192
+ categoryIds: scope.categoryIds ?? [],
193
+ collectionIds: scope.collectionIds ?? [],
194
+ categorySlugNames: scope.categorySlugNames ?? [],
195
+ collectionSlugNames: scope.collectionSlugNames ?? [],
196
+ };
197
+ return this.http
198
+ .put(this.BASE_URL + 'ecommerce/product/custom-field/query-options', body)
199
+ .pipe(map((response) => {
200
+ // Wrapped as { data: {...} }; tolerate an unwrapped body too.
201
+ const body = response?.data ?? response ?? {};
202
+ return {
203
+ sorts: body.sorts ?? [],
204
+ groups: body.groups ?? [],
205
+ filters: body.filters ?? [],
206
+ };
207
+ }));
208
+ }
209
+ getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size, brandIds = [], extra = {}) {
185
210
  this.getBusinessDetails();
186
211
  let payload = {
187
212
  businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
@@ -204,6 +229,16 @@ export class RestService {
204
229
  payload['minRating'] = minRating;
205
230
  if (maxRating > 0)
206
231
  payload['maxRating'] = maxRating;
232
+ // Sent on jewellery listings too: the backend applies them there as well.
233
+ if (extra.customFieldFilters?.length)
234
+ payload['customFieldFilters'] = extra.customFieldFilters;
235
+ if (extra.sortDirection)
236
+ payload['sortDirection'] = extra.sortDirection;
237
+ // Slugs are combined (OR) with the id arrays and are accepted on jewellery search as well.
238
+ if (extra.categorySlugName?.length)
239
+ payload['categorySlugName'] = extra.categorySlugName;
240
+ if (extra.collectionSlugName?.length)
241
+ payload['collectionSlugName'] = extra.collectionSlugName;
207
242
  return this.http
208
243
  .put(this.BASE_URL +
209
244
  `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
@@ -576,6 +611,11 @@ export class RestService {
576
611
  getBookingGroup(groupId) {
577
612
  return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}`);
578
613
  }
614
+ /** Fetched on click, not pre-cached on the booking - ecommerce generates/caches the invoice PDF
615
+ * the first time it's asked for, so there's nothing to gain by fetching it earlier. */
616
+ getBookingInvoiceUrl(groupId) {
617
+ return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}/invoice-url`);
618
+ }
579
619
  generatePaymentToken(groupId) {
580
620
  return this.http.post(this.APPOINTMENT_URL + `payment/token?groupId=${groupId}`, {});
581
621
  }
@@ -766,4 +806,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
766
806
  type: Inject,
767
807
  args: [APPOINTMENT_URL]
768
808
  }] }] });
769
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUVMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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ZUFBZTttSEFuQmQsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjSSxNQUFNOzJCQUFDLE9BQU87OzBCQUNkLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsUUFBUTs7MEJBRWYsTUFBTTsyQkFBQyxhQUFhOzswQkFDcEIsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJldmlldyB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvcmV2aWV3Lm1vZGFsJztcbmltcG9ydCB7IERldmljZUluZm8sIFVzZXIgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xuaW1wb3J0IHsgUGluQ29kZUxvY2F0aW9uSW50ZXIgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL1BpbmNvZGVMb2NhdGlvbkludGVyLm1vZGVsJztcbmltcG9ydCB7IFBpbmNvZGVMb2NhdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvUGluY29kZUxvY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEFQSV9VUkwsXG4gIENNSVNfVVJMLFxuICBFQ09NTUVSQ0VfVVJMLFxuICBQQVNTQk9PS19VUkwsXG4gIEFQUE9JTlRNRU5UX1VSTCxcbn0gZnJvbSAnLi4vdG9rZW5zL2FwaS10b2tlbic7XG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvY2F0ZWdvcnkubW9kYWwnO1xuaW1wb3J0IHsgQmxvZ0NhdGVnb3J5IH0gZnJvbSAnLi4vc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctY2F0ZWdvcnkubW9kZWwnO1xuaW1wb3J0IHtcbiAgY2hlY2tJdGVtQWxyZWFkeUFkZGVkLFxuICBQcm9kdWN0LFxuICBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0LFxufSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQ29sbGVjdGlvbi5tb2RhbCc7XG5pbXBvcnQgeyBCcmFuZCB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQnJhbmQubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XG5pbXBvcnQgeyBTdG9yYWdlTGlrZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2UtbGlrZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtYXBpLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtZWNvbW1lcmNlLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vcHJvZHVjdGlvblxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjsgLy9kZXZcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL3N0YWdlYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vc3RhZ2VcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgYnVzaW5lc3NEZXRhaWxzOiBhbnk7XG4gIHN1YkluZHVzdHJ5TmFtZTogYW55O1xuICBpc0pld2VsbGVyeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEFQSV9VUkwpIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KEVDT01NRVJDRV9VUkwpIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQ01JU19VUkwpIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTF9TVE9SQUdFKSBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VMaWtlLFxuICAgIEBJbmplY3QoUEFTU0JPT0tfVVJMKSBwcml2YXRlIFBBU1NCT09LX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQVBQT0lOVE1FTlRfVVJMKSBwcml2YXRlIEFQUE9JTlRNRU5UX1VSTDogc3RyaW5nXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcbiAgKSB7IH1cbiAgb3JyYUJhc2VVcmw6IHN0cmluZyA9ICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS8nO1xuICAvLyBwYXNzQm9va1VybDogc3RyaW5nID0gXCJodHRwczovL3Byb2QtcGFzc2Jvb2suc2ltcG8uYWkvXCI7XG4gIGdldEJ1c2luZXNzRGV0YWlscygpIHtcbiAgICB0aGlzLmlzSmV3ZWxsZXJ5ID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdpc01hdGVyaWFsQmFzZWRQcmljaW5nJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXIpXG4gICAgICB0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlZFByb2R1Y3QoY29sbGVjdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBsZXQgc3ViSW5kdXN0cnlJZDogc3RyaW5nIHwgbnVsbCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyk7XG4gICAgaWYgKCFzdWJJbmR1c3RyeUlkKSBzdWJJbmR1c3RyeUlkID0gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9jb2xsZWN0aW9uL2lkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH0maXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIGdldENhdGVnb3JpZXNCeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9jYXRlZ29yeS9jb2xsZWN0aW9uSWQ/Y29sbGVjdGlvbklkPSR7Y29sbGVjdGlvbklkfWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIC8vIGh0dHBzOi8vbmV3ZGV2LWFwaS5zaW1wby5haS9cbiAgZ2V0QWxsQ2F0ZWdvcmllc0J5QnVzaW5lc3NJZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY2F0ZWdvcnlgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cvZ2V0QWxsL2NhdGVnb3JpZXMve2J1c2luZXNzSWR9IOKAlCBiYWNrZW5kIHRocm93cyBcIk5vIENhdGVnb3JpZXMgRm91bmRcIiB3aGVuIGVtcHR5O1xuICAvLyBjYWxsZXJzIHNob3VsZCB0cmVhdCB0aGF0IGFzIGFuIGVtcHR5IGxpc3QsIG5vdCBhbiBlcnJvciBzdGF0ZS5cbiAgZ2V0QmxvZ0NhdGVnb3JpZXMoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvZ2V0QWxsL2NhdGVnb3JpZXMvJHtidXNpbmVzc0lkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQmxvZ0NhdGVnb3J5KGNhdGVnb3J5KSkgPz9cbiAgICAgICAgICAgIFtdXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cve2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPXtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPXtjYXRlZ29yeUlkfVxuICAvLyBOb3RlOiB0aGUgcGF0aCB7YnVzaW5lc3NJZH0gc2VnbWVudCBpcyB1bnVzZWQgc2VydmVyLXNpZGUgcGVyIHRoZSBBUEkgZG9jLCBidXQgbXVzdCBzdGlsbCBiZVxuICAvLyBwb3B1bGF0ZWQgaWRlbnRpY2FsbHkgdG8gdGhlIHF1ZXJ5IHBhcmFtIOKAlCB0aGlzIGlzIHRoZSBkb2N1bWVudGVkIFVSTCBzaGFwZSwgbm90IGEgdHlwby5cbiAgZ2V0QmxvZ3NCeUNhdGVnb3J5KGJ1c2luZXNzSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBidXNpbmVzcy9ibG9nLyR7YnVzaW5lc3NJZH0vYmxvZy1saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gXG4gICAgKTtcbiAgfVxuICAvLyBHRVQgYnVzaW5lc3MvYmxvZy9wb3B1bGFyP2J1c2luZXNzSWQ9JnNpemU9JmNhdGVnb3J5SWQ9JmNhdGVnb3J5TmFtZT1cbiAgLy8gUmV0dXJucyB7IGRhdGE6IEJsb2dbXSB9IOKAlCBhbiBlbXB0eSBhcnJheSBpcyBhIHZhbGlkIFwibm8gcG9wdWxhciBwb3N0cyB5ZXRcIiByZXN1bHQsIG5vdCBhbiBlcnJvci5cbiAgZ2V0UG9wdWxhckJsb2dzKFxuICAgIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgICBzaXplPzogbnVtYmVyLFxuICAgIGNhdGVnb3J5SWQ/OiBzdHJpbmcsXG4gICAgY2F0ZWdvcnlOYW1lPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB1cmwgPSB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvcG9wdWxhcj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gO1xuICAgIGlmIChzaXplKSB1cmwgKz0gYCZzaXplPSR7c2l6ZX1gO1xuICAgIGlmIChjYXRlZ29yeUlkKSB1cmwgKz0gYCZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gO1xuICAgIGVsc2UgaWYgKGNhdGVnb3J5TmFtZSkgdXJsICs9IGAmY2F0ZWdvcnlOYW1lPSR7Y2F0ZWdvcnlOYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcbiAgfVxuICAvLyBQVVQgYnVzaW5lc3MvYmxvZy91cGRhdGUve2Jsb2dJZH0g4oCUIGluY3JlbWVudHMgdG90YWxWaXNpdHMgYnkgMS4gTm8gcmVxdWVzdCBib2R5LCBubyBxdWVyeSBwYXJhbXMuXG4gIC8vIE5PVCB0aGUgc2FtZSBhcyB0aGUgZnVsbC1ibG9nLWVkaXQgUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlIChubyB7YmxvZ0lkfSBpbiB0aGF0IHBhdGgpIOKAlCBuZXZlciBjb25mdXNlIHRoZSB0d28uXG4gIGluY3JlbWVudEJsb2dWaXNpdChibG9nSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgYnVzaW5lc3MvYmxvZy8ke2Jsb2dJZH0vdmlzaXQtY291bnRgLCBudWxsKTtcbiAgfVxuICBnZXRQYXNzYm9va09yZGVyU3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL21hbnVhbC9wYXltZW50L3N0YXR1cz9wYXltZW50T3JkZXJJZD0ke29yZGVySWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeVNlbGVjdGVkQ2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC8ke2NhdGVnb3J5SWR9YCk7XG4gIH1cbiAgZ2V0QWxsU2NoZW1lcyh1c2VySWQ/OiBhbnksIHN0b3JlSWQ/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3VzZXI/dXNlcklkPSR7dXNlcklkfSZzdG9yZUlkPSR7c3RvcmVJZH1gXG4gICAgKTtcbiAgfVxuICBnZXRBbGxSZWRlbXB0aW9uU2NoZW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMub3JyYUJhc2VVcmwgKyBgcGFzc0Jvb2svcmVkZW1wdGlvbi9hbW91bnQvY2hlY2s/dXNlckNvZGU9Q18wMDAzMTM4ODVgXG4gICAgKTtcbiAgfVxuICBnZXRBbGxQcm9kdWN0cyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBpdGVtSWQ6IHByb2R1Y3RJZCxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBzbHVnaWZpZWROYW1lOiBzbHVnTmFtZSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGEubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbkJ5SWRzKGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGlkczogY29sbGVjdGlvbklkcyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNvbGxlY3Rpb246IGFueSkgPT4gbmV3IENvbGxlY3Rpb24oY29sbGVjdGlvbikpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRBbGxDYXRlZ29yaWVzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICBjb25zdCBzdWJJbmR1c3RyeUlkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L2ZlYXR1cmVkP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzdWJJZD0ke3N1YkluZHVzdHJ5SWR9YFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgZ2V0QWxsQ29sbGVjdGlvbnMoKSB7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9pbnZlbnRvcnkvZ2V0L2NvbGxlY3Rpb24nLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgIChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWxsQnJhbmRzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS8ke2J1c2luZXNzSWR9L2JyYW5kYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgKHJlc3BvbnNlLmRhdGEgPz8gcmVzcG9uc2UpPy5tYXAoKGJyYW5kOiBhbnkpID0+IG5ldyBCcmFuZChicmFuZCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFByb2R1Y3QoXG4gICAgY29sbGVjdGlvbklkczogc3RyaW5nW10sXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaFRleHQ6IHN0cmluZyxcbiAgICBtaW5QcmljZTogbnVtYmVyLFxuICAgIG1heFByaWNlOiBudW1iZXIsXG4gICAgbWluUmF0aW5nOiBudW1iZXIsXG4gICAgbWF4UmF0aW5nOiBudW1iZXIsXG4gICAgc29ydEJ5OiBzdHJpbmcsXG4gICAgcGFnZU5vOiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGJyYW5kSWRzOiBzdHJpbmdbXSA9IFtdXG4gICkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcbiAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkcyxcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWRzLFxuICAgICAgYnJhbmRJZDogYnJhbmRJZHMsXG4gICAgICBzZWFyY2hUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBwYWdlTm86IHBhZ2VObyxcbiAgICAgIHBhZ2VTaXplOiBzaXplLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgaWYgKG1pblByaWNlID4gMCkgcGF5bG9hZFsnbWluUHJpY2UnXSA9IG1pblByaWNlO1xuICAgIGlmIChtYXhQcmljZSA+IDApIHBheWxvYWRbJ21heFByaWNlJ10gPSBtYXhQcmljZTtcbiAgICBpZiAobWluUmF0aW5nID4gMCkgcGF5bG9hZFsnbWluUmF0aW5nJ10gPSBtaW5SYXRpbmc7XG4gICAgaWYgKG1heFJhdGluZyA+IDApIHBheWxvYWRbJ21heFJhdGluZyddID0gbWF4UmF0aW5nO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3VudDogcmVzcG9uc2UuZGF0YS5jb3VudCxcbiAgICAgICAgICAgIG1pblByaWNlOiByZXNwb25zZS5kYXRhLm1pblByaWNlLFxuICAgICAgICAgICAgbWF4UHJpY2U6IHJlc3BvbnNlLmRhdGEubWF4UHJpY2UsXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgICAgKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbiAgZ2V0UHJvZHVjdEJ5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgY2F0ZWdvcnlJZDogW2NhdGVnb3J5SWRdLFxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbS9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmNvdW50LFxuICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgYnVzaW5lc3NJZDpcbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICBjb2xsZWN0aW9uSWQ6IFtjb2xsZWN0aW9uSWRdLFxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbS9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmNvdW50LFxuICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYWRkUmV2aWV3KHBheWxvYWQ6IFJldmlldykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXdgLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRBbGxSZXZpZXdzKHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2ZpbHRlci9yZXZpZXdzP3Byb2R1Y3RJZD0ke3Byb2R1Y3RJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZU9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9vdHAvdHJpZ2dlcj9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICB2ZXJpZnlPVFAobW9iaWxlOiBzdHJpbmcsIG90cDogc3RyaW5nLCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlP21vYmlsZT0ke21vYmlsZX0mb3RwPSR7b3RwfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgZGV2aWNlSW5mb1xuICAgICk7XG4gIH1cbiAgcmVzZW5kT1RQKG1vYmlsZTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL3Jlc2VuZD9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBhcHBsaWNhYmxlRGlzY291bnRMaXN0KGNhcnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvb3JkZXIvZGlzY291bnQtY291cG9uLyR7Y2FydElkfS9hcHBsaWNhYmlsaXR5L2xpc3RgXG4gICAgKTtcbiAgfVxuXG4gIGFkZEl0ZW1Ub0RCKHVzZXJDYXJ0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydGAsIHVzZXJDYXJ0KTtcbiAgfVxuICBnZXRVc2VySXRlbXModXNlcklkOiBzdHJpbmcsIGNhcnRUeXBlOiAnQ0FSVCcgfCAnV0lTSExJU1QnIHwgJ1RSSUFMX0NBUlQnKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvb3JkZXIvY2FydD91c2VySWQ9JHt1c2VySWR9JmNhcnRUeXBlPSR7Y2FydFR5cGV9YFxuICAgICk7XG4gIH1cbiAgZ2V0VXNlckluZm8odXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvZ2V0L3VzZXI/dXNlcklkPSR7dXNlcklkfWAsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBhZGRVc2VyQWRkcmVzcyh1c2VyOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3VwZGF0ZS91c2VyYCwgdXNlcik7XG4gIH1cbiAgdXBkYXRlUHJvZmlsZShwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3VwZGF0ZS91c2VyYCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0VXNlck9yZGVycyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci91c2VyL29yZGVyYCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0VXNlcldpc2hsaXN0KHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0P3VzZXJJZD0ke3VzZXJJZH0mY2FydFR5cGU9V0lTSExJU1RgXG4gICAgKTtcbiAgfVxuICBtb3ZlSXRlbVRvQ2FydCh1c2VySWQ6IHN0cmluZywgcGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci91cGRhdGUvY2FydD91c2VySWQ9JHt1c2VySWR9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgLy8gUGF5bWVudFxuICBjcmVhdGVQYXltZW50VG9rZW4ocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuRUNPTU1FUkNFX1VSTCArIGBwYXltZW50L29yZGVyYCwgcGF5bG9hZCk7XG4gIH1cbiAgY2hlY2tQYXltZW50U3RhdHVzKHBheWxvYWQ6IGFueSkge1xuICAgIGxldCBpc0pld2VsbGVyeSA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnaXNNYXRlcmlhbEJhc2VkUHJpY2luZycpID09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICBsZXQgcGF5bG9hZFdpdGhKZXdlbGxlcnkgPSB7IC4uLnBheWxvYWQsIGlzSmV3ZWxsZXJ5OiBpc0pld2VsbGVyeSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuRUNPTU1FUkNFX1VSTCArIGBwYXltZW50L3N0YXR1c2AsXG4gICAgICBwYXlsb2FkV2l0aEpld2VsbGVyeVxuICAgICk7XG4gIH1cbiAgZ2V0UmVjZW50Vmlld1Byb2R1Y3QodXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3JlY2VudFZpZXc/dXNlcklkPSR7dXNlcklkfWAsIG51bGwpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHNlbmRTaWdudXBPVFAocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9zaWdudXAvb3RwL3RyaWdnZXJgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICB2ZXJpZnlTaWdudXBPVFAocGF5bG9hZDogYW55KSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIC8vIHBheWxvYWRbXCJidXNpbmVzc0lkXCJdID0gYnVzaW5lc3NJZDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlL3NpZ251cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIHNpZ25pblBhc3N3b3JkKHBhc3NEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlL2xvZ2luYCxcbiAgICAgIHBhc3NEYXRhXG4gICAgKTtcbiAgfVxuXG4gIGVuZFVzZXJSZWZmZXJhbERldGFpbHModXNlcklkOiBhbnksIHJlZmVycmFsVW5pcXVlSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9hcGkvZW5kLXVzZXIvcmVmZXJyYWxEZXRhaWxzP3VzZXJJZD0ke3VzZXJJZH0mcmVmZXJyYWxVbmlxdWVJZD0ke3JlZmVycmFsVW5pcXVlSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUFwcG9pbnRtZW50KGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9hZGRgLCBkYXRhKTtcbiAgfVxuXG4gIGdldEFsbExvY2F0aW9uKGJ1c2luZXNzSWQ6IGFueSwgc2l6ZTogbnVtYmVyLCBwYWdlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvbG9jYXRpb24/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFRpbWVTbG90cyhsb2NhdGlvbklkOiBhbnksIGRhdGU6IERhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvdGltZXNsb3RzP2xvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfSZkYXRlPSR7ZGF0ZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFNlcnZpY2UoYnVzaW5lc3NJZDogYW55LCBzaXplOiBhbnksIHBhZ2U6IGFueSwgbG9jYXRpb25JZD86IGFueSkge1xuICAgIGlmICghbG9jYXRpb25JZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zZXJ2aWNlP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zZXJ2aWNlP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWxsU3RhZmZCeUxvY2F0aW9uKFxuICAgIGJ1c2luZXNzSWQ6IGFueSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGxvY2F0aW9uSWQ6IHN0cmluZyxcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoIXNlcnZpY2VJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfSZzZXJ2aWNlSWQ9JHtzZXJ2aWNlSWR9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdmFpbGFibGVTbG90cyhkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9hdmFpbGFibGUvdGltZXNsb3RzYCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRMaXN0RmllbGRzKGJJZDogYW55LCBzaG93SW5FcnA6IGFueSwgZm9ybU5hbWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL2ZpZWxkcz9idXNpbmVzc0lkPSR7YklkfSZzdGF0dXM9dHJ1ZSZzaG93SW5Gb3JtPSR7c2hvd0luRXJwfSZpc1BhZ2luYXRpb249ZmFsc2UmZmllbGRDYXRlZ29yeT0ke2Zvcm1OYW1lfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlU3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGJ1c2luZXNzSWQ6IGFueSwgZ3JhZGVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9JnN0YXR1cz10cnVlJmlzRGVsZXRlZD1mYWxzZWBcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlQWRtaXNzaW9uKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9yZWdpc3RyYXRpb24vYWRtaXNzaW9uP3JlZ2lzdHJhdGlvbklkPSR7cGF5bG9hZD8ucmVnaXN0cmF0aW9uSWQgfHwgJyd9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlUGF5bWVudExpbmsoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vcmVnaXN0cmF0aW9uL2FkbWlzc2lvbi92Mi9wYXltZW50P2lzRnJvbVdlYj10cnVlYCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlUmVnaXN0cmF0aW9uRm9yUGF5bWVudChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vcmVnaXN0cmF0aW9uL3BheW1lbnRgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBnZXRTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoZ3JhZGVJZDogYW55KSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9zdWJzY3JpcHRpb24vcGxhbi9saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZncmFkZUlkPSR7Z3JhZGVJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEZlZVN0cnVjdHVyZShwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9mZWUvc3RydWN0dXJlYCwgcGF5bG9hZCk7XG4gIH1cblxuICBuZXdGZWVTdHJ1Y3R1cmVHZXRMaXN0KGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmUvdjIvZmlsdGVyYCwgZGF0YSk7XG4gIH1cblxuICBnZXRBbGxEb2N1bWVudChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL21hc3Rlci9kb2N1bWVudFR5cGUvZmlsdGVyYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0TGVhZEJ5SWQobGVhZElkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkNNSVNfVVJMICsgYGNybS9sZWFkcy9nZXQtb25lP2xlYWRJZD0ke2xlYWRJZH1gKTtcbiAgfVxuXG4gIGdldFJlZ2lzdHJhdGlvbkxpc3QocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vcmVnaXN0cmF0aW9uL2dldEFsbGAsIHBheWxvYWQpO1xuICB9XG5cbiAgZ2V0QWxsQ29tcG9uZW50Q2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGFkbWluL21hc3Rlci90ZW1wbGF0ZS9jYXRlZ29yeS9hbGxgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FmZVBhcnNlPFQ+KHJhdzogc3RyaW5nIHwgbnVsbCk6IFQgfCBudWxsIHtcbiAgICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgVDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFRlbXBsYXRlKCkge1xuICAgIGNvbnN0IGJEZXRhaWxzUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JEZXRhaWxzJyk7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuc2FmZVBhcnNlPHsgdGVtcGxhdGVJZD86IHN0cmluZyB9PihiRGV0YWlsc1Jhdyk7XG5cbiAgICAvLyBmYWxsYmFjayBzb3VyY2VcbiAgICBjb25zdCB3ZWJzaXRlRGF0YVJhdyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlRGF0YScpO1xuICAgIGNvbnN0IHdlYnNpdGVEYXRhID0gdGhpcy5zYWZlUGFyc2U8eyBob21lUGFnZUlkPzogc3RyaW5nIH0+KHdlYnNpdGVEYXRhUmF3KTtcblxuICAgIC8vIHByZWZlciB0ZW1wbGF0ZUlkIGZyb20gYkRldGFpbHM7IGVsc2UgZmFsbGJhY2sgdG8gd2Vic2l0ZURhdGEuaG9tZVBhZ2VJZFxuICAgIGNvbnN0IHRlbXBsYXRlSWQgPSAoXG4gICAgICBkZXRhaWxzPy50ZW1wbGF0ZUlkID8/XG4gICAgICB3ZWJzaXRlRGF0YT8uaG9tZVBhZ2VJZCA/P1xuICAgICAgJydcbiAgICApLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYnVzaW5lc3MvdjMvd2Vic2l0ZS8ke3RlbXBsYXRlSWR9L3BhZ2VzL2xpc3RgXG4gICAgKTtcbiAgfVxuXG4gIGdldEVjb21tZXJjZUNvbmZpZ3MoKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/XG4gICAgICAnMWYxMDY1MWYtOTI1OC02YjYzLTlkMjMtYTNkNjkxYWNlYjg4JztcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvYWxsP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgcG9zdFZpZGVvQ2FsbERldGFpbHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy92aWRlby1jYWxsYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0U3RvcmVMb2NhdG9yRGV0YWlscyhwaW5jb2RlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9zdG9yZS9uZWFyYnk/cGluY29kZT0ke3BpbmNvZGV9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWBcbiAgICApO1xuICB9XG5cbiAgc2F2ZUltYWdlc1RvQnVzaW5lc3NMaWJyYXJ5KG1lZGlhUmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhZG1pbi9saWJyYXJ5L2ltYWdlL2xpYnJhcnkvc2F2ZWAsXG4gICAgICBtZWRpYVJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgcmVnZW5lcmF0ZVRleHQocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhZG1pbi9jb250ZW50L3N1Z2dlc3QvdjIvd2Vic2l0ZS9pbmRpdmlkdWFsYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG4gIGdldENhdGVnb3JpZXNIZWFkZXJEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvJHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfS9oZWFkZXJzYFxuICAgICk7XG4gIH1cbiAgZ2V0QWxsU3RvcmVzKHBheWxvYWQ6IGFueSkge1xuICAgIGxldCB1cmwgPSAnJztcbiAgICBpZiAocGF5bG9hZD8ucGluY29kZSAmJiBwYXlsb2FkLnBpbmNvZGUudG9TdHJpbmcoKS5sZW5ndGggPT0gNikge1xuICAgICAgdXJsID0gdXJsICsgYCAmcGluY29kZT0ke3BheWxvYWQucGluY29kZX1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9zdG9yZS9nZXQvdjI/YnVzaW5lc3NJZD0ke3BheWxvYWQuYnVzaW5lc3NJZH0ke3VybH1gLFxuICAgICAgJydcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsQXBwb2ludG1lbnRTZXJ2aWNlKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ3NlcnZpY2UvbGlzdCcsIHBheWxvYWQpO1xuICB9XG5cbiAgZ2V0QWxsU3RhZmYocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBzdGFmZi9zdGFmZi9zdG9yZS1zdGFmZi1saXN0P3NlcnZpY2VJZD0ke3BheWxvYWQuc2VydmljZUlkfSZzdG9yZUlkPSR7cGF5bG9hZC5zdG9yZUlkfSZidXNpbmVzc0lkPSR7cGF5bG9hZC5idXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0U3RvcmVCeUlkKHN0b3JlSWQ6IHN0cmluZykge1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgc3RvcmVJZDogc3RvcmVJZCxcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJycsXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAwMCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3N0b3JlL2dldGAsIHBheWxvYWQpO1xuICB9XG4gIHBvc3ROZXdzTGV0dGVyKGVtYWlsOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy9yZWdpc3RlcmVkL25ld3NsZXR0ZXI/ZW1haWw9JHtlbWFpbH0mYnVzaW5lc3NJZD0ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9YCxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuICBhZGRSZXZpZXdUb1Byb2R1Y3QocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hZGQvcmV2aWV3P29yZGVySWQ9JHtwYXlsb2FkLm9yZGVySWR9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU3RvcmVzT3JyYShwYWdlTm86IGFueSwgc2l6ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RvcmU/cGFnZU5vPSR7cGFnZU5vfSZzaXplPSR7c2l6ZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldHN0YWZmQnlTdG9yZUlkKHN0b3JlSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0YWZmL2dldC8ke3N0b3JlSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTY2hlbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc2NoZW1lL2dldEFsbFNjaGVtZXMvZGFzaGJvYXJkYFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhdGUvZ2V0QWxsYCk7XG4gIH1cblxuICBnZXRDaXR5QnlTdGF0ZUJ5cGFnaW5hdGVkKHN0YXRlSWQ6IGFueSwgcGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL2NpdHkvZ2V0QnlTdGF0ZT9zdGF0ZUlkPSR7c3RhdGVJZH0mcGFnZU5vPSR7cGFnZU5vfSZzaXplPSR7c2l6ZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlQnlTbGFiKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0b3JlL2dldFNsYWJgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIH1cblxuICBhZGRUcmlhbEl0ZW0ocmVxdWVzdDogc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvdjJgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGNoZWNrSXRlbUFscmVhZHlBZGRlZChyZXF1ZXN0OiBjaGVja0l0ZW1BbHJlYWR5QWRkZWQpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvY2hlY2svaXRlbWAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUl0ZW1Gcm9tQ2FydChyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3JlbW92ZWAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIGJvb2tBcHBvaW50bWVudChyZXF1ZXN0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci90cnktaG9tZWAsIHJlcXVlc3QpO1xuICB9XG5cbiAgY3JlYXRlRW5yb2xsbWVudFNjaGVtZShlbnJvbGxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgYCAgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vZW5yb2xsbWVudC9jcmVhdGUvbmV3L3RlbXA/bWFudWFsUGF5PXRydWUmaXNXZWJSZXF1ZXN0PXRydWVcbmAsXG4gICAgICBlbnJvbGxlbWVudFxuICAgICk7XG4gIH1cblxuICBnZXRIb21lQXBwb2ludG1lbnRMaXN0KHVzZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL3RyeS1ob21lP3VzZXJJZD0ke3VzZXJJZH0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxPcnJhU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgJ2h0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3Bhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1J1xuICAgICk7XG4gIH1cblxuICByZWRlZW1TY2hlbWUoc2NoZW1lOiBzdHJpbmcsIGNhcnRJZDogYW55LCBhY3Rpb246IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZWRlbXB0aW9uP2NhcnRJZD0ke2NhcnRJZH0mcmVtb3ZlU2NoZW1lPSR7YWN0aW9ufWAsXG4gICAgICBzY2hlbWVcbiAgICApO1xuICB9XG5cbiAgZ2V0UmV2aWV3c0J5UHJvZHVjdElkKHByb2R1Y3RJZDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL2ZpbHRlci9yZXZpZXdzP3Byb2R1Y3RJZD0ke3Byb2R1Y3RJZH0mcGFnZU51bWJlcj0ke3BhZ2VOdW1iZXJ9JnBhZ2VTaXplPTNgLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldEZpZWxkc1RvRGlzcGxheShmaWVsZHNMaXN0OiBhbnlbXSkge1xuICAgIGxldCBtYXA6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzTGlzdCkge1xuICAgICAgZm9yIChsZXQgZmllbGRHcm91cCBvZiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGlmICghZmllbGRHcm91cC5maWVsZFN0ZXBJZCkgY29udGludWU7XG5cbiAgICAgICAgbGV0IHN0ZXBOYW1lID0gZmllbGRHcm91cC5maWVsZFN0ZXBOYW1lXG4gICAgICAgICAgPyBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWVcbiAgICAgICAgICA6ICd1bmRlZmluZWQnO1xuICAgICAgICBsZXQgZ3JvdXBOYW1lID0gZmllbGRHcm91cC5maWVsZEdyb3VwTmFtZTtcblxuICAgICAgICBpZiAoIW1hcFtzdGVwTmFtZV0pIHtcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZFsnZmllbGRTdGVwSWQnXSA9IGZpZWxkR3JvdXAuZmllbGRTdGVwSWQ7XG4gICAgICAgIGZpZWxkWydmaWVsZEdyb3VwSWQnXSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cElkO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xuICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0ucHVzaChuZXdGaWVsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGdldEJvb2tpbmdTbG90cyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvYXZhaWxhYmxlLXNsb3RzJyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGdldEJ1c2luZXNzQXBwb2ludG1lbnRTZXR0aW5ncyhidXNpbmVzc0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHNlcnZpY2Uvc2V0dGluZ3MvJHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgcmVzb2x2ZUNhcnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdib29raW5nL2dyb3VwL3Jlc29sdmUtY2FydCcsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuICBob2xkQm9va2luZyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9ncm91cC9ob2xkJywgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0Qm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfWApO1xuICB9XG4gIGdlbmVyYXRlUGF5bWVudFRva2VuKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvdG9rZW4/Z3JvdXBJZD0ke2dyb3VwSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBjb21wbGV0ZUJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvY29tcGxldGUvJHtncm91cElkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0TXlCb29raW5ncyhidXNpbmVzc0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgYm9va2luZy9ncm91cC9teT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mdXNlcklkPSR7dXNlcklkfWBcbiAgICApO1xuICB9XG4gIGdldEdyb3VwTGluZXMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vbGluZXNgXG4gICAgKTtcbiAgfVxuICBjYW5jZWxCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHJlYXNvbiA/IGA/cmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlYXNvbil9YCA6ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2NhbmNlbCR7cXVlcnl9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRDYW5jZWxsYXRpb25Qb2xpY3koYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgcG9saWN5LW1hc3RlcnMvJHtidXNpbmVzc0lkfT9wb2xpY3lUeXBlPUNBTkNFTExBVElPTmBcbiAgICApO1xuICB9XG4gIGdldFJlc2NoZWR1bGVTbG90cyhncm91cElkOiBzdHJpbmcsIGRhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGUtc2xvdHNgLFxuICAgICAgeyBkYXRlIH1cbiAgICApO1xuICB9XG4gIHJlc2NoZWR1bGVCb29raW5nKGdyb3VwSWQ6IHN0cmluZywgbmV3RGF0ZTogc3RyaW5nLCBuZXdTdGFydFRpbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGVgLFxuICAgICAgeyBuZXdEYXRlLCBuZXdTdGFydFRpbWUsIHJlc2NoZWR1bGVkQnk6ICdDVVNUT01FUicgfVxuICAgICk7XG4gIH1cblxuICAvLyBBZGQgc2VydmljZShzKSB0byBhbiBhbHJlYWR5LWJvb2tlZCBhcHBvaW50bWVudCwgYmVmb3JlIHN0YXJ0IG9ubHkgLSBzZWVcbiAgLy8gZG9jcy91bmlmaWVkLWFwcG9pbnRtZW50LWpvdXJuZXkubWQgwqc1ZSAoYXBwb2ludG1lbnRfc2VydmljZSByZXBvKS4gc2VydmljZUlkcyBjYW4gYmUgb25lIG9yXG4gIC8vIG1hbnkgLSB0aGUgYmFja2VuZCBhcHBsaWVzL3BheXMgZm9yIHRoZSB3aG9sZSBiYXRjaCBpbiBvbmUgY2FsbC5cbiAgZ2V0QWRkU2VydmljZU9wdGlvbnMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vYWRkLXNlcnZpY2Uvb3B0aW9uc2BcbiAgICApO1xuICB9XG4gIGFkZFNlcnZpY2VUb0Jvb2tpbmcoZ3JvdXBJZDogc3RyaW5nLCBzZXJ2aWNlSWRzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9hZGQtc2VydmljZWAsXG4gICAgICB7IHNlcnZpY2VJZHMsIGluaXRpYXRlZEJ5OiAnQ1VTVE9NRVInIH1cbiAgICApO1xuICB9XG4gIGdlbmVyYXRlQWRkU2VydmljZVBheW1lbnRUb2tlbihncm91cElkOiBzdHJpbmcsIHNlcnZpY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcXVlcnkgPSBzZXJ2aWNlSWRzLm1hcCgoaWQpID0+IGBzZXJ2aWNlSWRzPSR7aWR9YCkuam9pbignJicpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvYWRkLW9uL3Rva2VuP2dyb3VwSWQ9JHtncm91cElkfSYke3F1ZXJ5fWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0QWRkT25QYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC9hZGQtb24vdmVyaWZ5L3N0YXR1cz9vcmRlcklkPSR7b3JkZXJJZH1gXG4gICAgKTtcbiAgfVxuICBnZW5lcmF0ZVRva2VuKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBleHQvY29ubmVjdC9zaW1wby90b2tlbj9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JnVzZXJUeXBlPUVYVEVSTkFMX1VTRVJgLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldEFsbEVucm9sbGVkU2NoZW1lcyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ2V4dC9jb25uZWN0L3NpbXBvL3NjaGVtZS9saXN0JyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGVucm9sbFNjaGVtZShwYXlsb2FkOiBhbnksIGNoZWNrQ2hhcmdlczogYm9vbGVhbikge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgaWYgKGNoZWNrQ2hhcmdlcykge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9jYXJ0L2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9pbml0aWF0ZS9wYXltZW50P21hbnVhbFBheT10cnVlJyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGdldEJlbmVmaXRTbGFiKHBhc3Nib29rSWQ/OiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9iZW5lZml0L3BlcmNlbnRhZ2VzP3Bhc3Nib29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRBbGxTdGFmZkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBzdGFmZi9zdGFmZi9saXN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0/aXNQYWdpbmF0aW9uPWZhbHNlYFxuICAgICk7XG4gIH1cbiAgcmVxdWVzdFJlZGVlbXB0aW9uKHBhc3Nib29rSWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXG4gICAgICBgcGFzc2Jvb2svcmVxdWVzdC9yZWRlbXB0aW9uP3Bhc3NCb29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBQYXNzYm9va0FwcFN0YXR1cyhiSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPVBhc3Nib29rYFxuICAgICk7XG4gIH1cbiAgY2hlY2tBcHBJbnN0YWxsZWQoYklkOiBhbnksIGFwcE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPSR7YXBwTmFtZX1gXG4gICAgKTtcbiAgfVxuICBnZXRSZWRlZW1Qb2ludHMoXG4gICAgYklkOiBhbnksXG4gICAgdXNlcklkOiBhbnksXG4gICAgZXZldFR5cGU6IHN0cmluZyxcbiAgICBvcmRlclZhbHVlOiBhbnksXG4gICAgcmV3YXJkUG9pbnRzOiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2FwaS9yZWZlcnJhbHMvYXZhaWxhYmxlLWFtb3VudD9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JmV2ZW50VHlwZT0ke2V2ZXRUeXBlfSZvcmRlclZhbHVlPSR7b3JkZXJWYWx1ZX0mcmV3YXJkUG9pbnRzPSR7cmV3YXJkUG9pbnRzfWBcbiAgICApO1xuICB9XG4gIHBheW1lbnRXaXRoQ29tcGxldGVQb2ludHMoY2FydElkOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL29yZGVyL3Jld2FyZHM/Y2FydElkPSR7Y2FydElkfWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFBhc3Nib29rRHVlcyhiSWQ6IGFueSwgdXNlcklkOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL3BheW1lbnQvZHVlcz9wYWdlPTAmc2l6ZT0xMDAwJmJ1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFRva2VuKCkge1xuICAgIGxldCB0b2tlbiA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbiAgZ2V0QWxsVHJhbnNhY3Rpb25zKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBkYXNoYm9hcmQvdjMvdHJhbnNhY3Rpb25zL3BhZ2VgLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRTY2hlbWVEZXRhaWxzKHNjaGVtZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9nZXQvc2NoZW1lP2lkPSR7c2NoZW1lSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIGdldE1ldGFsUHJpY2Uoc3RvcmVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9tZXRhbC9wcmljZXM/aWQ9JHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlTGVhZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9jb250YWN0YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QXBwb2ludG1lbnRQYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC92ZXJpZnkvc3RhdHVzP29yZGVySWQ9JHtvcmRlcklkfWBcbiAgICApO1xuICB9XG4gIGdldE90cEZvckxvZ2luKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZW5lcmF0ZS1vdHBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICAvKiogTmV3IE9UUCBBUEk6IFBVVCAvZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cFxuICAgKiAgQm9keTogeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH1cbiAgICogIFJlc3BvbnNlOiB7IGRhdGE6IHsgaXNFeGlzdGluZ1VzZXI6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyB9IH1cbiAgICovXG4gIHNlbmRPdHBWMihpZGVudGlmaWVyOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cGAsIHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBidXNpbmVzc0lkLFxuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5T3RwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvdmVyaWZ5LW90cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBsZXRlU2lnbnVwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvY29tcGxldGUtc2lnbnVwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgbG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvbG9naW4tcGFzc3dvcmRgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBmbHVzaChldmVudHNUb1NlbmQ6IGFueSkge1xuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvYW5hbHl0aWNzL2JhdGNoJywgZXZlbnRzVG9TZW5kKVxuICAgICAgLnN1YnNjcmliZSh7IGVycm9yOiAoKSA9PiB7IH0gfSk7XG4gIH1cblxuICBnZXRQb3B1bGFyU2VhcmNoZXMoKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz9cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz9cbiAgICAgICcxZjEyMTA4MS1kYmVhLTY1YzYtYWQ4OS0xZGZlOGNkZGE5MDInO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9wb3B1bGFyLXNlYXJjaGVzP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0TWVudUl0ZW1zKG1lbnVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvbWVudS8ke21lbnVJZH1gKTtcbiAgfVxuXG4gIC8vIGdldEhvbWVSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2hvbWU/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0yMGApXG4gIC8vIH1cblxuICAvLyBnZXRDYXJ0UmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9jYXJ0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MTVgKVxuICAvLyB9XG5cbiAgLy8gZ2V0UHJvZHVjdERlc2NyaXB0aW9uUmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9wZHA/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xMGApXG4gIC8vIH1cbn1cbiJdfQ==
809
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUlMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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QUVELGtCQUFrQjtRQUNoQixNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ2xDLHNDQUFzQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRO1lBQ2IsbURBQW1ELFVBQVUsRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQTlyQ1UsV0FBVyw0Q0FhWixPQUFPLGFBQ1AsYUFBYSxhQUNiLFFBQVEsMENBRVIsYUFBYSxhQUNiLFlBQVksYUFDWixlQUFlO21IQW5CZCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWNJLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxhQUFhOzswQkFDcEIsTUFBTTsyQkFBQyxRQUFROzswQkFFZixNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLFlBQVk7OzBCQUNuQixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmV2aWV3IH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9yZXZpZXcubW9kYWwnO1xuaW1wb3J0IHsgRGV2aWNlSW5mbywgVXNlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvdXNlci5tb2RhbCc7XG5pbXBvcnQgeyBQaW5Db2RlTG9jYXRpb25JbnRlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvUGluY29kZUxvY2F0aW9uSW50ZXIubW9kZWwnO1xuaW1wb3J0IHsgUGluY29kZUxvY2F0aW9uIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgQVBJX1VSTCxcbiAgQ01JU19VUkwsXG4gIEVDT01NRVJDRV9VUkwsXG4gIFBBU1NCT09LX1VSTCxcbiAgQVBQT0lOVE1FTlRfVVJMLFxufSBmcm9tICcuLi90b2tlbnMvYXBpLXRva2VuJztcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9jYXRlZ29yeS5tb2RhbCc7XG5pbXBvcnQgeyBCbG9nQ2F0ZWdvcnkgfSBmcm9tICcuLi9zZWN0aW9ucy9ibG9nLWxpc3QvYmxvZy1jYXRlZ29yeS5tb2RlbCc7XG5pbXBvcnQge1xuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQsXG4gIEN1c3RvbUZpZWxkRmlsdGVyLFxuICBGaWx0ZXJPcHRpb25zLFxuICBQcm9kdWN0LFxuICBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0LFxufSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQ29sbGVjdGlvbi5tb2RhbCc7XG5pbXBvcnQgeyBCcmFuZCB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQnJhbmQubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XG5pbXBvcnQgeyBTdG9yYWdlTGlrZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2UtbGlrZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtYXBpLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtZWNvbW1lcmNlLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vcHJvZHVjdGlvblxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjsgLy9kZXZcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL3N0YWdlYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vc3RhZ2VcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgYnVzaW5lc3NEZXRhaWxzOiBhbnk7XG4gIHN1YkluZHVzdHJ5TmFtZTogYW55O1xuICBpc0pld2VsbGVyeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEFQSV9VUkwpIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KEVDT01NRVJDRV9VUkwpIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQ01JU19VUkwpIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTF9TVE9SQUdFKSBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VMaWtlLFxuICAgIEBJbmplY3QoUEFTU0JPT0tfVVJMKSBwcml2YXRlIFBBU1NCT09LX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQVBQT0lOVE1FTlRfVVJMKSBwcml2YXRlIEFQUE9JTlRNRU5UX1VSTDogc3RyaW5nXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcbiAgKSB7IH1cbiAgb3JyYUJhc2VVcmw6IHN0cmluZyA9ICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS8nO1xuICAvLyBwYXNzQm9va1VybDogc3RyaW5nID0gXCJodHRwczovL3Byb2QtcGFzc2Jvb2suc2ltcG8uYWkvXCI7XG4gIGdldEJ1c2luZXNzRGV0YWlscygpIHtcbiAgICB0aGlzLmlzSmV3ZWxsZXJ5ID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdpc01hdGVyaWFsQmFzZWRQcmljaW5nJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXIpXG4gICAgICB0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlZFByb2R1Y3QoY29sbGVjdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBsZXQgc3ViSW5kdXN0cnlJZDogc3RyaW5nIHwgbnVsbCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyk7XG4gICAgaWYgKCFzdWJJbmR1c3RyeUlkKSBzdWJJbmR1c3RyeUlkID0gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9jb2xsZWN0aW9uL2lkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH0maXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIGdldENhdGVnb3JpZXNCeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9jYXRlZ29yeS9jb2xsZWN0aW9uSWQ/Y29sbGVjdGlvbklkPSR7Y29sbGVjdGlvbklkfWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIC8vIGh0dHBzOi8vbmV3ZGV2LWFwaS5zaW1wby5haS9cbiAgZ2V0QWxsQ2F0ZWdvcmllc0J5QnVzaW5lc3NJZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY2F0ZWdvcnlgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cvZ2V0QWxsL2NhdGVnb3JpZXMve2J1c2luZXNzSWR9IOKAlCBiYWNrZW5kIHRocm93cyBcIk5vIENhdGVnb3JpZXMgRm91bmRcIiB3aGVuIGVtcHR5O1xuICAvLyBjYWxsZXJzIHNob3VsZCB0cmVhdCB0aGF0IGFzIGFuIGVtcHR5IGxpc3QsIG5vdCBhbiBlcnJvciBzdGF0ZS5cbiAgZ2V0QmxvZ0NhdGVnb3JpZXMoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvZ2V0QWxsL2NhdGVnb3JpZXMvJHtidXNpbmVzc0lkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQmxvZ0NhdGVnb3J5KGNhdGVnb3J5KSkgPz9cbiAgICAgICAgICAgIFtdXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cve2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPXtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPXtjYXRlZ29yeUlkfVxuICAvLyBOb3RlOiB0aGUgcGF0aCB7YnVzaW5lc3NJZH0gc2VnbWVudCBpcyB1bnVzZWQgc2VydmVyLXNpZGUgcGVyIHRoZSBBUEkgZG9jLCBidXQgbXVzdCBzdGlsbCBiZVxuICAvLyBwb3B1bGF0ZWQgaWRlbnRpY2FsbHkgdG8gdGhlIHF1ZXJ5IHBhcmFtIOKAlCB0aGlzIGlzIHRoZSBkb2N1bWVudGVkIFVSTCBzaGFwZSwgbm90IGEgdHlwby5cbiAgZ2V0QmxvZ3NCeUNhdGVnb3J5KGJ1c2luZXNzSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBidXNpbmVzcy9ibG9nLyR7YnVzaW5lc3NJZH0vYmxvZy1saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gXG4gICAgKTtcbiAgfVxuICAvLyBHRVQgYnVzaW5lc3MvYmxvZy9wb3B1bGFyP2J1c2luZXNzSWQ9JnNpemU9JmNhdGVnb3J5SWQ9JmNhdGVnb3J5TmFtZT1cbiAgLy8gUmV0dXJucyB7IGRhdGE6IEJsb2dbXSB9IOKAlCBhbiBlbXB0eSBhcnJheSBpcyBhIHZhbGlkIFwibm8gcG9wdWxhciBwb3N0cyB5ZXRcIiByZXN1bHQsIG5vdCBhbiBlcnJvci5cbiAgZ2V0UG9wdWxhckJsb2dzKFxuICAgIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgICBzaXplPzogbnVtYmVyLFxuICAgIGNhdGVnb3J5SWQ/OiBzdHJpbmcsXG4gICAgY2F0ZWdvcnlOYW1lPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB1cmwgPSB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvcG9wdWxhcj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gO1xuICAgIGlmIChzaXplKSB1cmwgKz0gYCZzaXplPSR7c2l6ZX1gO1xuICAgIGlmIChjYXRlZ29yeUlkKSB1cmwgKz0gYCZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gO1xuICAgIGVsc2UgaWYgKGNhdGVnb3J5TmFtZSkgdXJsICs9IGAmY2F0ZWdvcnlOYW1lPSR7Y2F0ZWdvcnlOYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcbiAgfVxuICAvLyBQVVQgYnVzaW5lc3MvYmxvZy91cGRhdGUve2Jsb2dJZH0g4oCUIGluY3JlbWVudHMgdG90YWxWaXNpdHMgYnkgMS4gTm8gcmVxdWVzdCBib2R5LCBubyBxdWVyeSBwYXJhbXMuXG4gIC8vIE5PVCB0aGUgc2FtZSBhcyB0aGUgZnVsbC1ibG9nLWVkaXQgUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlIChubyB7YmxvZ0lkfSBpbiB0aGF0IHBhdGgpIOKAlCBuZXZlciBjb25mdXNlIHRoZSB0d28uXG4gIGluY3JlbWVudEJsb2dWaXNpdChibG9nSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgYnVzaW5lc3MvYmxvZy8ke2Jsb2dJZH0vdmlzaXQtY291bnRgLCBudWxsKTtcbiAgfVxuICBnZXRQYXNzYm9va09yZGVyU3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL21hbnVhbC9wYXltZW50L3N0YXR1cz9wYXltZW50T3JkZXJJZD0ke29yZGVySWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeVNlbGVjdGVkQ2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC8ke2NhdGVnb3J5SWR9YCk7XG4gIH1cbiAgZ2V0QWxsU2NoZW1lcyh1c2VySWQ/OiBhbnksIHN0b3JlSWQ/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3VzZXI/dXNlcklkPSR7dXNlcklkfSZzdG9yZUlkPSR7c3RvcmVJZH1gXG4gICAgKTtcbiAgfVxuICBnZXRBbGxSZWRlbXB0aW9uU2NoZW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMub3JyYUJhc2VVcmwgKyBgcGFzc0Jvb2svcmVkZW1wdGlvbi9hbW91bnQvY2hlY2s/dXNlckNvZGU9Q18wMDAzMTM4ODVgXG4gICAgKTtcbiAgfVxuICBnZXRBbGxQcm9kdWN0cyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBpdGVtSWQ6IHByb2R1Y3RJZCxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBzbHVnaWZpZWROYW1lOiBzbHVnTmFtZSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGEubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbkJ5SWRzKGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGlkczogY29sbGVjdGlvbklkcyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNvbGxlY3Rpb246IGFueSkgPT4gbmV3IENvbGxlY3Rpb24oY29sbGVjdGlvbikpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRBbGxDYXRlZ29yaWVzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICBjb25zdCBzdWJJbmR1c3RyeUlkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L2ZlYXR1cmVkP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzdWJJZD0ke3N1YkluZHVzdHJ5SWR9YFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgZ2V0QWxsQ29sbGVjdGlvbnMoKSB7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9pbnZlbnRvcnkvZ2V0L2NvbGxlY3Rpb24nLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgIChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWxsQnJhbmRzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS8ke2J1c2luZXNzSWR9L2JyYW5kYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgKHJlc3BvbnNlLmRhdGEgPz8gcmVzcG9uc2UpPy5tYXAoKGJyYW5kOiBhbnkpID0+IG5ldyBCcmFuZChicmFuZCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvLyBQVVQgcHJvZHVjdC9jdXN0b20tZmllbGQvcXVlcnktb3B0aW9ucy4gUmV0dXJucyBzb3J0cyArIGZpbHRlciBncm91cHMgZm9yIHRoZSBzaWRlYmFyLlxuICAvLyBJZHMgYW5kIHNsdWdzIGFyZSBhcnJheXMgaW4gdGhlIEpTT04gYm9keSBhbmQgYXJlIGNvbWJpbmVkOiBhIHByb2R1Y3QgaW4gYW55IGxpc3RlZCBjYXRlZ29yeVxuICAvLyBtYXRjaGVzLCBhbmQgaW4gYW55IGxpc3RlZCBjb2xsZWN0aW9uLiBXaGVuIGJvdGggbGlzdHMgYXJlIHNlbnQgYSBwcm9kdWN0IG11c3QgbWF0Y2ggb25lIG9mIGVhY2guXG4gIC8vIEFuIHVuc2VlZGVkIGJ1c2luZXNzIHJldHVybnMgZm91ciBzb3J0cyBhbmQgYGdyb3VwczogW11gOyBjYWxsZXJzIGtlZXAgdGhlIGxlZ2FjeSBzaWRlYmFyIHRoZW4uXG4gIGdldEZpbHRlck9wdGlvbnMoc2NvcGU6IHtcbiAgICBjYXRlZ29yeUlkcz86IHN0cmluZ1tdO1xuICAgIGNvbGxlY3Rpb25JZHM/OiBzdHJpbmdbXTtcbiAgICBjYXRlZ29yeVNsdWdOYW1lcz86IHN0cmluZ1tdO1xuICAgIGNvbGxlY3Rpb25TbHVnTmFtZXM/OiBzdHJpbmdbXTtcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBidXNpbmVzc0lkLFxuICAgICAgY2F0ZWdvcnlJZHM6IHNjb3BlLmNhdGVnb3J5SWRzID8/IFtdLFxuICAgICAgY29sbGVjdGlvbklkczogc2NvcGUuY29sbGVjdGlvbklkcyA/PyBbXSxcbiAgICAgIGNhdGVnb3J5U2x1Z05hbWVzOiBzY29wZS5jYXRlZ29yeVNsdWdOYW1lcyA/PyBbXSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnTmFtZXM6IHNjb3BlLmNvbGxlY3Rpb25TbHVnTmFtZXMgPz8gW10sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHRoaXMuQkFTRV9VUkwgKyAnZWNvbW1lcmNlL3Byb2R1Y3QvY3VzdG9tLWZpZWxkL3F1ZXJ5LW9wdGlvbnMnLCBib2R5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSk6IEZpbHRlck9wdGlvbnMgPT4ge1xuICAgICAgICAgIC8vIFdyYXBwZWQgYXMgeyBkYXRhOiB7Li4ufSB9OyB0b2xlcmF0ZSBhbiB1bndyYXBwZWQgYm9keSB0b28uXG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlPy5kYXRhID8/IHJlc3BvbnNlID8/IHt9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3J0czogYm9keS5zb3J0cyA/PyBbXSxcbiAgICAgICAgICAgIGdyb3VwczogYm9keS5ncm91cHMgPz8gW10sXG4gICAgICAgICAgICBmaWx0ZXJzOiBib2R5LmZpbHRlcnMgPz8gW10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFByb2R1Y3QoXG4gICAgY29sbGVjdGlvbklkczogc3RyaW5nW10sXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaFRleHQ6IHN0cmluZyxcbiAgICBtaW5QcmljZTogbnVtYmVyLFxuICAgIG1heFByaWNlOiBudW1iZXIsXG4gICAgbWluUmF0aW5nOiBudW1iZXIsXG4gICAgbWF4UmF0aW5nOiBudW1iZXIsXG4gICAgc29ydEJ5OiBzdHJpbmcsXG4gICAgcGFnZU5vOiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGJyYW5kSWRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIGV4dHJhOiB7XG4gICAgICBjdXN0b21GaWVsZEZpbHRlcnM/OiBDdXN0b21GaWVsZEZpbHRlcltdO1xuICAgICAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAgICAgY2F0ZWdvcnlTbHVnTmFtZT86IHN0cmluZ1tdO1xuICAgICAgY29sbGVjdGlvblNsdWdOYW1lPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcbiAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkcyxcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWRzLFxuICAgICAgYnJhbmRJZDogYnJhbmRJZHMsXG4gICAgICBzZWFyY2hUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBwYWdlTm86IHBhZ2VObyxcbiAgICAgIHBhZ2VTaXplOiBzaXplLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgaWYgKG1pblByaWNlID4gMCkgcGF5bG9hZFsnbWluUHJpY2UnXSA9IG1pblByaWNlO1xuICAgIGlmIChtYXhQcmljZSA+IDApIHBheWxvYWRbJ21heFByaWNlJ10gPSBtYXhQcmljZTtcbiAgICBpZiAobWluUmF0aW5nID4gMCkgcGF5bG9hZFsnbWluUmF0aW5nJ10gPSBtaW5SYXRpbmc7XG4gICAgaWYgKG1heFJhdGluZyA+IDApIHBheWxvYWRbJ21heFJhdGluZyddID0gbWF4UmF0aW5nO1xuICAgIC8vIFNlbnQgb24gamV3ZWxsZXJ5IGxpc3RpbmdzIHRvbzogdGhlIGJhY2tlbmQgYXBwbGllcyB0aGVtIHRoZXJlIGFzIHdlbGwuXG4gICAgaWYgKGV4dHJhLmN1c3RvbUZpZWxkRmlsdGVycz8ubGVuZ3RoKVxuICAgICAgcGF5bG9hZFsnY3VzdG9tRmllbGRGaWx0ZXJzJ10gPSBleHRyYS5jdXN0b21GaWVsZEZpbHRlcnM7XG4gICAgaWYgKGV4dHJhLnNvcnREaXJlY3Rpb24pIHBheWxvYWRbJ3NvcnREaXJlY3Rpb24nXSA9IGV4dHJhLnNvcnREaXJlY3Rpb247XG4gICAgLy8gU2x1Z3MgYXJlIGNvbWJpbmVkIChPUikgd2l0aCB0aGUgaWQgYXJyYXlzIGFuZCBhcmUgYWNjZXB0ZWQgb24gamV3ZWxsZXJ5IHNlYXJjaCBhcyB3ZWxsLlxuICAgIGlmIChleHRyYS5jYXRlZ29yeVNsdWdOYW1lPy5sZW5ndGgpIHBheWxvYWRbJ2NhdGVnb3J5U2x1Z05hbWUnXSA9IGV4dHJhLmNhdGVnb3J5U2x1Z05hbWU7XG4gICAgaWYgKGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZT8ubGVuZ3RoKSBwYXlsb2FkWydjb2xsZWN0aW9uU2x1Z05hbWUnXSA9IGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW1WMi9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmRhdGEuY291bnQsXG4gICAgICAgICAgICBtaW5QcmljZTogcmVzcG9uc2UuZGF0YS5taW5QcmljZSxcbiAgICAgICAgICAgIG1heFByaWNlOiByZXNwb25zZS5kYXRhLm1heFByaWNlLFxuICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIGNhdGVnb3J5SWQ6IFtjYXRlZ29yeUlkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgY29sbGVjdGlvbklkOiBbY29sbGVjdGlvbklkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFkZFJldmlldyhwYXlsb2FkOiBSZXZpZXcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hZGQvcmV2aWV3YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QWxsUmV2aWV3cyhwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVPVFAobW9iaWxlOiBzdHJpbmcsIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvb3RwL3RyaWdnZXI/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgdmVyaWZ5T1RQKG1vYmlsZTogc3RyaW5nLCBvdHA6IHN0cmluZywgZGV2aWNlSW5mbzogRGV2aWNlSW5mbykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZT9tb2JpbGU9JHttb2JpbGV9Jm90cD0ke290cH0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YCxcbiAgICAgIGRldmljZUluZm9cbiAgICApO1xuICB9XG4gIHJlc2VuZE9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9yZXNlbmQ/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYXBwbGljYWJsZURpc2NvdW50TGlzdChjYXJ0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2Rpc2NvdW50LWNvdXBvbi8ke2NhcnRJZH0vYXBwbGljYWJpbGl0eS9saXN0YFxuICAgICk7XG4gIH1cblxuICBhZGRJdGVtVG9EQih1c2VyQ2FydDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnRgLCB1c2VyQ2FydCk7XG4gIH1cbiAgZ2V0VXNlckl0ZW1zKHVzZXJJZDogc3RyaW5nLCBjYXJ0VHlwZTogJ0NBUlQnIHwgJ1dJU0hMSVNUJyB8ICdUUklBTF9DQVJUJykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWBcbiAgICApO1xuICB9XG4gIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dldC91c2VyP3VzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYWRkVXNlckFkZHJlc3ModXNlcjogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHVzZXIpO1xuICB9XG4gIHVwZGF0ZVByb2ZpbGUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJPcmRlcnMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXNlci9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJXaXNobGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydD91c2VySWQ9JHt1c2VySWR9JmNhcnRUeXBlPVdJU0hMSVNUYFxuICAgICk7XG4gIH1cbiAgbW92ZUl0ZW1Ub0NhcnQodXNlcklkOiBzdHJpbmcsIHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXBkYXRlL2NhcnQ/dXNlcklkPSR7dXNlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBheW1lbnRcbiAgY3JlYXRlUGF5bWVudFRva2VuKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGNoZWNrUGF5bWVudFN0YXR1cyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgaXNKZXdlbGxlcnkgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgbGV0IHBheWxvYWRXaXRoSmV3ZWxsZXJ5ID0geyAuLi5wYXlsb2FkLCBpc0pld2VsbGVyeTogaXNKZXdlbGxlcnkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9zdGF0dXNgLFxuICAgICAgcGF5bG9hZFdpdGhKZXdlbGxlcnlcbiAgICApO1xuICB9XG4gIGdldFJlY2VudFZpZXdQcm9kdWN0KHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9yZWNlbnRWaWV3P3VzZXJJZD0ke3VzZXJJZH1gLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBzZW5kU2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvc2lnbnVwL290cC90cmlnZ2VyYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICAvLyBwYXlsb2FkW1wiYnVzaW5lc3NJZFwiXSA9IGJ1c2luZXNzSWQ7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9zaWdudXBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBzaWduaW5QYXNzd29yZChwYXNzRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsXG4gICAgICBwYXNzRGF0YVxuICAgICk7XG4gIH1cblxuICBlbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZDogYW55LCByZWZlcnJhbFVuaXF1ZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvYXBpL2VuZC11c2VyL3JlZmVycmFsRGV0YWlscz91c2VySWQ9JHt1c2VySWR9JnJlZmVycmFsVW5pcXVlSWQ9JHtyZWZlcnJhbFVuaXF1ZUlkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVBcHBvaW50bWVudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvYWRkYCwgZGF0YSk7XG4gIH1cblxuICBnZXRBbGxMb2NhdGlvbihidXNpbmVzc0lkOiBhbnksIHNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2xvY2F0aW9uP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxUaW1lU2xvdHMobG9jYXRpb25JZDogYW55LCBkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3RpbWVzbG90cz9sb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mZGF0ZT0ke2RhdGV9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTZXJ2aWNlKGJ1c2luZXNzSWQ6IGFueSwgc2l6ZTogYW55LCBwYWdlOiBhbnksIGxvY2F0aW9uSWQ/OiBhbnkpIHtcbiAgICBpZiAoIWxvY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbFN0YWZmQnlMb2NhdGlvbihcbiAgICBidXNpbmVzc0lkOiBhbnksXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBsb2NhdGlvbklkOiBzdHJpbmcsXG4gICAgc2VydmljZUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCFzZXJ2aWNlSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc3RhZmY/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX0mbG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mc2VydmljZUlkPSR7c2VydmljZUlkfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhaWxhYmxlU2xvdHMoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvYXZhaWxhYmxlL3RpbWVzbG90c2AsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2ZVN1YnNjcmlwdGlvbkZvckZlZVN0cnVjdHVyZShidXNpbmVzc0lkOiBhbnksIGdyYWRlSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL3N1YnNjcmlwdGlvbi9wbGFuL2xpc3Q/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JmdyYWRlSWQ9JHtncmFkZUlkfSZzdGF0dXM9dHJ1ZSZpc0RlbGV0ZWQ9ZmFsc2VgXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUFkbWlzc2lvbihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vcmVnaXN0cmF0aW9uL2FkbWlzc2lvbj9yZWdpc3RyYXRpb25JZD0ke3BheWxvYWQ/LnJlZ2lzdHJhdGlvbklkIHx8ICcnfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVBheW1lbnRMaW5rKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vcmVnaXN0cmF0aW9uL3JlZ2lzdHJhdGlvbi9wYXltZW50YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGdyYWRlSWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRGZWVTdHJ1Y3R1cmUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vZmVlL3N0cnVjdHVyZWAsIHBheWxvYWQpO1xuICB9XG5cbiAgbmV3RmVlU3RydWN0dXJlR2V0TGlzdChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9mZWUvc3RydWN0dXJlL3YyL2ZpbHRlcmAsIGRhdGEpO1xuICB9XG5cbiAgZ2V0QWxsRG9jdW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9tYXN0ZXIvZG9jdW1lbnRUeXBlL2ZpbHRlcmAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldExlYWRCeUlkKGxlYWRJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5DTUlTX1VSTCArIGBjcm0vbGVhZHMvZ2V0LW9uZT9sZWFkSWQ9JHtsZWFkSWR9YCk7XG4gIH1cblxuICBnZXRSZWdpc3RyYXRpb25MaXN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9nZXRBbGxgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbENvbXBvbmVudENhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhZG1pbi9tYXN0ZXIvdGVtcGxhdGUvY2F0ZWdvcnkvYWxsYCk7XG4gIH1cblxuICBwcml2YXRlIHNhZmVQYXJzZTxUPihyYXc6IHN0cmluZyB8IG51bGwpOiBUIHwgbnVsbCB7XG4gICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCBiRGV0YWlsc1JhdyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLnNhZmVQYXJzZTx7IHRlbXBsYXRlSWQ/OiBzdHJpbmcgfT4oYkRldGFpbHNSYXcpO1xuXG4gICAgLy8gZmFsbGJhY2sgc291cmNlXG4gICAgY29uc3Qgd2Vic2l0ZURhdGFSYXcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZURhdGEnKTtcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XG5cbiAgICAvLyBwcmVmZXIgdGVtcGxhdGVJZCBmcm9tIGJEZXRhaWxzOyBlbHNlIGZhbGxiYWNrIHRvIHdlYnNpdGVEYXRhLmhvbWVQYWdlSWRcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKFxuICAgICAgZGV0YWlscz8udGVtcGxhdGVJZCA/P1xuICAgICAgd2Vic2l0ZURhdGE/LmhvbWVQYWdlSWQgPz9cbiAgICAgICcnXG4gICAgKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL3YzL3dlYnNpdGUvJHt0ZW1wbGF0ZUlkfS9wYWdlcy9saXN0YFxuICAgICk7XG4gIH1cblxuICBnZXRFY29tbWVyY2VDb25maWdzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xuICAgICAgJzFmMTA2NTFmLTkyNTgtNmI2My05ZDIzLWEzZDY5MWFjZWI4OCc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9lY29tbWVyY2UvY29uZmlnL2FsbD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RWaWRlb0NhbGxEZXRhaWxzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvdmlkZW8tY2FsbGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlTG9jYXRvckRldGFpbHMocGluY29kZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvbmVhcmJ5P3BpbmNvZGU9JHtwaW5jb2RlfSZidXNpbmVzc0lkPSR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX1gXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVJbWFnZXNUb0J1c2luZXNzTGlicmFyeShtZWRpYVJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbGlicmFyeS9pbWFnZS9saWJyYXJ5L3NhdmVgLFxuICAgICAgbWVkaWFSZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIHJlZ2VuZXJhdGVUZXh0KHJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vY29udGVudC9zdWdnZXN0L3YyL3dlYnNpdGUvaW5kaXZpZHVhbGAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzSGVhZGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0vaGVhZGVyc2BcbiAgICApO1xuICB9XG4gIGdldEFsbFN0b3JlcyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgdXJsID0gJyc7XG4gICAgaWYgKHBheWxvYWQ/LnBpbmNvZGUgJiYgcGF5bG9hZC5waW5jb2RlLnRvU3RyaW5nKCkubGVuZ3RoID09IDYpIHtcbiAgICAgIHVybCA9IHVybCArIGAgJnBpbmNvZGU9JHtwYXlsb2FkLnBpbmNvZGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbEFwcG9pbnRtZW50U2VydmljZShwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbFN0YWZmKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgc3RhZmYvc3RhZmYvc3RvcmUtc3RhZmYtbGlzdD9zZXJ2aWNlSWQ9JHtwYXlsb2FkLnNlcnZpY2VJZH0mc3RvcmVJZD0ke3BheWxvYWQuc3RvcmVJZH0mYnVzaW5lc3NJZD0ke3BheWxvYWQuYnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlQnlJZChzdG9yZUlkOiBzdHJpbmcpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnLFxuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMDAsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9zdG9yZS9nZXRgLCBwYXlsb2FkKTtcbiAgfVxuICBwb3N0TmV3c0xldHRlcihlbWFpbDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvcmVnaXN0ZXJlZC9uZXdzbGV0dGVyP2VtYWlsPSR7ZW1haWx9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWAsXG4gICAgICAnJ1xuICAgICk7XG4gIH1cbiAgYWRkUmV2aWV3VG9Qcm9kdWN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYWRkL3Jldmlldz9vcmRlcklkPSR7cGF5bG9hZC5vcmRlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFN0b3Jlc09ycmEocGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0b3JlP3BhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdGFmZi9nZXQvJHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3NjaGVtZS9nZXRBbGxTY2hlbWVzL2Rhc2hib2FyZGBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0YXRlL2dldEFsbGApO1xuICB9XG5cbiAgZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZChzdGF0ZUlkOiBhbnksIHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9jaXR5L2dldEJ5U3RhdGU/c3RhdGVJZD0ke3N0YXRlSWR9JnBhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yZUJ5U2xhYihkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgYWRkVHJpYWxJdGVtKHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdCk7XG4gIH1cblxuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQocmVxdWVzdDogY2hlY2tJdGVtQWxyZWFkeUFkZGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L2NoZWNrL2l0ZW1gLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBkZWxldGVJdGVtRnJvbUNhcnQocmVxdWVzdDogc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBib29rQXBwb2ludG1lbnQocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGNyZWF0ZUVucm9sbG1lbnRTY2hlbWUoZW5yb2xsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIGAgIGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL2Vucm9sbG1lbnQvY3JlYXRlL25ldy90ZW1wP21hbnVhbFBheT10cnVlJmlzV2ViUmVxdWVzdD10cnVlXG5gLFxuICAgICAgZW5yb2xsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgZ2V0SG9tZUFwcG9pbnRtZW50TGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsT3JyYVNjaGVtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9wYXNzQm9vay9yZWRlbXB0aW9uL2Ftb3VudC9jaGVjaz91c2VyQ29kZT1DXzAwMDMxMzg4NSdcbiAgICApO1xuICB9XG5cbiAgcmVkZWVtU2NoZW1lKHNjaGVtZTogc3RyaW5nLCBjYXJ0SWQ6IGFueSwgYWN0aW9uOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVkZW1wdGlvbj9jYXJ0SWQ9JHtjYXJ0SWR9JnJlbW92ZVNjaGVtZT0ke2FjdGlvbn1gLFxuICAgICAgc2NoZW1lXG4gICAgKTtcbiAgfVxuXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRGaWVsZHNUb0Rpc3BsYXkoZmllbGRzTGlzdDogYW55W10pIHtcbiAgICBsZXQgbWFwOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0xpc3QpIHtcbiAgICAgIGZvciAobGV0IGZpZWxkR3JvdXAgb2YgZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBpZiAoIWZpZWxkR3JvdXAuZmllbGRTdGVwSWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBzdGVwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRTdGVwTmFtZVxuICAgICAgICAgID8gZmllbGRHcm91cC5maWVsZFN0ZXBOYW1lXG4gICAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICAgICAgbGV0IGdyb3VwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cE5hbWU7XG5cbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRbJ2ZpZWxkU3RlcElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkU3RlcElkO1xuICAgICAgICBmaWVsZFsnZmllbGRHcm91cElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkR3JvdXBJZDtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcbiAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdLnB1c2gobmV3RmllbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXRCb29raW5nU2xvdHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdib29raW5nL2F2YWlsYWJsZS1zbG90cycsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuICBnZXRCdXNpbmVzc0FwcG9pbnRtZW50U2V0dGluZ3MoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBzZXJ2aWNlL3NldHRpbmdzLyR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVDYXJ0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9ncm91cC9yZXNvbHZlLWNhcnQnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgaG9sZEJvb2tpbmcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvaG9sZCcsIHBheWxvYWQpO1xuICB9XG4gIGdldEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH1gKTtcbiAgfVxuICAvKiogRmV0Y2hlZCBvbiBjbGljaywgbm90IHByZS1jYWNoZWQgb24gdGhlIGJvb2tpbmcgLSBlY29tbWVyY2UgZ2VuZXJhdGVzL2NhY2hlcyB0aGUgaW52b2ljZSBQREZcbiAgICogdGhlIGZpcnN0IHRpbWUgaXQncyBhc2tlZCBmb3IsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBnYWluIGJ5IGZldGNoaW5nIGl0IGVhcmxpZXIuICovXG4gIGdldEJvb2tpbmdJbnZvaWNlVXJsKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9pbnZvaWNlLXVybGApO1xuICB9XG4gIGdlbmVyYXRlUGF5bWVudFRva2VuKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvdG9rZW4/Z3JvdXBJZD0ke2dyb3VwSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBjb21wbGV0ZUJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvY29tcGxldGUvJHtncm91cElkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0TXlCb29raW5ncyhidXNpbmVzc0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgYm9va2luZy9ncm91cC9teT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mdXNlcklkPSR7dXNlcklkfWBcbiAgICApO1xuICB9XG4gIGdldEdyb3VwTGluZXMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vbGluZXNgXG4gICAgKTtcbiAgfVxuICBjYW5jZWxCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHJlYXNvbiA/IGA/cmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlYXNvbil9YCA6ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2NhbmNlbCR7cXVlcnl9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRDYW5jZWxsYXRpb25Qb2xpY3koYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgcG9saWN5LW1hc3RlcnMvJHtidXNpbmVzc0lkfT9wb2xpY3lUeXBlPUNBTkNFTExBVElPTmBcbiAgICApO1xuICB9XG4gIGdldFJlc2NoZWR1bGVTbG90cyhncm91cElkOiBzdHJpbmcsIGRhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGUtc2xvdHNgLFxuICAgICAgeyBkYXRlIH1cbiAgICApO1xuICB9XG4gIHJlc2NoZWR1bGVCb29raW5nKGdyb3VwSWQ6IHN0cmluZywgbmV3RGF0ZTogc3RyaW5nLCBuZXdTdGFydFRpbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGVgLFxuICAgICAgeyBuZXdEYXRlLCBuZXdTdGFydFRpbWUsIHJlc2NoZWR1bGVkQnk6ICdDVVNUT01FUicgfVxuICAgICk7XG4gIH1cblxuICAvLyBBZGQgc2VydmljZShzKSB0byBhbiBhbHJlYWR5LWJvb2tlZCBhcHBvaW50bWVudCwgYmVmb3JlIHN0YXJ0IG9ubHkgLSBzZWVcbiAgLy8gZG9jcy91bmlmaWVkLWFwcG9pbnRtZW50LWpvdXJuZXkubWQgwqc1ZSAoYXBwb2ludG1lbnRfc2VydmljZSByZXBvKS4gc2VydmljZUlkcyBjYW4gYmUgb25lIG9yXG4gIC8vIG1hbnkgLSB0aGUgYmFja2VuZCBhcHBsaWVzL3BheXMgZm9yIHRoZSB3aG9sZSBiYXRjaCBpbiBvbmUgY2FsbC5cbiAgZ2V0QWRkU2VydmljZU9wdGlvbnMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vYWRkLXNlcnZpY2Uvb3B0aW9uc2BcbiAgICApO1xuICB9XG4gIGFkZFNlcnZpY2VUb0Jvb2tpbmcoZ3JvdXBJZDogc3RyaW5nLCBzZXJ2aWNlSWRzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9hZGQtc2VydmljZWAsXG4gICAgICB7IHNlcnZpY2VJZHMsIGluaXRpYXRlZEJ5OiAnQ1VTVE9NRVInIH1cbiAgICApO1xuICB9XG4gIGdlbmVyYXRlQWRkU2VydmljZVBheW1lbnRUb2tlbihncm91cElkOiBzdHJpbmcsIHNlcnZpY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcXVlcnkgPSBzZXJ2aWNlSWRzLm1hcCgoaWQpID0+IGBzZXJ2aWNlSWRzPSR7aWR9YCkuam9pbignJicpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvYWRkLW9uL3Rva2VuP2dyb3VwSWQ9JHtncm91cElkfSYke3F1ZXJ5fWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0QWRkT25QYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC9hZGQtb24vdmVyaWZ5L3N0YXR1cz9vcmRlcklkPSR7b3JkZXJJZH1gXG4gICAgKTtcbiAgfVxuICBnZW5lcmF0ZVRva2VuKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBleHQvY29ubmVjdC9zaW1wby90b2tlbj9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JnVzZXJUeXBlPUVYVEVSTkFMX1VTRVJgLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldEFsbEVucm9sbGVkU2NoZW1lcyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ2V4dC9jb25uZWN0L3NpbXBvL3NjaGVtZS9saXN0JyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGVucm9sbFNjaGVtZShwYXlsb2FkOiBhbnksIGNoZWNrQ2hhcmdlczogYm9vbGVhbikge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgaWYgKGNoZWNrQ2hhcmdlcykge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9jYXJ0L2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9pbml0aWF0ZS9wYXltZW50P21hbnVhbFBheT10cnVlJyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGdldEJlbmVmaXRTbGFiKHBhc3Nib29rSWQ/OiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9iZW5lZml0L3BlcmNlbnRhZ2VzP3Bhc3Nib29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRBbGxTdGFmZkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBzdGFmZi9zdGFmZi9saXN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0/aXNQYWdpbmF0aW9uPWZhbHNlYFxuICAgICk7XG4gIH1cbiAgcmVxdWVzdFJlZGVlbXB0aW9uKHBhc3Nib29rSWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXG4gICAgICBgcGFzc2Jvb2svcmVxdWVzdC9yZWRlbXB0aW9uP3Bhc3NCb29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBQYXNzYm9va0FwcFN0YXR1cyhiSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPVBhc3Nib29rYFxuICAgICk7XG4gIH1cbiAgY2hlY2tBcHBJbnN0YWxsZWQoYklkOiBhbnksIGFwcE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPSR7YXBwTmFtZX1gXG4gICAgKTtcbiAgfVxuICBnZXRSZWRlZW1Qb2ludHMoXG4gICAgYklkOiBhbnksXG4gICAgdXNlcklkOiBhbnksXG4gICAgZXZldFR5cGU6IHN0cmluZyxcbiAgICBvcmRlclZhbHVlOiBhbnksXG4gICAgcmV3YXJkUG9pbnRzOiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2FwaS9yZWZlcnJhbHMvYXZhaWxhYmxlLWFtb3VudD9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JmV2ZW50VHlwZT0ke2V2ZXRUeXBlfSZvcmRlclZhbHVlPSR7b3JkZXJWYWx1ZX0mcmV3YXJkUG9pbnRzPSR7cmV3YXJkUG9pbnRzfWBcbiAgICApO1xuICB9XG4gIHBheW1lbnRXaXRoQ29tcGxldGVQb2ludHMoY2FydElkOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL29yZGVyL3Jld2FyZHM/Y2FydElkPSR7Y2FydElkfWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFBhc3Nib29rRHVlcyhiSWQ6IGFueSwgdXNlcklkOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL3BheW1lbnQvZHVlcz9wYWdlPTAmc2l6ZT0xMDAwJmJ1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFRva2VuKCkge1xuICAgIGxldCB0b2tlbiA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbiAgZ2V0QWxsVHJhbnNhY3Rpb25zKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBkYXNoYm9hcmQvdjMvdHJhbnNhY3Rpb25zL3BhZ2VgLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRTY2hlbWVEZXRhaWxzKHNjaGVtZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9nZXQvc2NoZW1lP2lkPSR7c2NoZW1lSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIGdldE1ldGFsUHJpY2Uoc3RvcmVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9tZXRhbC9wcmljZXM/aWQ9JHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlTGVhZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9jb250YWN0YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QXBwb2ludG1lbnRQYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC92ZXJpZnkvc3RhdHVzP29yZGVySWQ9JHtvcmRlcklkfWBcbiAgICApO1xuICB9XG4gIGdldE90cEZvckxvZ2luKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZW5lcmF0ZS1vdHBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICAvKiogTmV3IE9UUCBBUEk6IFBVVCAvZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cFxuICAgKiAgQm9keTogeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH1cbiAgICogIFJlc3BvbnNlOiB7IGRhdGE6IHsgaXNFeGlzdGluZ1VzZXI6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyB9IH1cbiAgICovXG4gIHNlbmRPdHBWMihpZGVudGlmaWVyOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cGAsIHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBidXNpbmVzc0lkLFxuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5T3RwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvdmVyaWZ5LW90cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBsZXRlU2lnbnVwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvY29tcGxldGUtc2lnbnVwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgbG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvbG9naW4tcGFzc3dvcmRgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBmbHVzaChldmVudHNUb1NlbmQ6IGFueSkge1xuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvYW5hbHl0aWNzL2JhdGNoJywgZXZlbnRzVG9TZW5kKVxuICAgICAgLnN1YnNjcmliZSh7IGVycm9yOiAoKSA9PiB7IH0gfSk7XG4gIH1cblxuICBnZXRQb3B1bGFyU2VhcmNoZXMoKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz9cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz9cbiAgICAgICcxZjEyMTA4MS1kYmVhLTY1YzYtYWQ4OS0xZGZlOGNkZGE5MDInO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9wb3B1bGFyLXNlYXJjaGVzP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0TWVudUl0ZW1zKG1lbnVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvbWVudS8ke21lbnVJZH1gKTtcbiAgfVxuXG4gIC8vIGdldEhvbWVSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2hvbWU/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0yMGApXG4gIC8vIH1cblxuICAvLyBnZXRDYXJ0UmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9jYXJ0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MTVgKVxuICAvLyB9XG5cbiAgLy8gZ2V0UHJvZHVjdERlc2NyaXB0aW9uUmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9wZHA/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xMGApXG4gIC8vIH1cbn1cbiJdfQ==
@@ -0,0 +1,56 @@
1
+ // Path-based links into the product list page: /list/{category}/{collection}.
2
+ // Slugs come from the backend `slugName` (`Mens Wear` -> `mens-wear`). A row without one yet
3
+ // falls back to the same rule applied to its name, so the link still resolves.
4
+ export function slugFromName(name) {
5
+ return (name ?? '')
6
+ .trim()
7
+ .toLowerCase()
8
+ .replace(/[^\w\s-]/g, '')
9
+ .replace(/[\s_]+/g, '-')
10
+ .replace(/-+/g, '-')
11
+ .replace(/^-|-$/g, '');
12
+ }
13
+ export function listSlug(item) {
14
+ if (!item)
15
+ return '';
16
+ if (typeof item === 'string')
17
+ return slugFromName(item);
18
+ const slug = item.slugName?.trim();
19
+ if (slug)
20
+ return slug;
21
+ return slugFromName(item.categoryName ?? item.collectionName ?? item.refName ?? item.name);
22
+ }
23
+ /** Commands for `router.navigate`, e.g. `['/list', 'mens-wear', 'summer-wear']`. */
24
+ export function listPath(target) {
25
+ const category = listSlug(target.category);
26
+ const collection = listSlug(target.collection);
27
+ const commands = ['/list'];
28
+ if (category)
29
+ commands.push(category);
30
+ if (collection)
31
+ commands.push(collection);
32
+ return commands;
33
+ }
34
+ /**
35
+ * Slug segments of a list page pathname, at most `[category, collection]`.
36
+ * `/list/mens-wear/summer-wear` and a host route that serves the list at the root,
37
+ * `/mens-wear/summer-wear`, both give `['mens-wear', 'summer-wear']`.
38
+ */
39
+ export function parseListPath(pathname) {
40
+ const segments = (pathname ?? '')
41
+ .split('?')[0]
42
+ .split('#')[0]
43
+ .split('/')
44
+ .filter(Boolean)
45
+ .map((segment) => {
46
+ try {
47
+ return decodeURIComponent(segment);
48
+ }
49
+ catch {
50
+ return segment;
51
+ }
52
+ });
53
+ const listIndex = segments.indexOf('list');
54
+ return listIndex >= 0 ? segments.slice(listIndex + 1, listIndex + 3) : segments.slice(0, 2);
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1yb3V0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi91dGlscy9saXN0LXJvdXRlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEVBQThFO0FBQzlFLDZGQUE2RjtBQUM3RiwrRUFBK0U7QUFVL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFvQjtJQUMvQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUNoQixJQUFJLEVBQUU7U0FDTixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUN4QixPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztTQUN2QixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUNuQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQWdDO0lBQ3ZELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQXdGO0lBQy9HLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLElBQUksUUFBUTtRQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsSUFBSSxVQUFVO1FBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsUUFBZ0I7SUFDNUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1NBQzlCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNmLElBQUksQ0FBQztZQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQUMsT0FBTyxPQUFPLENBQUM7UUFBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxPQUFPLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQYXRoLWJhc2VkIGxpbmtzIGludG8gdGhlIHByb2R1Y3QgbGlzdCBwYWdlOiAvbGlzdC97Y2F0ZWdvcnl9L3tjb2xsZWN0aW9ufS5cbi8vIFNsdWdzIGNvbWUgZnJvbSB0aGUgYmFja2VuZCBgc2x1Z05hbWVgIChgTWVucyBXZWFyYCAtPiBgbWVucy13ZWFyYCkuIEEgcm93IHdpdGhvdXQgb25lIHlldFxuLy8gZmFsbHMgYmFjayB0byB0aGUgc2FtZSBydWxlIGFwcGxpZWQgdG8gaXRzIG5hbWUsIHNvIHRoZSBsaW5rIHN0aWxsIHJlc29sdmVzLlxuXG5pbnRlcmZhY2UgU2x1Z2dhYmxlIHtcbiAgc2x1Z05hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBjYXRlZ29yeU5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBjb2xsZWN0aW9uTmFtZT86IHN0cmluZyB8IG51bGw7XG4gIHJlZk5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsdWdGcm9tTmFtZShuYW1lPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIHJldHVybiAobmFtZSA/PyAnJylcbiAgICAudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15cXHdcXHMtXS9nLCAnJylcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoLy0rL2csICctJylcbiAgICAucmVwbGFjZSgvXi18LSQvZywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdFNsdWcoaXRlbT86IFNsdWdnYWJsZSB8IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAoIWl0ZW0pIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykgcmV0dXJuIHNsdWdGcm9tTmFtZShpdGVtKTtcbiAgY29uc3Qgc2x1ZyA9IGl0ZW0uc2x1Z05hbWU/LnRyaW0oKTtcbiAgaWYgKHNsdWcpIHJldHVybiBzbHVnO1xuICByZXR1cm4gc2x1Z0Zyb21OYW1lKGl0ZW0uY2F0ZWdvcnlOYW1lID8/IGl0ZW0uY29sbGVjdGlvbk5hbWUgPz8gaXRlbS5yZWZOYW1lID8/IGl0ZW0ubmFtZSk7XG59XG5cbi8qKiBDb21tYW5kcyBmb3IgYHJvdXRlci5uYXZpZ2F0ZWAsIGUuZy4gYFsnL2xpc3QnLCAnbWVucy13ZWFyJywgJ3N1bW1lci13ZWFyJ11gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RQYXRoKHRhcmdldDogeyBjYXRlZ29yeT86IFNsdWdnYWJsZSB8IHN0cmluZyB8IG51bGw7IGNvbGxlY3Rpb24/OiBTbHVnZ2FibGUgfCBzdHJpbmcgfCBudWxsIH0pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gbGlzdFNsdWcodGFyZ2V0LmNhdGVnb3J5KTtcbiAgY29uc3QgY29sbGVjdGlvbiA9IGxpc3RTbHVnKHRhcmdldC5jb2xsZWN0aW9uKTtcbiAgY29uc3QgY29tbWFuZHMgPSBbJy9saXN0J107XG4gIGlmIChjYXRlZ29yeSkgY29tbWFuZHMucHVzaChjYXRlZ29yeSk7XG4gIGlmIChjb2xsZWN0aW9uKSBjb21tYW5kcy5wdXNoKGNvbGxlY3Rpb24pO1xuICByZXR1cm4gY29tbWFuZHM7XG59XG5cbi8qKlxuICogU2x1ZyBzZWdtZW50cyBvZiBhIGxpc3QgcGFnZSBwYXRobmFtZSwgYXQgbW9zdCBgW2NhdGVnb3J5LCBjb2xsZWN0aW9uXWAuXG4gKiBgL2xpc3QvbWVucy13ZWFyL3N1bW1lci13ZWFyYCBhbmQgYSBob3N0IHJvdXRlIHRoYXQgc2VydmVzIHRoZSBsaXN0IGF0IHRoZSByb290LFxuICogYC9tZW5zLXdlYXIvc3VtbWVyLXdlYXJgLCBib3RoIGdpdmUgYFsnbWVucy13ZWFyJywgJ3N1bW1lci13ZWFyJ11gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaXN0UGF0aChwYXRobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBzZWdtZW50cyA9IChwYXRobmFtZSA/PyAnJylcbiAgICAuc3BsaXQoJz8nKVswXVxuICAgIC5zcGxpdCgnIycpWzBdXG4gICAgLnNwbGl0KCcvJylcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgdHJ5IHsgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzZWdtZW50KTsgfSBjYXRjaCB7IHJldHVybiBzZWdtZW50OyB9XG4gICAgfSk7XG4gIGNvbnN0IGxpc3RJbmRleCA9IHNlZ21lbnRzLmluZGV4T2YoJ2xpc3QnKTtcbiAgcmV0dXJuIGxpc3RJbmRleCA+PSAwID8gc2VnbWVudHMuc2xpY2UobGlzdEluZGV4ICsgMSwgbGlzdEluZGV4ICsgMykgOiBzZWdtZW50cy5zbGljZSgwLCAyKTtcbn1cbiJdfQ==