@ieeesa-npm/groups 0.15.17 → 0.15.19

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/assets/constants.json +27 -1
  2. package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +8 -10
  3. package/esm2022/lib/components/create-group/create-group.component.mjs +2 -2
  4. package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +7 -55
  5. package/esm2022/lib/components/interest-form/interest-form.component.mjs +3 -3
  6. package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +3 -3
  7. package/esm2022/lib/components/interest-responses/interest-responses.component.mjs +119 -0
  8. package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +370 -15
  9. package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +106 -8
  10. package/esm2022/lib/components/view-roster/view-roster.component.mjs +2 -2
  11. package/esm2022/lib/groups.component.mjs +58 -9
  12. package/esm2022/lib/models/interest-response.model.mjs +18 -0
  13. package/esm2022/lib/models/roster-import.model.mjs +1 -1
  14. package/esm2022/lib/services/groups.service.mjs +91 -7
  15. package/esm2022/public-api.mjs +3 -1
  16. package/fesm2022/ieeesa-npm-groups.mjs +821 -212
  17. package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
  18. package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +0 -10
  19. package/lib/components/interest-responses/interest-responses.component.d.ts +80 -0
  20. package/lib/components/interested-rosters/interested-rosters.component.d.ts +143 -9
  21. package/lib/components/roster-import-history/roster-import-history.component.d.ts +42 -4
  22. package/lib/groups.component.d.ts +9 -4
  23. package/lib/models/interest-response.model.d.ts +209 -0
  24. package/lib/models/roster-import.model.d.ts +12 -0
  25. package/lib/services/groups.service.d.ts +66 -10
  26. package/package.json +1 -1
  27. package/public-api.d.ts +2 -0
  28. package/esm2022/lib/assets/country-calling-codes.mjs +0 -83
  29. package/lib/assets/country-calling-codes.d.ts +0 -14
@@ -0,0 +1,18 @@
1
+ /* eslint-disable no-unused-vars */
2
+ /**
3
+ * Interest-form field types frozen on each stored response via the backend's
4
+ * {@code field_type_snapshot} column. Mirrors the BE `FieldType` enum
5
+ * (sa-saapps-groups-api: org.ieee.standards.groups.model.FieldType) and drives
6
+ * how {@link InterestFormResponse.answerValue} is rendered in the admin
7
+ * "View Responses" dialog (single value vs. a list for CHECKBOX).
8
+ */
9
+ export var InterestFieldType;
10
+ (function (InterestFieldType) {
11
+ InterestFieldType["TEXT"] = "TEXT";
12
+ InterestFieldType["TEXTAREA"] = "TEXTAREA";
13
+ InterestFieldType["SELECT"] = "SELECT";
14
+ InterestFieldType["CHECKBOX"] = "CHECKBOX";
15
+ InterestFieldType["RADIO"] = "RADIO";
16
+ InterestFieldType["DATE"] = "DATE";
17
+ })(InterestFieldType || (InterestFieldType = {}));
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJlc3QtcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9tb2RlbHMvaW50ZXJlc3QtcmVzcG9uc2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBRW5DOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBTixJQUFZLGlCQU9YO0FBUEQsV0FBWSxpQkFBaUI7SUFDM0Isa0NBQWEsQ0FBQTtJQUNiLDBDQUFxQixDQUFBO0lBQ3JCLHNDQUFpQixDQUFBO0lBQ2pCLDBDQUFxQixDQUFBO0lBQ3JCLG9DQUFlLENBQUE7SUFDZixrQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVBXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFPNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG5cclxuLyoqXHJcbiAqIEludGVyZXN0LWZvcm0gZmllbGQgdHlwZXMgZnJvemVuIG9uIGVhY2ggc3RvcmVkIHJlc3BvbnNlIHZpYSB0aGUgYmFja2VuZCdzXHJcbiAqIHtAY29kZSBmaWVsZF90eXBlX3NuYXBzaG90fSBjb2x1bW4uIE1pcnJvcnMgdGhlIEJFIGBGaWVsZFR5cGVgIGVudW1cclxuICogKHNhLXNhYXBwcy1ncm91cHMtYXBpOiBvcmcuaWVlZS5zdGFuZGFyZHMuZ3JvdXBzLm1vZGVsLkZpZWxkVHlwZSkgYW5kIGRyaXZlc1xyXG4gKiBob3cge0BsaW5rIEludGVyZXN0Rm9ybVJlc3BvbnNlLmFuc3dlclZhbHVlfSBpcyByZW5kZXJlZCBpbiB0aGUgYWRtaW5cclxuICogXCJWaWV3IFJlc3BvbnNlc1wiIGRpYWxvZyAoc2luZ2xlIHZhbHVlIHZzLiBhIGxpc3QgZm9yIENIRUNLQk9YKS5cclxuICovXHJcbmV4cG9ydCBlbnVtIEludGVyZXN0RmllbGRUeXBlIHtcclxuICBURVhUID0gJ1RFWFQnLFxyXG4gIFRFWFRBUkVBID0gJ1RFWFRBUkVBJyxcclxuICBTRUxFQ1QgPSAnU0VMRUNUJyxcclxuICBDSEVDS0JPWCA9ICdDSEVDS0JPWCcsXHJcbiAgUkFESU8gPSAnUkFESU8nLFxyXG4gIERBVEUgPSAnREFURScsXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHNpbmdsZSBzdWJtaXR0ZWQgYW5zd2VyIHRvIGFuIGludGVyZXN0LWZvcm0gcXVlc3Rpb24sIGFzIHJldHVybmVkIGJ5IHRoZVxyXG4gKiBiYWNrZW5kIGZyb21cclxuICoge0Bjb2RlIEdFVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L3tpbnRlcmVzdElkfS9yZXNwb25zZXN9LlxyXG4gKlxyXG4gKiBNaXJyb3JzIHRoZSBVSS12aWV3IHByb2plY3Rpb24gb2YgdGhlIEJFIGBJbnRlcmVzdEZvcm1SZXNwb25zZWAgZW50aXR5XHJcbiAqIChzYS1zYWFwcHMtZ3JvdXBzLWFwaTogb3JnLmllZWUuc3RhbmRhcmRzLmdyb3Vwcy5tb2RlbC5JbnRlcmVzdEZvcm1SZXNwb25zZSk7XHJcbiAqIG9ubHkgdGhlIGZpZWxkcyBhbm5vdGF0ZWQgd2l0aCB0aGUgQkUgYEBKc29uVmlldyhVaVZpZXcpYCBhcmUgc2VyaWFsaXplZCDigJRcclxuICogdGhlIGF1ZGl0L2FwcF9pZCBjb2x1bW5zIGFyZSBgQEpzb25JZ25vcmVgIGFuZCBuZXZlciBhcnJpdmUgb24gdGhlIGNsaWVudC5cclxuICpcclxuICoge0BsaW5rIHF1ZXN0aW9uTGFiZWxTbmFwc2hvdH0gYW5kIHtAbGluayBmaWVsZFR5cGVTbmFwc2hvdH0gZnJlZXplIHRoZVxyXG4gKiBxdWVzdGlvbiBsYWJlbCBhbmQgZmllbGQgdHlwZSBhcyBjb25maWd1cmVkIGF0IHN1Ym1pdCB0aW1lLCBzbyBsYXRlciBmb3JtXHJcbiAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcHBseSBvbmx5IHRvIG5ldyBzdWJtaXNzaW9ucyAoUjguNiwgUjguOCkuXHJcbiAqIHtAbGluayBhbnN3ZXJWYWx1ZX0gaXMgYSBKU09OQiBwYXNzdGhyb3VnaDogaXQgYXJyaXZlcyBhcyBhIHBsYWluIHN0cmluZyBmb3JcclxuICogc2luZ2xlLXZhbHVlIGZpZWxkcyAoVEVYVC9URVhUQVJFQS9TRUxFQ1QvUkFESU8vREFURSkgYW5kIGFzIGEgc3RyaW5nW10gZm9yXHJcbiAqIG11bHRpLXNlbGVjdCAoQ0hFQ0tCT1gpLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmVzdEZvcm1SZXNwb25zZSB7XHJcbiAgLyoqIFJlc3BvbnNlIHJvdyBpZGVudGlmaWVyIChlLmcuIFwiSUZSX1NBQVBQU18uLi5cIikuICovXHJcbiAgcmVzcG9uc2VJZDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgaW50ZXJlc3QgcmVjb3JkIHRoaXMgYW5zd2VyIGJlbG9uZ3MgdG8gKGUuZy4gXCJHSU5UX1NBQVBQU18uLi5cIikuICovXHJcbiAgaW50ZXJlc3RJZDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgcXVlc3Rpb24gdGhpcyBhbnN3ZXIgaXMgZm9yIChlLmcuIFwiSUZRX1NBQVBQU18uLi5cIiksIHdoZW4gYXZhaWxhYmxlLiAqL1xyXG4gIHF1ZXN0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgLyoqIFF1ZXN0aW9uIGxhYmVsIGZyb3plbiBhdCBzdWJtaXQgdGltZSAoUjguNiwgUjguOCkuICovXHJcbiAgcXVlc3Rpb25MYWJlbFNuYXBzaG90Pzogc3RyaW5nO1xyXG4gIC8qKiBGaWVsZCB0eXBlIGZyb3plbiBhdCBzdWJtaXQgdGltZTsgc2VlIHtAbGluayBJbnRlcmVzdEZpZWxkVHlwZX0uICovXHJcbiAgZmllbGRUeXBlU25hcHNob3Q/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU3VibWl0dGVkIGFuc3dlci4gQSBzdHJpbmcgZm9yIHNpbmdsZS12YWx1ZSBmaWVsZHM7IGEgc3RyaW5nW10gZm9yXHJcbiAgICogQ0hFQ0tCT1guIGBudWxsYC91bmRlZmluZWQgd2hlbiB0aGUgcXVlc3Rpb24gd2FzIGxlZnQgdW5hbnN3ZXJlZC5cclxuICAgKi9cclxuICBhbnN3ZXJWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIG9yZ2FuaXphdGlvbiBhZmZpbGlhdGlvbiBvbiBhbiBpbnRlcmVzdGVkLXJvc3RlciByb3csIGFzIHJldHVybmVkXHJcbiAqIGluc2lkZSB7QGxpbmsgR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlldy5hZmZpbGlhdGlvbn0uIE1pcnJvcnMgdGhlIFVJLXZpZXdcclxuICogcHJvamVjdGlvbiBvZiB0aGUgQkUgYE9yZ2FuaXphdGlvbmAgZW50aXR5IChvbmx5IGBvcmdJZGAvYG9yZ05hbWVgIGFyZVxyXG4gKiBgQEpzb25WaWV3KFVpVmlldylgOyB0aGUgcmVzdCBhcmUgYEBKc29uSWdub3JlYCkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZXN0QWZmaWxpYXRpb24ge1xyXG4gIC8qKiBPcmdhbml6YXRpb24gaWQgKGUuZy4gXCJPUkdfU0FBUFBTXy4uLlwiKS4gKi9cclxuICBvcmdJZDogc3RyaW5nO1xyXG4gIC8qKiBPcmdhbml6YXRpb24gZGlzcGxheSBuYW1lLiAqL1xyXG4gIG9yZ05hbWU6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIG1lbWJlcnNoaXAgbGV2ZWwgKHJvbGUpIG9uIGFuIGludGVyZXN0ZWQtcm9zdGVyIHJvdywgYXMgcmV0dXJuZWRcclxuICogaW5zaWRlIHtAbGluayBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3Lm1lbWJlckxldmVsfS4gTWlycm9ycyB0aGUgVUktdmlld1xyXG4gKiBwcm9qZWN0aW9uIG9mIHRoZSBCRSByb2xlIG9iamVjdDogdGhlIGxldmVsIGlzIGEgZ3JvdXAgcm9sZSwgc28gdGhlIGZpZWxkc1xyXG4gKiBhcmUgcm9sZS1zaGFwZWQgKHtAbGluayByb2xlSWR9L3tAbGluayByb2xlTmFtZX0pLiBUaGUgbGlzdCBjYXJyaWVzIGF0IG1vc3RcclxuICogb25lIGVsZW1lbnQg4oCUIHRoZSBpbnRlcmVzdCdzIGN1cnJlbnQvYXNzaWduZWQgbWVtYmVyc2hpcCBsZXZlbCAoZW1wdHkgd2hlblxyXG4gKiBub25lIGlzIGFzc2lnbmVkKS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJlc3RNZW1iZXJzaGlwTGV2ZWwge1xyXG4gIC8qKiBSb2xlIGlkIG9mIHRoZSBtZW1iZXJzaGlwIGxldmVsIChlLmcuIFwiUk9MRV9TQUFQUFNfLi4uXCIpLiAqL1xyXG4gIHJvbGVJZDogc3RyaW5nO1xyXG4gIC8qKiBSb2xlIHR5cGUgaWQsIHdoZW4gY2F0ZWdvcml6ZWQ7IGBudWxsYCBvdGhlcndpc2UuICovXHJcbiAgcm9sZVR5cGU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIC8qKiBEaXNwbGF5IG5hbWUgb2YgdGhlIGxldmVsIChlLmcuIFwiTWVtYmVyXCIpLiBCb3VuZCBhcyB0aGUgZHJvcGRvd24gdmFsdWUuICovXHJcbiAgcm9sZU5hbWU6IHN0cmluZztcclxuICAvKiogSHVtYW4tcmVhZGFibGUgcm9sZSB0eXBlIG5hbWU7IGBudWxsYCBvdGhlcndpc2UuICovXHJcbiAgcm9sZVR5cGVOYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAvKiogRGlzcGxheSBvcmRlciB3aXRoaW4gdGhlIGdyb3VwIHR5cGUncyByb2xlIGNhdGFsb2cuICovXHJcbiAgdmlld09yZGVyPzogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogT25lIGludGVyZXN0ZWQtdXNlcnMgcm9zdGVyIHJvdyBmb3IgYSBncm91cCwgYXMgcmV0dXJuZWQgYnkgdGhlIGJhY2tlbmQgZnJvbVxyXG4gKiB7QGNvZGUgR0VUIHthcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvZ3JvdXAve2dyb3VwSWR9L3Jlc3BvbnNlc30uXHJcbiAqXHJcbiAqIE1pcnJvcnMgdGhlIFVJLXZpZXcgcHJvamVjdGlvbiBvZiB0aGUgQkUgYEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXdgIHJlYWRcclxuICogb2JqZWN0IChzYS1zYWFwcHMtZ3JvdXBzLWFwaTpcclxuICogb3JnLmllZWUuc3RhbmRhcmRzLmdyb3Vwcy5tb2RlbC5Hcm91cEludGVyZXN0UmVzcG9uc2VWaWV3KS4gSXQgY29tYmluZXMgdGhlXHJcbiAqIGludGVyZXN0IHJlY29yZCB3aXRoIHRoZSBpbnRlcmVzdGVkIHVzZXIncyBuYW1lL2VtYWlsLCB0aGVpciBvcmdhbml6YXRpb25cclxuICogYWZmaWxpYXRpb25zIGZvciB0aGUgZ3JvdXAsIHRoZSBzdWJtaXR0ZWQgdGltZXN0YW1wLCB0aGUgZ3JvdXAncyBkZWZhdWx0XHJcbiAqIG1lbWJlcnNoaXAgbGV2ZWwgKGF0IG1vc3Qgb25lIGVsZW1lbnQpLCBhbmQgdGhlIGdyb3VwJ3MgdHlwZSBpZCwgc28gdGhlIHdob2xlXHJcbiAqIFwiSW50ZXJlc3RlZFwiIHJvc3RlciByZW5kZXJzIGluIGEgc2luZ2xlIGNhbGwgKFI4LjcpLiBPbmx5IGBASnNvblZpZXcoVWlWaWV3KWBcclxuICogZmllbGRzIGFyZSBzZXJpYWxpemVkOyB0ZW5hbnQgYXBwX2lkIGFuZCBhdWRpdCBjb2x1bW5zIHN0YXkgaGlkZGVuLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3IHtcclxuICAvKiogVGhlIGludGVyZXN0IHJlY29yZCBpZCAoZS5nLiBcIkdJTlRfU0FBUFBTXy4uLlwiKS4gKi9cclxuICBpbnRlcmVzdElkOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBncm91cCB0aGUgaW50ZXJlc3QgYmVsb25ncyB0byAoZS5nLiBcIkdSUF9TQUFQUFNfLi4uXCIpLiAqL1xyXG4gIGdyb3VwSWQ/OiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBpbnRlcmVzdGVkIHVzZXIncyBpZCAoZS5nLiBcIlVzZXJfTkVTQ18uLi5cIikuICovXHJcbiAgdXNlcklkOiBzdHJpbmc7XHJcbiAgLyoqIEludGVyZXN0ZWQgdXNlcidzIGRpc3BsYXkgbmFtZS4gKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEludGVyZXN0ZWQgdXNlcidzIGVtYWlsIGFkZHJlc3MuICovXHJcbiAgZW1haWw6IHN0cmluZztcclxuICAvKiogT3JnYW5pemF0aW9uIGFmZmlsaWF0aW9ucyBmb3IgdGhlIGdyb3VwIChpZCArIG5hbWUpLiAqL1xyXG4gIGFmZmlsaWF0aW9uOiBJbnRlcmVzdEFmZmlsaWF0aW9uW107XHJcbiAgLyoqIFN1Ym1pdHRlZCB0aW1lc3RhbXAgKElTTyBkYXRlIHN0cmluZzsgQkUgYERhdGVgKS4gKi9cclxuICBzdWJtaXR0ZWRPbjogc3RyaW5nO1xyXG4gIC8qKiBHcm91cCdzIGRlZmF1bHQgbWVtYmVyc2hpcCBsZXZlbCAoMCBvciAxIGVsZW1lbnQpLiAqL1xyXG4gIG1lbWJlckxldmVsOiBJbnRlcmVzdE1lbWJlcnNoaXBMZXZlbFtdO1xyXG4gIC8qKiBUaGUgZ3JvdXAncyBncm91cCB0eXBlIGlkLiAqL1xyXG4gIGdyb3VwVHlwZUlkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUmVxdWVzdCBwYXlsb2FkIGZvciB0aGUgaW50ZXJlc3RlZC11c2VycyByb3N0ZXIgbGlzdCBlbmRwb2ludFxyXG4gKiAoe0Bjb2RlIFBPU1Qge2FwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9ncm91cC97Z3JvdXBJZH0vcmVzcG9uc2VzfSkuXHJcbiAqXHJcbiAqIEZvbGxvd3MgdGhlIHJlcG8gcGF5bG9hZCBjb252ZW50aW9uIG9mIHdyYXBwaW5nIHRoZSByZXF1ZXN0IGJvZHkgaW4gYVxyXG4gKiB7QGNvZGUgcGF5bG9hZH0ga2V5IChtYXRjaGluZyBGaWx0ZXJVc2Vyc1BheWxvYWQsIFNlYXJjaFVzZXJzUGF5bG9hZCwgZXRjLikuXHJcbiAqIFN1cHBvcnRzIHNlcnZlci1zaWRlIHNlYXJjaCAoe0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdEJvZHkuc2VhcmNoQnlOYW1lT3JFbWFpbH0pXHJcbiAqIGFuZCBwYWdpbmF0aW9uL3NvcnRpbmcgc28gdGhlIFwiSW50ZXJlc3RlZCBSb3N0ZXJzXCIgdGFibGUgY2FuIHBhZ2UgYW5kIHNvcnRcclxuICogbGFyZ2Ugcm9zdGVycyB3aXRob3V0IGxvYWRpbmcgZXZlcnl0aGluZyBjbGllbnQtc2lkZS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJlc3RlZFJvc3RlcnNSZXF1ZXN0UGF5bG9hZCB7XHJcbiAgcGF5bG9hZDogSW50ZXJlc3RlZFJvc3RlcnNSZXF1ZXN0Qm9keTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBib2R5IG9mIHtAbGluayBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkfS4gQWxsIGZpZWxkcyBhcmUgc2VudCB0b1xyXG4gKiB0aGUgYmFja2VuZCB0byBmaWx0ZXIsIHBhZ2UgYW5kIHNvcnQgdGhlIGludGVyZXN0ZWQtdXNlcnMgcm9zdGVyLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RCb2R5IHtcclxuICAvKiogRnJlZS10ZXh0IHNlYXJjaCB0ZXJtIG1hdGNoZWQgYWdhaW5zdCB0aGUgcmVxdWVzdGVyJ3MgbmFtZSBvciBlbWFpbC4gKi9cclxuICBzZWFyY2hCeU5hbWVPckVtYWlsOiBzdHJpbmc7XHJcbiAgLyoqIFplcm8tYmFzZWQgcm93IG9mZnNldCBmb3IgdGhlIHJlcXVlc3RlZCBwYWdlLiAqL1xyXG4gIG9mZnNldDogbnVtYmVyO1xyXG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkgKGUuZy4gXCJuYW1lXCIsIFwic3VibWl0dGVkT25cIikuICovXHJcbiAgc29ydGVkQnk6IHN0cmluZztcclxuICAvKiogU29ydCBkaXJlY3Rpb24gKGUuZy4gXCJhc2NcIiAvIFwiZGVzY1wiKS4gKi9cclxuICBzb3J0ZWRPcmRlckJ5OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgYGJvZHlgIG9mIHRoZSBpbnRlcmVzdGVkLXVzZXJzIHJvc3RlciBsaXN0IHJlc3BvbnNlLCBhcyByZXR1cm5lZCBieVxyXG4gKiB7QGNvZGUgUE9TVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L2dyb3VwL3tncm91cElkfS9yZXNwb25zZXN9LlxyXG4gKlxyXG4gKiBUaGUgcm93cyBsaXZlIHVuZGVyIHtAbGluayBkYXRhfTsgdGhlIHJlbWFpbmluZyBmaWVsZHMgZWNobyB0aGUgcGFnaW5nIHN0YXRlXHJcbiAqICh7QGxpbmsgdG90YWxSZWNvcmRzfSwge0BsaW5rIG9mZnNldH0sIHtAbGluayBwYWdlU2l6ZX0pIHNvIHRoZSB0YWJsZSBjYW5cclxuICogZHJpdmUgcGFnaW5hdGlvbi4gVGhlIG91dGVyIGVudmVsb3BlICh7QGNvZGUgc3RhdHVzfS97QGNvZGUgbWVzc2FnZX0vXHJcbiAqIHtAY29kZSBib2R5fSkgaXMgdW53cmFwcGVkIGJ5IHRoZSBIVFRQIGxheWVyLCBzbyB0aGlzIG1vZGVscyB0aGUgYGJvZHlgIG9ubHkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZXN0ZWRSb3N0ZXJzUmVzcG9uc2Uge1xyXG4gIC8qKiBUaGUgaW50ZXJlc3RlZC1yb3N0ZXIgcm93cyBmb3IgdGhlIHJlcXVlc3RlZCBwYWdlLiAqL1xyXG4gIGRhdGE6IEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXdbXTtcclxuICAvKiogVG90YWwgbnVtYmVyIG9mIGludGVyZXN0ZWQtcm9zdGVyIHJvd3MgYWNyb3NzIGFsbCBwYWdlcy4gKi9cclxuICB0b3RhbFJlY29yZHM6IG51bWJlcjtcclxuICAvKiogWmVyby1iYXNlZCByb3cgb2Zmc2V0IG9mIHRoZSByZXR1cm5lZCBwYWdlLiAqL1xyXG4gIG9mZnNldDogbnVtYmVyO1xyXG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZSB1c2VkIGZvciB0aGlzIHJlc3BvbnNlLiAqL1xyXG4gIHBhZ2VTaXplOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHNpbmdsZSBpbnRlcmVzdGVkLXJvc3RlciByb3cgc2hvd24gaW4gdGhlIFJvc3RlciBNYW5hZ2VtZW50IFwiSW50ZXJlc3RlZFxyXG4gKiBSb3N0ZXJzXCIgdGFibGUuIENhcnJpZXMgdGhlIHtAbGluayBpbnRlcmVzdElkfSBuZWVkZWQgdG8gZmV0Y2ggdGhhdFxyXG4gKiByZXF1ZXN0ZXIncyBzdG9yZWQgcmVzcG9uc2VzIHZpYSB0aGUgaW50ZXJlc3QtcmVzcG9uc2VzIGVuZHBvaW50IGFuZCB0b1xyXG4gKiBvdmVycmlkZSB0aGVpciBtZW1iZXJzaGlwIGxldmVsLiBSb3dzIGFyZSBwcm9kdWNlZCBieSBtYXBwaW5nIHRoZSBiYWNrZW5kXHJcbiAqIHtAbGluayBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3fSBsaXN0IG9udG8gdGhpcyBmbGF0dGVuZWQgZGlzcGxheSBzaGFwZS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJlc3RlZFJvc3RlciB7XHJcbiAgLyoqIFRoZSBpbnRlcmVzdCByZWNvcmQgaWQgKGUuZy4gXCJHSU5UX1NBQVBQU18uLi5cIiksIHVzZWQgZm9yIHJlc3BvbnNlcyArIG92ZXJyaWRlLiAqL1xyXG4gIGludGVyZXN0SWQ6IHN0cmluZztcclxuICAvKiogVGhlIGludGVyZXN0ZWQgdXNlcidzIGlkIChlLmcuIFwiVXNlcl9ORVNDXy4uLlwiKSwgdXNlZCBmb3IgdGhlIGxldmVsIG92ZXJyaWRlLiAqL1xyXG4gIHVzZXJJZDogc3RyaW5nO1xyXG4gIC8qKiBSZXF1ZXN0ZXIgZGlzcGxheSBuYW1lLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogUmVxdWVzdGVyIGVtYWlsIGFkZHJlc3MuICovXHJcbiAgZW1haWw6IHN0cmluZztcclxuICAvKiogUmVxdWVzdGVyIGFmZmlsaWF0aW9ucyAob3JnYW5pemF0aW9ucykuICovXHJcbiAgYWZmaWxpYXRpb25zOiBzdHJpbmdbXTtcclxuICAvKiogU3VibWlzc2lvbiBkYXRlLCBwcmVmb3JtYXR0ZWQgZm9yIGRpc3BsYXkuICovXHJcbiAgc3VibWl0dGVkT246IHN0cmluZztcclxuICAvKiogQ3VycmVudC9hc3NpZ25lZCBtZW1iZXJzaGlwIGxldmVsIG5hbWUsIG9yIG51bGwgd2hlbiBub25lIGlzIGFzc2lnbmVkLiAqL1xyXG4gIG1lbWJlckxldmVsOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG4vKipcclxuICogUmVxdWVzdCBwYXlsb2FkIGZvciBvdmVycmlkaW5nL3NldHRpbmcgYW4gaW50ZXJlc3RlZCB1c2VyJ3MgbWVtYmVyc2hpcCBsZXZlbFxyXG4gKiAoe0Bjb2RlIFBPU1Qge2FwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9tZW1iZXItbGV2ZWx9KS5cclxuICpcclxuICogRm9sbG93cyB0aGUgcmVwbyBwYXlsb2FkIGNvbnZlbnRpb24gb2Ygd3JhcHBpbmcgdGhlIHJlcXVlc3QgYm9keSBpbiBhXHJcbiAqIHtAY29kZSBwYXlsb2FkfSBrZXkuIElkZW50aWZpZXMgdGhlIHJvc3RlciByb3cgYnkge0BsaW5rIFVwZGF0ZU1lbWJlckxldmVsQm9keS5ncm91cElkfVxyXG4gKiArIHtAbGluayBVcGRhdGVNZW1iZXJMZXZlbEJvZHkudXNlcklkfSBhbmQgY2FycmllcyB0aGUgbmV3bHkgc2VsZWN0ZWQgcm9sZSBpblxyXG4gKiB7QGxpbmsgVXBkYXRlTWVtYmVyTGV2ZWxCb2R5LnJvbGVJZH0uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZCB7XHJcbiAgcGF5bG9hZDogVXBkYXRlTWVtYmVyTGV2ZWxCb2R5O1xyXG59XHJcblxyXG4vKipcclxuICogVGhlIGJvZHkgb2Yge0BsaW5rIFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZH06IHRoZSBncm91cCBhbmQgdXNlciBiZWluZ1xyXG4gKiB1cGRhdGVkIHBsdXMgdGhlIHJvbGUgaWQgb2YgdGhlIGNob3NlbiBtZW1iZXJzaGlwIGxldmVsLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNZW1iZXJMZXZlbEJvZHkge1xyXG4gIC8qKiBUaGUgZ3JvdXAgdGhlIGludGVyZXN0ZWQgdXNlciBiZWxvbmdzIHRvIChlLmcuIFwiR1JQX1NBQVBQU18uLi5cIikuICovXHJcbiAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgaW50ZXJlc3RlZCB1c2VyIHdob3NlIG1lbWJlcnNoaXAgbGV2ZWwgaXMgYmVpbmcgc2V0IChlLmcuIFwiVXNlcl9ORVNDXy4uLlwiKS4gKi9cclxuICB1c2VySWQ6IHN0cmluZztcclxuICAvKiogVGhlIHNlbGVjdGVkIG1lbWJlcnNoaXAtbGV2ZWwgcm9sZSBpZCAoZS5nLiBcIlJPTEVfU0FBUFBTXy4uLlwiKS4gKi9cclxuICByb2xlSWQ6IHN0cmluZztcclxufVxyXG4iXX0=
@@ -40,4 +40,4 @@ export var RosterUploadStatus;
40
40
  RosterUploadStatus["COMPLETED"] = "COMPLETED";
41
41
  RosterUploadStatus["FAILED"] = "FAILED";
42
42
  })(RosterUploadStatus || (RosterUploadStatus = {}));
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL21vZGVscy9yb3N0ZXItaW1wb3J0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFOLElBQVksa0JBTVg7QUFORCxXQUFZLGtCQUFrQjtJQUM1Qix5Q0FBbUIsQ0FBQTtJQUNuQiwrQ0FBeUIsQ0FBQTtJQUN6Qiw2Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBaUIsQ0FBQTtJQUNqQix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQU03QjtBQXVGRCw4RUFBOEU7QUFDOUUsbUNBQW1DO0FBQ25DLEVBQUU7QUFDRiw2REFBNkQ7QUFDN0Qsd0VBQXdFO0FBQ3hFLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsaURBQWlEO0FBQ2pELG9FQUFvRTtBQUNwRSwrRUFBK0U7QUFDL0UscURBQXFEO0FBQ3JELDhFQUE4RTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLCtDQUF5QixDQUFBO0lBQ3pCLDZDQUF1QixDQUFBO0lBQ3ZCLHVDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSTdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuXHJcbi8qKlxyXG4gKiBSb3N0ZXItaW1wb3J0IHN0YXR1cyBzdGF0ZSBtYWNoaW5lLiBNaXJyb3JzIHRoZSBCRSBgSW1wb3J0U3RhdHVzYCBlbnVtXHJcbiAqIChzYS1zYWFwcHMtZ3JvdXBzLWFwaTogb3JnLmllZWUuc3RhbmRhcmRzLmdyb3Vwcy5tb2RlbC5JbXBvcnRTdGF0dXMpIGFuZCB0aGVcclxuICogYHN0YXR1c2AgQ0hFQ0sgY29uc3RyYWludCBvbiBgcm9zdGVyX2ltcG9ydF9qb2JfdGJgLlxyXG4gKlxyXG4gKiAtIFBFTkRJTkcgICAgdXBsb2FkIGFjY2VwdGVkLCBhd2FpdGluZyB2YWxpZGF0aW9uIChkZWZhdWx0KVxyXG4gKiAtIFZBTElEQVRJTkcgcm93cyBhcmUgYmVpbmcgdmFsaWRhdGVkXHJcbiAqIC0gQ09NUExFVEVEICBhbGwgcm93cyBpbXBvcnRlZCBzdWNjZXNzZnVsbHkgKHRlcm1pbmFsKVxyXG4gKiAtIEZBSUxFRCAgICAgbm8gcm93cyBpbXBvcnRlZCBzdWNjZXNzZnVsbHkgKHRlcm1pbmFsKVxyXG4gKiAtIFBBUlRJQUwgICAgc29tZSByb3dzIGltcG9ydGVkLCBzb21lIGZhaWxlZCAodGVybWluYWwpXHJcbiAqL1xyXG5leHBvcnQgZW51bSBSb3N0ZXJJbXBvcnRTdGF0dXMge1xyXG4gIFBFTkRJTkcgPSAnUEVORElORycsXHJcbiAgVkFMSURBVElORyA9ICdWQUxJREFUSU5HJyxcclxuICBDT01QTEVURUQgPSAnQ09NUExFVEVEJyxcclxuICBGQUlMRUQgPSAnRkFJTEVEJyxcclxuICBQQVJUSUFMID0gJ1BBUlRJQUwnLFxyXG59XHJcblxyXG4vKipcclxuICogQSBzaW5nbGUgcGVyLXJvdyB2YWxpZGF0aW9uIGVycm9yIHN0b3JlZCBpbiB0aGUgaW1wb3J0IGpvYidzIGBlcnJvcl9yZXBvcnRgXHJcbiAqIEpTT05CIGNvbHVtbi4gTWlycm9ycyB0aGUgQkUgYEVycm9yUmVwb3J0YCBQT0pPICh7QGNvZGUge3JvdywgZmllbGQsIG1lc3NhZ2V9fSkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFJvc3RlckltcG9ydEVycm9yUmVwb3J0IHtcclxuICAvKiogMS1iYXNlZCBkYXRhLXJvdyBudW1iZXIgaW4gdGhlIHVwbG9hZGVkIGZpbGUuICovXHJcbiAgcm93OiBudW1iZXI7XHJcbiAgLyoqIFRoZSBmaWVsZC9jb2x1bW4gdGhlIGVycm9yIHJlbGF0ZXMgdG8gKGUuZy4gXCJOYW1lXCIsIFwiRW1haWxcIikuICovXHJcbiAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuICovXHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUm9zdGVyIGltcG9ydCBqb2IgYXMgcmV0dXJuZWQgYnkgdGhlIEJFICh1cGxvYWQgLyBjb25maXJtIC8gaGlzdG9yeSkuXHJcbiAqIE1pcnJvcnMgdGhlIEpTT04tc2VyaWFsaXplZCB2aWV3IG9mIHRoZSBCRSBgUm9zdGVySW1wb3J0Sm9iYCBlbnRpdHkuXHJcbiAqXHJcbiAqIElNUE9SVEFOVDogVGhlIEJFIG1hcmtzIGBjcmVhdGVkT25gLCBgY3JlYXRlZEJ5YCwgYHVwZGF0ZWRPbmAsIGB1cGRhdGVkQnlgIGFzXHJcbiAqIGBASnNvbklnbm9yZWAsIHNvIHRoZSByZXNwb25zZSBjYXJyaWVzIE5PIHRpbWVzdGFtcCBhbmQgTk8gaW1wb3J0ZXIgaWRlbnRpdHkuXHJcbiAqIElmIHRoZSBcIlZpZXcgSGlzdG9yeVwiIHNjcmVlbiBuZWVkcyB0aG9zZSAoVGltZXN0YW1wIC8gUGVyc29uIEltcG9ydGVkXHJcbiAqIGNvbHVtbnMpLCB0aGUgQkUgbXVzdCBleHBvc2UgdGhlbSBmaXJzdCDigJQgdGhpcyBpcyBhIEJFIGNoYW5nZSwgdHJhY2tlZFxyXG4gKiBzZXBhcmF0ZWx5LiBgZXJyb3JSZXBvcnRgIGFycml2ZXMgYXMgYSByYXcgSlNPTiBzdHJpbmcgKEpTT05CIHBhc3N0aHJvdWdoKTtcclxuICogcGFyc2UgaXQgaW50byB7QGxpbmsgUm9zdGVySW1wb3J0RXJyb3JSZXBvcnR9W10gb24gdGhlIGNsaWVudCB3aGVuIG5lZWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm9zdGVySW1wb3J0Sm9iIHtcclxuICAvKiogSW1wb3J0IGpvYiBpZGVudGlmaWVyLiAqL1xyXG4gIGltcG9ydElkOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSB0YXJnZXQgZ3JvdXAgdGhlIHJvc3RlciB3YXMgaW1wb3J0ZWQgaW50by4gKi9cclxuICBncm91cElkOiBzdHJpbmc7XHJcbiAgLyoqIFVwbG9hZGVkIGZpbGUgbmFtZSAoZS5nLiBcIjA3X3RlbmFudF9jdXN0b21fZmllbGRzLmNzdlwiKS4gKi9cclxuICBmaWxlTmFtZT86IHN0cmluZztcclxuICAvKiogQ3VycmVudCBzdGF0dXMgKHNlZSB7QGxpbmsgUm9zdGVySW1wb3J0U3RhdHVzfSkuICovXHJcbiAgc3RhdHVzOiBzdHJpbmc7XHJcbiAgLyoqIFRvdGFsIGRhdGEgcm93cyBkZXRlY3RlZCAoYHRvdGFsUm93cyA9IHN1Y2Nlc3NSb3dzICsgZmFpbGVkUm93c2ApLiAqL1xyXG4gIHRvdGFsUm93cz86IG51bWJlcjtcclxuICAvKiogUm93cyBzdWNjZXNzZnVsbHkgYWRkZWQvdXBkYXRlZC4gKi9cclxuICBzdWNjZXNzUm93cz86IG51bWJlcjtcclxuICAvKiogUm93cyBza2lwcGVkIGR1ZSB0byB2YWxpZGF0aW9uIGVycm9ycy4gKi9cclxuICBmYWlsZWRSb3dzPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFJvdy1sZXZlbCBlcnJvcnMgZnJvbSB0aGUgQkUgYGVycm9yX3JlcG9ydGAgSlNPTkIgY29sdW1uLiBPYnNlcnZlZCB0byBhcnJpdmVcclxuICAgKiBFSVRIRVIgYXMgYSBwYXJzZWQgb2JqZWN0IGB7IHJvd3M6IFJvc3RlckltcG9ydEVycm9yUmVwb3J0W10gfWAgT1IgYXMgYSByYXdcclxuICAgKiBKU09OIHN0cmluZyBvZiB0aGUgc2FtZSBzaGFwZSAoZGVwZW5kaW5nIG9uIHNlcmlhbGl6YXRpb24pLiBBIGJhcmUgYXJyYXkgaXNcclxuICAgKiBhbHNvIHRvbGVyYXRlZC4gYG51bGxgIHdoZW4gdGhlcmUgYXJlIG5vIHJvdyBlcnJvcnMuIFRoZSBjbGllbnQgbm9ybWFsaXplc1xyXG4gICAqIGFsbCBvZiB0aGVzZSDigJQgc2VlIFJvc3RlckltcG9ydENvbXBvbmVudC5wYXJzZUVycm9yUmVwb3J0LlxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZXJyb3JSZXBvcnQ/OiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQZXItcm93IHZhbGlkYXRpb24gb3V0Y29tZSBpbiBhIHZhbGlkYXRlL3ByZXZpZXcgcmVzcG9uc2UuIE1pcnJvcnMgdGhlIEJFXHJcbiAqIGBSb3N0ZXJJbXBvcnRSb3dPdXRjb21lYCBQT0pPLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSb3N0ZXJJbXBvcnRSb3dPdXRjb21lIHtcclxuICAvKiogMS1iYXNlZCBkYXRhLXJvdyBudW1iZXIgaW4gdGhlIHVwbG9hZGVkIGZpbGUuICovXHJcbiAgcm93OiBudW1iZXI7XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyByb3cgcGFzc2VkIHZhbGlkYXRpb24uICovXHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgLyoqIFRoZSBmaWVsZC9jb2x1bW4gdGhlIGVycm9yIHJlbGF0ZXMgdG8sIGZvciBhbiBpbnZhbGlkIHJvdy4gKi9cclxuICBmaWVsZD86IHN0cmluZztcclxuICAvKiogVmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlLCBmb3IgYW4gaW52YWxpZCByb3cuICovXHJcbiAgZXJyb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0aW9uIHByZXZpZXcgcmV0dXJuZWQgYnkgdmFsaWRhdGUgLyBwcmV2aWV3LiBNaXJyb3JzIHRoZSBCRVxyXG4gKiBgUm9zdGVySW1wb3J0UHJldmlld2AgUE9KTy4gQnVpbGRpbmcgYSBwcmV2aWV3IGNvbW1pdHMgbm8gcm9zdGVyIGNoYW5nZXMuXHJcbiAqIGByb3dzYCBpcyBuZXZlciBudWxsIChCRSBndWFyYW50ZWVzIGFuIGVtcHR5IGxpc3QgYXQgbWluaW11bSkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFJvc3RlckltcG9ydFByZXZpZXcge1xyXG4gIC8qKiBJbXBvcnQgam9iIGlkZW50aWZpZXIuICovXHJcbiAgaW1wb3J0SWQ6IHN0cmluZztcclxuICAvKiogQ3VycmVudCBzdGF0dXMgKHNlZSB7QGxpbmsgUm9zdGVySW1wb3J0U3RhdHVzfSkuICovXHJcbiAgc3RhdHVzOiBzdHJpbmc7XHJcbiAgLyoqIFRvdGFsIGRhdGEgcm93cyAoYHRvdGFsUm93cyA9IHN1Y2Nlc3NSb3dzICsgZmFpbGVkUm93c2ApLiAqL1xyXG4gIHRvdGFsUm93czogbnVtYmVyO1xyXG4gIC8qKiBSb3dzIHRoYXQgcGFzc2VkIHZhbGlkYXRpb24uICovXHJcbiAgc3VjY2Vzc1Jvd3M6IG51bWJlcjtcclxuICAvKiogUm93cyB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uLiAqL1xyXG4gIGZhaWxlZFJvd3M6IG51bWJlcjtcclxuICAvKiogUGVyLXJvdyBvdXRjb21lcyAobmV2ZXIgbnVsbCkuICovXHJcbiAgcm93czogUm9zdGVySW1wb3J0Um93T3V0Y29tZVtdO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gREVQUkVDQVRFRCBDT01QQVRJQklMSVRZIEVYUE9SVFNcclxuLy9cclxuLy8gVGhlc2Ugc3ltYm9scyB3ZXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgKHJlLWV4cG9ydGVkIHZpYVxyXG4vLyBwcm9qZWN0cy9ncm91cHMvc3JjL3B1YmxpYy1hcGkudHMpIGJlZm9yZSB0aGUgcm9zdGVyLWltcG9ydCBtb2RlbCB3YXNcclxuLy8gYWxpZ25lZCB0byB0aGUgYmFja2VuZCBjb250cmFjdC4gVGhleSBhcmUgcmV0YWluZWQgc28gZG93bnN0cmVhbSBjb25zdW1lcnNcclxuLy8gdGhhdCBzdGlsbCBpbXBvcnQgdGhlbSBrZWVwIGNvbXBpbGluZy4gUHJlZmVyIHRoZSBCRS1hbGlnbmVkIHR5cGVzIGFib3ZlOlxyXG4vLyAgIC0gUm9zdGVyVXBsb2FkU3RhdHVzICAgLT4gUm9zdGVySW1wb3J0U3RhdHVzXHJcbi8vICAgLSBSb3N0ZXJVcGxvYWRSZXNwb25zZSAtPiBSb3N0ZXJJbXBvcnRKb2IgLyBSb3N0ZXJJbXBvcnRQcmV2aWV3XHJcbi8vICAgLSBSb3N0ZXJVcGxvYWRFcnJvciAgICAtPiBSb3N0ZXJJbXBvcnRFcnJvclJlcG9ydCAvIFJvc3RlckltcG9ydFJvd091dGNvbWVcclxuLy8gUmVtb3ZlIHRoZXNlIGluIHRoZSBuZXh0IG1ham9yIChicmVha2luZykgcmVsZWFzZS5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBSb3N0ZXJJbXBvcnRTdGF0dXN9IGluc3RlYWQuIFJldGFpbmVkIGZvciBiYWNrd2FyZFxyXG4gKiBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHByZS1CRS1pbnRlZ3JhdGlvbiBwdWJsaWMgQVBJLlxyXG4gKi9cclxuZXhwb3J0IGVudW0gUm9zdGVyVXBsb2FkU3RhdHVzIHtcclxuICBQUk9DRVNTSU5HID0gJ1BST0NFU1NJTkcnLFxyXG4gIENPTVBMRVRFRCA9ICdDT01QTEVURUQnLFxyXG4gIEZBSUxFRCA9ICdGQUlMRUQnLFxyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBSb3N0ZXJJbXBvcnRFcnJvclJlcG9ydH0gKGB7IHJvdywgZmllbGQsIG1lc3NhZ2UgfWApXHJcbiAqIG9yIHtAbGluayBSb3N0ZXJJbXBvcnRSb3dPdXRjb21lfSBpbnN0ZWFkLiBSZXRhaW5lZCBmb3IgYmFja3dhcmRcclxuICogY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwcmUtQkUtaW50ZWdyYXRpb24gcHVibGljIEFQSS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm9zdGVyVXBsb2FkRXJyb3Ige1xyXG4gIC8qKiAxLWJhc2VkIHJvdyBudW1iZXIgaW4gdGhlIHVwbG9hZGVkIGZpbGUuICovXHJcbiAgcm93TnVtYmVyOiBudW1iZXI7XHJcbiAgLyoqIFRoZSBmaWVsZC9jb2x1bW4gdGhlIGVycm9yIHJlbGF0ZXMgdG8gKGUuZy4gXCJOYW1lXCIsIFwiRW1haWxcIikuICovXHJcbiAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBvZmZlbmRpbmcgdmFsdWUsIHdoZW4gcmVsZXZhbnQgKGUuZy4gYW4gdW5yZWNvZ25pemVkIHJvbGUpLiAqL1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlIHNob3duIGluIHRoZSByb3ctZXJyb3JzIGxpc3QuICovXHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFJvc3RlckltcG9ydEpvYn0gKGNvbmZpcm0vaGlzdG9yeSkgb3JcclxuICoge0BsaW5rIFJvc3RlckltcG9ydFByZXZpZXd9ICh2YWxpZGF0ZSkgaW5zdGVhZC4gUmV0YWluZWQgZm9yIGJhY2t3YXJkXHJcbiAqIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHJlLUJFLWludGVncmF0aW9uIHB1YmxpYyBBUEkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFJvc3RlclVwbG9hZFJlc3BvbnNlIHtcclxuICAvKiogSm9iIGlkZW50aWZpZXIuICovXHJcbiAgdXBsb2FkSm9iSWQ/OiBzdHJpbmc7XHJcbiAgLyoqIFRlcm1pbmFsIGpvYiBzdGF0dXMuICovXHJcbiAgc3RhdHVzOiBSb3N0ZXJVcGxvYWRTdGF0dXM7XHJcbiAgLyoqIFRvdGFsIGRhdGEgcm93cyBkZXRlY3RlZCBpbiB0aGUgZmlsZSAoZXhjbHVkZXMgdGhlIGhlYWRlciByb3cpLiAqL1xyXG4gIHRvdGFsUmVjb3JkczogbnVtYmVyO1xyXG4gIC8qKiBSb3dzIHN1Y2Nlc3NmdWxseSBhZGRlZC91cGRhdGVkLiAqL1xyXG4gIHN1Y2Nlc3NDb3VudDogbnVtYmVyO1xyXG4gIC8qKiBSb3dzIHNraXBwZWQgZHVlIHRvIHZhbGlkYXRpb24gZXJyb3JzLiAqL1xyXG4gIGZhaWx1cmVDb3VudDogbnVtYmVyO1xyXG4gIC8qKiBSb3ctbGV2ZWwgZXJyb3JzIChwcmVzZW50IHdoZW4gZmFpbHVyZUNvdW50ID4gMCkuICovXHJcbiAgcm93RXJyb3JzOiBSb3N0ZXJVcGxvYWRFcnJvcltdO1xyXG59XHJcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL21vZGVscy9yb3N0ZXItaW1wb3J0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFOLElBQVksa0JBTVg7QUFORCxXQUFZLGtCQUFrQjtJQUM1Qix5Q0FBbUIsQ0FBQTtJQUNuQiwrQ0FBeUIsQ0FBQTtJQUN6Qiw2Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBaUIsQ0FBQTtJQUNqQix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQU03QjtBQW1HRCw4RUFBOEU7QUFDOUUsbUNBQW1DO0FBQ25DLEVBQUU7QUFDRiw2REFBNkQ7QUFDN0Qsd0VBQXdFO0FBQ3hFLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsaURBQWlEO0FBQ2pELG9FQUFvRTtBQUNwRSwrRUFBK0U7QUFDL0UscURBQXFEO0FBQ3JELDhFQUE4RTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLCtDQUF5QixDQUFBO0lBQ3pCLDZDQUF1QixDQUFBO0lBQ3ZCLHVDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSTdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuXHJcbi8qKlxyXG4gKiBSb3N0ZXItaW1wb3J0IHN0YXR1cyBzdGF0ZSBtYWNoaW5lLiBNaXJyb3JzIHRoZSBCRSBgSW1wb3J0U3RhdHVzYCBlbnVtXHJcbiAqIChzYS1zYWFwcHMtZ3JvdXBzLWFwaTogb3JnLmllZWUuc3RhbmRhcmRzLmdyb3Vwcy5tb2RlbC5JbXBvcnRTdGF0dXMpIGFuZCB0aGVcclxuICogYHN0YXR1c2AgQ0hFQ0sgY29uc3RyYWludCBvbiBgcm9zdGVyX2ltcG9ydF9qb2JfdGJgLlxyXG4gKlxyXG4gKiAtIFBFTkRJTkcgICAgdXBsb2FkIGFjY2VwdGVkLCBhd2FpdGluZyB2YWxpZGF0aW9uIChkZWZhdWx0KVxyXG4gKiAtIFZBTElEQVRJTkcgcm93cyBhcmUgYmVpbmcgdmFsaWRhdGVkXHJcbiAqIC0gQ09NUExFVEVEICBhbGwgcm93cyBpbXBvcnRlZCBzdWNjZXNzZnVsbHkgKHRlcm1pbmFsKVxyXG4gKiAtIEZBSUxFRCAgICAgbm8gcm93cyBpbXBvcnRlZCBzdWNjZXNzZnVsbHkgKHRlcm1pbmFsKVxyXG4gKiAtIFBBUlRJQUwgICAgc29tZSByb3dzIGltcG9ydGVkLCBzb21lIGZhaWxlZCAodGVybWluYWwpXHJcbiAqL1xyXG5leHBvcnQgZW51bSBSb3N0ZXJJbXBvcnRTdGF0dXMge1xyXG4gIFBFTkRJTkcgPSAnUEVORElORycsXHJcbiAgVkFMSURBVElORyA9ICdWQUxJREFUSU5HJyxcclxuICBDT01QTEVURUQgPSAnQ09NUExFVEVEJyxcclxuICBGQUlMRUQgPSAnRkFJTEVEJyxcclxuICBQQVJUSUFMID0gJ1BBUlRJQUwnLFxyXG59XHJcblxyXG4vKipcclxuICogQSBzaW5nbGUgcGVyLXJvdyB2YWxpZGF0aW9uIGVycm9yIHN0b3JlZCBpbiB0aGUgaW1wb3J0IGpvYidzIGBlcnJvcl9yZXBvcnRgXHJcbiAqIEpTT05CIGNvbHVtbi4gTWlycm9ycyB0aGUgQkUgYEVycm9yUmVwb3J0YCBQT0pPICh7QGNvZGUge3JvdywgZmllbGQsIG1lc3NhZ2V9fSkuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFJvc3RlckltcG9ydEVycm9yUmVwb3J0IHtcclxuICAvKiogMS1iYXNlZCBkYXRhLXJvdyBudW1iZXIgaW4gdGhlIHVwbG9hZGVkIGZpbGUuICovXHJcbiAgcm93OiBudW1iZXI7XHJcbiAgLyoqIFRoZSBmaWVsZC9jb2x1bW4gdGhlIGVycm9yIHJlbGF0ZXMgdG8gKGUuZy4gXCJOYW1lXCIsIFwiRW1haWxcIikuICovXHJcbiAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuICovXHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUm9zdGVyIGltcG9ydCBqb2IgYXMgcmV0dXJuZWQgYnkgdGhlIEJFICh1cGxvYWQgLyBjb25maXJtIC8gaGlzdG9yeSkuXHJcbiAqIE1pcnJvcnMgdGhlIEpTT04tc2VyaWFsaXplZCB2aWV3IG9mIHRoZSBCRSBgUm9zdGVySW1wb3J0Sm9iYCBlbnRpdHkuXHJcbiAqXHJcbiAqIElNUE9SVEFOVDogVGhlIEJFIG1hcmtzIGBjcmVhdGVkT25gLCBgY3JlYXRlZEJ5YCwgYHVwZGF0ZWRPbmAsIGB1cGRhdGVkQnlgIGFzXHJcbiAqIGBASnNvbklnbm9yZWAsIHNvIHRoZSByZXNwb25zZSBjYXJyaWVzIE5PIHRpbWVzdGFtcCBhbmQgTk8gaW1wb3J0ZXIgaWRlbnRpdHkuXHJcbiAqIElmIHRoZSBcIlZpZXcgSGlzdG9yeVwiIHNjcmVlbiBuZWVkcyB0aG9zZSAoVGltZXN0YW1wIC8gUGVyc29uIEltcG9ydGVkXHJcbiAqIGNvbHVtbnMpLCB0aGUgQkUgbXVzdCBleHBvc2UgdGhlbSBmaXJzdCDigJQgdGhpcyBpcyBhIEJFIGNoYW5nZSwgdHJhY2tlZFxyXG4gKiBzZXBhcmF0ZWx5LiBgZXJyb3JSZXBvcnRgIGFycml2ZXMgYXMgYSByYXcgSlNPTiBzdHJpbmcgKEpTT05CIHBhc3N0aHJvdWdoKTtcclxuICogcGFyc2UgaXQgaW50byB7QGxpbmsgUm9zdGVySW1wb3J0RXJyb3JSZXBvcnR9W10gb24gdGhlIGNsaWVudCB3aGVuIG5lZWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm9zdGVySW1wb3J0Sm9iIHtcclxuICAvKiogSW1wb3J0IGpvYiBpZGVudGlmaWVyLiAqL1xyXG4gIGltcG9ydElkOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSB0YXJnZXQgZ3JvdXAgdGhlIHJvc3RlciB3YXMgaW1wb3J0ZWQgaW50by4gKi9cclxuICBncm91cElkOiBzdHJpbmc7XHJcbiAgLyoqIFVwbG9hZGVkIGZpbGUgbmFtZSAoZS5nLiBcIjA3X3RlbmFudF9jdXN0b21fZmllbGRzLmNzdlwiKS4gKi9cclxuICBmaWxlTmFtZT86IHN0cmluZztcclxuICAvKiogQ3VycmVudCBzdGF0dXMgKHNlZSB7QGxpbmsgUm9zdGVySW1wb3J0U3RhdHVzfSkuICovXHJcbiAgc3RhdHVzOiBzdHJpbmc7XHJcbiAgLyoqIFRvdGFsIGRhdGEgcm93cyBkZXRlY3RlZCAoYHRvdGFsUm93cyA9IHN1Y2Nlc3NSb3dzICsgZmFpbGVkUm93c2ApLiAqL1xyXG4gIHRvdGFsUm93cz86IG51bWJlcjtcclxuICAvKiogUm93cyBzdWNjZXNzZnVsbHkgYWRkZWQvdXBkYXRlZC4gKi9cclxuICBzdWNjZXNzUm93cz86IG51bWJlcjtcclxuICAvKiogUm93cyBza2lwcGVkIGR1ZSB0byB2YWxpZGF0aW9uIGVycm9ycy4gKi9cclxuICBmYWlsZWRSb3dzPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFdoZW4gdGhlIGltcG9ydCB3YXMgY3JlYXRlZCAoSVNPIHRpbWVzdGFtcCkuIERyaXZlcyB0aGUgXCJUaW1lc3RhbXBcIiBjb2x1bW5cclxuICAgKiBpbiBWaWV3IEhpc3RvcnkuIFByZXNlbnQgb25seSBvbmNlIHRoZSBCRSBleHBvc2VzIGl0IChjdXJyZW50bHkgQEpzb25JZ25vcmUpO1xyXG4gICAqIHVuZGVmaW5lZCBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIFVJIHNob3dzIGEgcGxhY2Vob2xkZXIuXHJcbiAgICovXHJcbiAgY3JlYXRlZE9uPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFdobyByYW4gdGhlIGltcG9ydCAodXNlciBlbWFpbC9uYW1lKS4gRHJpdmVzIHRoZSBcIlBlcnNvbiBJbXBvcnRlZFwiIGNvbHVtbiBpblxyXG4gICAqIFZpZXcgSGlzdG9yeS4gUHJlc2VudCBvbmx5IG9uY2UgdGhlIEJFIGV4cG9zZXMgaXQgKGN1cnJlbnRseSBASnNvbklnbm9yZSk7XHJcbiAgICogdW5kZWZpbmVkIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgVUkgc2hvd3MgYSBwbGFjZWhvbGRlci5cclxuICAgKi9cclxuICBjcmVhdGVkQnk/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogUm93LWxldmVsIGVycm9ycyBmcm9tIHRoZSBCRSBgZXJyb3JfcmVwb3J0YCBKU09OQiBjb2x1bW4uIE9ic2VydmVkIHRvIGFycml2ZVxyXG4gICAqIEVJVEhFUiBhcyBhIHBhcnNlZCBvYmplY3QgYHsgcm93czogUm9zdGVySW1wb3J0RXJyb3JSZXBvcnRbXSB9YCBPUiBhcyBhIHJhd1xyXG4gICAqIEpTT04gc3RyaW5nIG9mIHRoZSBzYW1lIHNoYXBlIChkZXBlbmRpbmcgb24gc2VyaWFsaXphdGlvbikuIEEgYmFyZSBhcnJheSBpc1xyXG4gICAqIGFsc28gdG9sZXJhdGVkLiBgbnVsbGAgd2hlbiB0aGVyZSBhcmUgbm8gcm93IGVycm9ycy4gVGhlIGNsaWVudCBub3JtYWxpemVzXHJcbiAgICogYWxsIG9mIHRoZXNlIOKAlCBzZWUgUm9zdGVySW1wb3J0Q29tcG9uZW50LnBhcnNlRXJyb3JSZXBvcnQuXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBlcnJvclJlcG9ydD86IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBlci1yb3cgdmFsaWRhdGlvbiBvdXRjb21lIGluIGEgdmFsaWRhdGUvcHJldmlldyByZXNwb25zZS4gTWlycm9ycyB0aGUgQkVcclxuICogYFJvc3RlckltcG9ydFJvd091dGNvbWVgIFBPSk8uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFJvc3RlckltcG9ydFJvd091dGNvbWUge1xyXG4gIC8qKiAxLWJhc2VkIGRhdGEtcm93IG51bWJlciBpbiB0aGUgdXBsb2FkZWQgZmlsZS4gKi9cclxuICByb3c6IG51bWJlcjtcclxuICAvKiogV2hldGhlciB0aGlzIHJvdyBwYXNzZWQgdmFsaWRhdGlvbi4gKi9cclxuICB2YWxpZDogYm9vbGVhbjtcclxuICAvKiogVGhlIGZpZWxkL2NvbHVtbiB0aGUgZXJyb3IgcmVsYXRlcyB0bywgZm9yIGFuIGludmFsaWQgcm93LiAqL1xyXG4gIGZpZWxkPzogc3RyaW5nO1xyXG4gIC8qKiBWYWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UsIGZvciBhbiBpbnZhbGlkIHJvdy4gKi9cclxuICBlcnJvcj86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRpb24gcHJldmlldyByZXR1cm5lZCBieSB2YWxpZGF0ZSAvIHByZXZpZXcuIE1pcnJvcnMgdGhlIEJFXHJcbiAqIGBSb3N0ZXJJbXBvcnRQcmV2aWV3YCBQT0pPLiBCdWlsZGluZyBhIHByZXZpZXcgY29tbWl0cyBubyByb3N0ZXIgY2hhbmdlcy5cclxuICogYHJvd3NgIGlzIG5ldmVyIG51bGwgKEJFIGd1YXJhbnRlZXMgYW4gZW1wdHkgbGlzdCBhdCBtaW5pbXVtKS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm9zdGVySW1wb3J0UHJldmlldyB7XHJcbiAgLyoqIEltcG9ydCBqb2IgaWRlbnRpZmllci4gKi9cclxuICBpbXBvcnRJZDogc3RyaW5nO1xyXG4gIC8qKiBDdXJyZW50IHN0YXR1cyAoc2VlIHtAbGluayBSb3N0ZXJJbXBvcnRTdGF0dXN9KS4gKi9cclxuICBzdGF0dXM6IHN0cmluZztcclxuICAvKiogVG90YWwgZGF0YSByb3dzIChgdG90YWxSb3dzID0gc3VjY2Vzc1Jvd3MgKyBmYWlsZWRSb3dzYCkuICovXHJcbiAgdG90YWxSb3dzOiBudW1iZXI7XHJcbiAgLyoqIFJvd3MgdGhhdCBwYXNzZWQgdmFsaWRhdGlvbi4gKi9cclxuICBzdWNjZXNzUm93czogbnVtYmVyO1xyXG4gIC8qKiBSb3dzIHRoYXQgZmFpbGVkIHZhbGlkYXRpb24uICovXHJcbiAgZmFpbGVkUm93czogbnVtYmVyO1xyXG4gIC8qKiBQZXItcm93IG91dGNvbWVzIChuZXZlciBudWxsKS4gKi9cclxuICByb3dzOiBSb3N0ZXJJbXBvcnRSb3dPdXRjb21lW107XHJcbn1cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBERVBSRUNBVEVEIENPTVBBVElCSUxJVFkgRVhQT1JUU1xyXG4vL1xyXG4vLyBUaGVzZSBzeW1ib2xzIHdlcmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSAocmUtZXhwb3J0ZWQgdmlhXHJcbi8vIHByb2plY3RzL2dyb3Vwcy9zcmMvcHVibGljLWFwaS50cykgYmVmb3JlIHRoZSByb3N0ZXItaW1wb3J0IG1vZGVsIHdhc1xyXG4vLyBhbGlnbmVkIHRvIHRoZSBiYWNrZW5kIGNvbnRyYWN0LiBUaGV5IGFyZSByZXRhaW5lZCBzbyBkb3duc3RyZWFtIGNvbnN1bWVyc1xyXG4vLyB0aGF0IHN0aWxsIGltcG9ydCB0aGVtIGtlZXAgY29tcGlsaW5nLiBQcmVmZXIgdGhlIEJFLWFsaWduZWQgdHlwZXMgYWJvdmU6XHJcbi8vICAgLSBSb3N0ZXJVcGxvYWRTdGF0dXMgICAtPiBSb3N0ZXJJbXBvcnRTdGF0dXNcclxuLy8gICAtIFJvc3RlclVwbG9hZFJlc3BvbnNlIC0+IFJvc3RlckltcG9ydEpvYiAvIFJvc3RlckltcG9ydFByZXZpZXdcclxuLy8gICAtIFJvc3RlclVwbG9hZEVycm9yICAgIC0+IFJvc3RlckltcG9ydEVycm9yUmVwb3J0IC8gUm9zdGVySW1wb3J0Um93T3V0Y29tZVxyXG4vLyBSZW1vdmUgdGhlc2UgaW4gdGhlIG5leHQgbWFqb3IgKGJyZWFraW5nKSByZWxlYXNlLlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFJvc3RlckltcG9ydFN0YXR1c30gaW5zdGVhZC4gUmV0YWluZWQgZm9yIGJhY2t3YXJkXHJcbiAqIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHJlLUJFLWludGVncmF0aW9uIHB1YmxpYyBBUEkuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBSb3N0ZXJVcGxvYWRTdGF0dXMge1xyXG4gIFBST0NFU1NJTkcgPSAnUFJPQ0VTU0lORycsXHJcbiAgQ09NUExFVEVEID0gJ0NPTVBMRVRFRCcsXHJcbiAgRkFJTEVEID0gJ0ZBSUxFRCcsXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFJvc3RlckltcG9ydEVycm9yUmVwb3J0fSAoYHsgcm93LCBmaWVsZCwgbWVzc2FnZSB9YClcclxuICogb3Ige0BsaW5rIFJvc3RlckltcG9ydFJvd091dGNvbWV9IGluc3RlYWQuIFJldGFpbmVkIGZvciBiYWNrd2FyZFxyXG4gKiBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHByZS1CRS1pbnRlZ3JhdGlvbiBwdWJsaWMgQVBJLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSb3N0ZXJVcGxvYWRFcnJvciB7XHJcbiAgLyoqIDEtYmFzZWQgcm93IG51bWJlciBpbiB0aGUgdXBsb2FkZWQgZmlsZS4gKi9cclxuICByb3dOdW1iZXI6IG51bWJlcjtcclxuICAvKiogVGhlIGZpZWxkL2NvbHVtbiB0aGUgZXJyb3IgcmVsYXRlcyB0byAoZS5nLiBcIk5hbWVcIiwgXCJFbWFpbFwiKS4gKi9cclxuICBmaWVsZD86IHN0cmluZztcclxuICAvKiogVGhlIG9mZmVuZGluZyB2YWx1ZSwgd2hlbiByZWxldmFudCAoZS5nLiBhbiB1bnJlY29nbml6ZWQgcm9sZSkuICovXHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2Ugc2hvd24gaW4gdGhlIHJvdy1lcnJvcnMgbGlzdC4gKi9cclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgUm9zdGVySW1wb3J0Sm9ifSAoY29uZmlybS9oaXN0b3J5KSBvclxyXG4gKiB7QGxpbmsgUm9zdGVySW1wb3J0UHJldmlld30gKHZhbGlkYXRlKSBpbnN0ZWFkLiBSZXRhaW5lZCBmb3IgYmFja3dhcmRcclxuICogY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwcmUtQkUtaW50ZWdyYXRpb24gcHVibGljIEFQSS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm9zdGVyVXBsb2FkUmVzcG9uc2Uge1xyXG4gIC8qKiBKb2IgaWRlbnRpZmllci4gKi9cclxuICB1cGxvYWRKb2JJZD86IHN0cmluZztcclxuICAvKiogVGVybWluYWwgam9iIHN0YXR1cy4gKi9cclxuICBzdGF0dXM6IFJvc3RlclVwbG9hZFN0YXR1cztcclxuICAvKiogVG90YWwgZGF0YSByb3dzIGRldGVjdGVkIGluIHRoZSBmaWxlIChleGNsdWRlcyB0aGUgaGVhZGVyIHJvdykuICovXHJcbiAgdG90YWxSZWNvcmRzOiBudW1iZXI7XHJcbiAgLyoqIFJvd3Mgc3VjY2Vzc2Z1bGx5IGFkZGVkL3VwZGF0ZWQuICovXHJcbiAgc3VjY2Vzc0NvdW50OiBudW1iZXI7XHJcbiAgLyoqIFJvd3Mgc2tpcHBlZCBkdWUgdG8gdmFsaWRhdGlvbiBlcnJvcnMuICovXHJcbiAgZmFpbHVyZUNvdW50OiBudW1iZXI7XHJcbiAgLyoqIFJvdy1sZXZlbCBlcnJvcnMgKHByZXNlbnQgd2hlbiBmYWlsdXJlQ291bnQgPiAwKS4gKi9cclxuICByb3dFcnJvcnM6IFJvc3RlclVwbG9hZEVycm9yW107XHJcbn1cclxuIl19
@@ -5,7 +5,7 @@ import * as screenTexts from '../assets/constants.json';
5
5
  import { GroupFunctionType } from '../models/group-function-type.model';
6
6
  import { GroupRosterType } from '../models/roster-type.model';
7
7
  import { FormStatus, AlertType, } from '@ieeesa-npm/models';
8
- import { COUNTRY_CALLING_CODES } from '../assets/country-calling-codes';
8
+ import { COUNTRY_DIAL_CODES } from '@ieeesa-npm/presentation';
9
9
  import { PermissionType } from '../models/permission-type.model';
10
10
  import { RoleType } from '../models/role-type.model';
11
11
  import * as i0 from "@angular/core";
@@ -742,14 +742,98 @@ export class GroupsService {
742
742
  getMemberTypes() {
743
743
  return this.memberTypes;
744
744
  }
745
+ /** Returns the unique calling codes derived from phone country metadata. */
746
+ getCountryCallingCodes() {
747
+ const dialCodes = [
748
+ ...new Set(COUNTRY_DIAL_CODES.map((country) => country.dialCode)),
749
+ ].sort((first, second) => Number(first.slice(1)) - Number(second.slice(1)));
750
+ return dialCodes.map((dialCode) => ({ id: dialCode, name: dialCode }));
751
+ }
752
+ /**
753
+ * Returns the stored interest-form responses for an interest record, for the
754
+ * Roster Management admin "View Responses" view (SP3M-428, R8.7).
755
+ *
756
+ * GET {apiBaseUrl}/groups/interest/{interestId}/responses
757
+ *
758
+ * The endpoint is keyed by the interest record id ({@code GINT_SAAPPS_...}),
759
+ * NOT the group id, and is guarded server-side by roster-view permissions
760
+ * (VIEW_GROUP_MEMBERS on the group or the tenant-wide VIEW_ALL_ROSTERS). The
761
+ * base URL already carries the version segment (e.g. `.../v1`), matching every
762
+ * other GroupsService call built as `${apiBaseUrl}/groups/...`, so the version
763
+ * is not repeated. The response envelope's body is the list of responses
764
+ * (never null — an empty list means no answers were submitted).
765
+ * @param {string} interestId - The interest record whose responses are read.
766
+ * @return {Observable<InterestFormResponse[]>}
767
+ * @memberof GroupsService
768
+ */
769
+ getInterestResponses(interestId) {
770
+ return this.httpService
771
+ .getData(`${this.apiBaseUrl}/groups/interest/${interestId}/responses`)
772
+ .pipe(map((response) => response?.body ?? []), catchError((errorRes) => {
773
+ throw errorRes;
774
+ }));
775
+ }
776
+ /**
777
+ * Returns the interested-users roster for a group — one row per interest
778
+ * carrying the user's name/email, organization affiliations, submitted
779
+ * timestamp, the group's default membership level, and the group type id — so
780
+ * the Roster Management admin "Interested Rosters" tab renders the whole group
781
+ * in a single call (SP3M-428, R8.7).
782
+ *
783
+ * POST {apiBaseUrl}/groups/interest/group/{groupId}/responses
784
+ *
785
+ * The search term, pagination and sort options are sent in the request body
786
+ * ({@link InterestedRostersRequestPayload}) so the backend can filter, page
787
+ * and sort the roster server-side. Guarded server-side by roster-view
788
+ * permissions (VIEW_GROUP_MEMBERS on the group or the tenant-wide
789
+ * VIEW_ALL_ROSTERS). The base URL already carries the version segment,
790
+ * matching every other GroupsService call built as `${apiBaseUrl}/groups/...`,
791
+ * so the version is not repeated. The response envelope's body is an
792
+ * {@link InterestedRostersResponse}: the roster rows live under `data` (never
793
+ * null — an empty list means the group has no interests) alongside the paging
794
+ * metadata (`totalRecords`, `offset`, `pageSize`).
795
+ * @param {string} groupId - The group whose interested-users roster is read.
796
+ * @param {InterestedRostersRequestPayload} payload - Search/pagination/sort options.
797
+ * @return {Observable<InterestedRostersResponse>}
798
+ * @memberof GroupsService
799
+ */
800
+ getInterestResponsesByGroup(groupId, payload) {
801
+ return this.httpService
802
+ .postData(`${this.apiBaseUrl}/groups/interest/group/${groupId}/responses`, payload)
803
+ .pipe(map((response) => {
804
+ const body = response?.body;
805
+ return {
806
+ data: body?.data ?? [],
807
+ totalRecords: body?.totalRecords ?? 0,
808
+ offset: body?.offset ?? 0,
809
+ pageSize: body?.pageSize ?? 0,
810
+ };
811
+ }), catchError((errorRes) => {
812
+ throw errorRes;
813
+ }));
814
+ }
745
815
  /**
746
- * Returns the frontend-only static list of country calling codes for the
747
- * Phone Number field's country-code dropdown.
748
- * @return {SelectOption[]}
816
+ * Sets/overrides the membership level for an interested user from the Roster
817
+ * Management admin "Interested Rosters" tab (SP3M-428). Called when the admin
818
+ * picks a value in a row's Member Level dropdown.
819
+ *
820
+ * PUT {apiBaseUrl}/groups/interest/member-level
821
+ *
822
+ * The group, user and selected role id are sent in the request body
823
+ * ({@link UpdateMemberLevelPayload}). Guarded server-side by roster-management
824
+ * permissions. The base URL already carries the version segment, matching
825
+ * every other GroupsService call built as `${apiBaseUrl}/groups/...`, so the
826
+ * version is not repeated. The response envelope's body is returned as-is.
827
+ * @param {UpdateMemberLevelPayload} payload - Group + user + selected role id.
828
+ * @return {Observable<unknown>}
749
829
  * @memberof GroupsService
750
830
  */
751
- getCountryCallingCodes() {
752
- return COUNTRY_CALLING_CODES;
831
+ updateInterestMemberLevel(payload) {
832
+ return this.httpService
833
+ .putData(`${this.apiBaseUrl}/groups/interest/member-level`, payload)
834
+ .pipe(map((response) => response?.body ?? null), catchError((errorRes) => {
835
+ throw errorRes;
836
+ }));
753
837
  }
754
838
  /**
755
839
  * Build a reciprocal-credit endpoint URL from apiBaseUrl + the base path,
@@ -829,4 +913,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
829
913
  providedIn: 'root',
830
914
  }]
831
915
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.UserPermissionsService }, { type: i3.GroupPermissionsMapService }, { type: i1.AlertsService }, { type: i1.StorageService }]; } });
832
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdwRSxPQUFPLEVBQThCLFdBQVcsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RixPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBa0J4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW1CeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFDTCxVQUFVLEVBRVYsU0FBUyxHQUVWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFHckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRXRFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkJ4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbEMsY0FBOEIsQ0FBQyw2Q0FBNkM7O1FBUjVFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXhCLDJCQUFz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QUVEOzs7Ozs7T0FNRztJQUNILHNCQUFzQixDQUNwQixRQUFnQjtRQUVoQixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxRQUFRLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUM1RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDM0IsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzsrR0EvOUJVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGNhdGNoRXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwUGF5bG9hZCxcclxuICBDcmVhdGVHcm91cFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUnVsZSxcclxuICBHcm91cFR5cGVDb25maWd1cmF0aW9uLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ1ZhbHVlLFxyXG4gIEdyb3VwVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0c1NlcnZpY2UsIEh0dHBTZXJ2aWNlLCBTdG9yYWdlS2V5cywgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgR2V0R3JvdXBSZXNwb25zZSwgR2V0R3JvdXBzUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy92aWV3LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgRGVsZXRlR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwSW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIEdldEdyb3VwVXNlcnNSZXNwb25zZSxcclxuICBVc2VyLFxyXG4gIExvZ2dlZEluVXNlckluZm8sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEF2YWlsYWJsZUZvcmVpZ25Hcm91cCxcclxuICBSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93LFxyXG4gIFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZSxcclxuICBTYXZlUmVjaXByb2NhbENyZWRpdFBheWxvYWQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3JlY2lwcm9jYWwtY3JlZGl0Lm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBZGRPckVkaXRVc2VyUGF5bG9hZCxcclxuICBBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2UsXHJcbiAgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gIFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW9yLWVkaXQtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IERlbGV0ZVVzZXJHcm91cFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvZGVsZXRlLXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldFVzZXJEZXRhaWxzUGF5bG9hZCxcclxuICBTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9hZGQtbmV3LXVzZXIubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkLFxyXG4gIE9yZ2FuaXphdGlvblJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFzc2lmaWNhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBGb3JtU3RhdHVzLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEFsZXJ0VHlwZSxcclxuICBTZWxlY3RPcHRpb24sXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgQ09VTlRSWV9DQUxMSU5HX0NPREVTIH0gZnJvbSAnLi4vYXNzZXRzL2NvdW50cnktY2FsbGluZy1jb2Rlcyc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwUGVybWlzc2lvbixcclxuICBVc2VyUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSB9IGZyb20gJy4vZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJlbnRHcm91cHNJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhcmVudC1ncm91cHMtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFJvbGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IENhY2hlZFJlcXVpcmVkUHJvZmlsZUZpZWxkcyB9IGZyb20gJy4uL21vZGVscy9yZXF1aXJlZC1wcm9maWxlLWZpZWxkcy5tb2RlbCc7XHJcblxyXG4vKipcclxuICogTG9jYWwgc3RvcmFnZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gY2FjaGVzIHRoZSB0ZW5hbnQnc1xyXG4gKiByZXF1aXJlZCBwcm9maWxlIGZpZWxkcyBhdCBsb2dpbiAoc2hhcGU6IGB7IGFwcElkLCByZXF1aXJlZEZpZWxkcyB9YCkuIFRoZVxyXG4gKiBhZGQtdXNlciAvIGVkaXQtdXNlciBmb3JtcyByZWFkIHRoaXMgY2FjaGUgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBzbyB0aGV5XHJcbiAqIGFsd2F5cyByZWZsZWN0IHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbiByZWdhcmRsZXNzIG9mIEBJbnB1dC9yZXNvbHZlciB0aW1pbmcuXHJcbiAqL1xyXG5jb25zdCBSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEU19TVE9SQUdFX0tFWSA9ICdSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEUyc7XHJcblxyXG4vKipcclxuICogR3JvdXBzIHNlcnZpY2UgaXMgYW4gYWJzdHJhY3QgbGF5ZXIgYW5kIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBncm91cHMgUkVTVCBBUEkgY2FsbHMuXHJcbiAqIEBjbGFzcyBHcm91cHNTZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzU2VydmljZSB7XHJcbiAgZ3JvdXBzVGV4dCA9IHNjcmVlblRleHRzPy5lcnJvcnM7XHJcbiAgYXBpQmFzZVVybCE6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVzZXJQZXJtaXNzaW9uOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogVGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIChlLmcuIFsncGhvbmUnLCdhZGRyZXNzJywnZW1wbG95ZXInXSlcclxuICAgKiBzdXBwbGllZCBieSB0aGUgaG9zdCBhcHAgZnJvbSBpdHMgY2FjaGVkIHRlbmFudCBjb25maWd1cmF0aW9uLiBDb25zdW1lZCBieVxyXG4gICAqIHRoZSByb3N0ZXIgaW1wb3J0IHRvIGFwcGVuZCB0ZW5hbnQtbWFuZGF0ZWQgY29sdW1ucyB0byB0aGUgcmVxdWlyZWQtY29sdW1uXHJcbiAgICogbGlzdCBhbmQgdGhlIHNhbXBsZSBmaWxlLiBFbXB0eSB3aGVuIHRoZSB0ZW5hbnQgaGFzIG5vbmUgY29uZmlndXJlZC5cclxuICAgKi9cclxuICByZXF1aXJlZFByb2ZpbGVGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRHcm91cEluZm8hOiBHcm91cEluZm8gfCB1bmRlZmluZWQ7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUhOiBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBvcGVuTW9kYWxOb3RpZmllciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBGdW5jdGlvblR5cGU+KFxyXG4gICAgR3JvdXBGdW5jdGlvblR5cGUuVklFV19ST1NURVJcclxuICApO1xyXG4gIGdyb3VwVHlwZVJvbGVzITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBzZWxlY3RlZFVzZXJJbmZvITogR3JvdXBVc2VySW5mbztcclxuICBjYW5TaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIHJvc3RlckZ1bmN0aW9uVHlwZSE6IFJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG4gIGdyb3VwVHlwZXMhOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbiAgaXNQYXJlbnRHcm91cENoYW5nZWQgPSBmYWxzZTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgbWVtYmVyVHlwZXMhOiBSb2xlW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICByZXByZXNlbnRpbmdPcmdhbml6YXRpb25zOiBSZXByZXNlbnRpbmdPcmdhbml6YXRpb25bXSA9IFtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdXNlclBlcm1pc3Npb25zU2VydmljZTogVXNlclBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFBlcm1pc3Npb25zU2VydmljZTogR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldEFwcENvbmZpZyhhcGlCYXNlVXJsOiBzdHJpbmcsIHVzZXJQZXJtaXNzaW9uOiBhbnkpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgdGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIHByb3ZpZGVkIGJ5IHRoZSBob3N0IGFwcC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXF1aXJlZFByb2ZpbGVGaWVsZHMgLSBGaWVsZCBrZXlzIChlLmcuICdwaG9uZScpLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKHJlcXVpcmVkUHJvZmlsZUZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID0gcmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgKG5ldmVyIG51bGwpLlxyXG4gICAqXHJcbiAgICogUmVhZHMgdGhlIGxvY2FsIHN0b3JhZ2UgY2FjaGUgdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gd3JpdGVzIGF0IGxvZ2luIChrZXlcclxuICAgKiBgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNgKSBhcyB0aGUgc291cmNlIG9mIHRydXRoLCBzbyB0aGUgYWRkLXVzZXIgL1xyXG4gICAqIGVkaXQtdXNlciBmb3JtcyBhbHdheXMgcmVmbGVjdCB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24gcmVnYXJkbGVzcyBvZiB0aGVcclxuICAgKiBASW5wdXQvcmVzb2x2ZXIgdGltaW5nLlxyXG4gICAqXHJcbiAgICogVGhlIGNhY2hlIGlzIG9ubHkgdHJ1c3RlZCB3aGVuIGl0IGlzIHdlbGwtZm9ybWVkIGZvciB0aGUgYWN0aXZlXHJcbiAgICogYXBwbGljYXRpb246IGl0cyBgYXBwSWRgIG11c3QgbWF0Y2ggdGhlIGN1cnJlbnQgdXNlcidzIGBhcHBJZGAgYW5kIGl0c1xyXG4gICAqIGByZXF1aXJlZEZpZWxkc2AgbXVzdCBiZSBhbiBhcnJheS4gVGhpcyBndWFyZHMgYWdhaW5zdCAoYSkgYSBzdGFsZSBjYWNoZVxyXG4gICAqIGZyb20gYSBwcmV2aW91c2x5IG9wZW5lZCBhcHBsaWNhdGlvbiBhcHBseWluZyBhbm90aGVyIHRlbmFudCdzIGZpZWxkcywgYW5kXHJcbiAgICogKGIpIGEgbWFsZm9ybWVkIGNhY2hlIGNyYXNoaW5nIHRoZSBmb3JtcyB3aGVuIGNhbGxlcnMgcnVuXHJcbiAgICogYHJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKC4uLilgIG9uIGEgbm9uLWFycmF5IHZhbHVlLiBXaGVuIHRoZSBjYWNoZSBpc1xyXG4gICAqIG1pc3NpbmcsIGZvciBhbm90aGVyIGFwcCwgb3IgbWFsZm9ybWVkLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBpbi1tZW1vcnlcclxuICAgKiB2YWx1ZSBzZXQgdmlhIHtAbGluayBzZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHN9ICh0aGUgaG9zdCBASW5wdXQpLCB0aGVuIHRvXHJcbiAgICogYW4gZW1wdHkgbGlzdC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJlcXVpcmVkUHJvZmlsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlPy5nZXRWYWx1ZShcclxuICAgICAgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNfU1RPUkFHRV9LRVlcclxuICAgICkgYXMgQ2FjaGVkUmVxdWlyZWRQcm9maWxlRmllbGRzIHwgbnVsbDtcclxuICAgIGNvbnN0IGFjdGl2ZUFwcElkID0gdGhpcy5nZXRVc2VySW5mbygpPy5hcHBJZDtcclxuICAgIGNvbnN0IGlzQ2FjaGVVc2FibGUgPVxyXG4gICAgICAhIWNhY2hlZCAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNhY2hlZC5yZXF1aXJlZEZpZWxkcykgJiZcclxuICAgICAgKCFhY3RpdmVBcHBJZCB8fCBjYWNoZWQuYXBwSWQgPT09IGFjdGl2ZUFwcElkKTtcclxuICAgIGlmIChpc0NhY2hlVXNhYmxlKSByZXR1cm4gY2FjaGVkLnJlcXVpcmVkRmllbGRzO1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2goXHJcbiAgICAgICAgdGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0gPz8gdGhpcy5ncm91cHNUZXh0Py5kZWZhdWx0XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGN1c3RvbSBBUEkgZXJyb3JzOiBtYXBzIEJFIGVycm9yIGNvZGVzIHRvIG1lc3NhZ2VzIGFuZCBzaG93cyBhblxyXG4gICAqIGFsZXJ0LiBNaXJyb3JzIHRoZSBldmVudHMtYW5kLW1lZXRpbmdzIGVycm9yIGhhbmRsaW5nIHNvIHJlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogZmFpbHVyZXMgKGUuZy4gTVRHLTAxMSBkdXBsaWNhdGUsIE1URy0wMTIgcGVybWlzc2lvbikgc3VyZmFjZSBjb25zaXN0ZW50bHkuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvciB0aGUgSHR0cEVycm9yUmVzcG9uc2UgZnJvbSBhIGZhaWxlZCBjYWxsXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd0FsZXJ0PXRydWVdIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgYWxlcnRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnksIHNob3dBbGVydCA9IHRydWUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgaWYgKHNob3dBbGVydCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gc2VsZWN0ZWRHcm91cEluZm8gLXNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gW3NlbGVjdGVkR3JvdXBQYXJlbnRJbmZvXSAtc2VsZWN0ZWQgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEdyb3VwSW5mbyhcclxuICAgIHNlbGVjdGVkR3JvdXBJbmZvOiBHcm91cEluZm8gfCB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbz86IEdyb3VwSW5mbyB8IHVuZGVmaW5lZFxyXG4gICkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSW5mbyA9IHNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGFyZW50SW5mbyA9IHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwSW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBncm91cCBwYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwUGFyZW50SW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtHcm91cEZ1bmN0aW9uVHlwZX0gZ3JvdXBGdW5jdGlvblR5cGUgLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRHcm91cEZ1bmN0aW9uVHlwZShncm91cEZ1bmN0aW9uVHlwZTogR3JvdXBGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGUgPSBncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtHcm91cEZ1bmN0aW9uVHlwZX0gLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cEZ1bmN0aW9uVHlwZSgpOiBHcm91cEZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgaWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFVzZXJzKFxyXG4gICAgZ3JvdXBJZDogc3RyaW5nLFxyXG4gICAgc29ydENvbHVtbjogc3RyaW5nLFxyXG4gICAgc29ydERpcmVjdGlvbjogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvJHtncm91cElkfT9zb3J0Q29sdW1uPSR7c29ydENvbHVtbn0mYXNjZW5kaW5nT3JkZXI9JHtzb3J0RGlyZWN0aW9ufWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiB0aGUgZmlsdGVyZWQgcm9sZXMuXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJzQnlSb2xlcyhcclxuICAgIHBheWxvYWQ6IEZpbHRlclVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNGaWx0ZXJgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiBzZWFyY2hlZCBuYW1lIG9yIGVtYWlsXHJcbiAgICogQHBhcmFtIHtTZWFyY2hVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZWFyY2hHcm91cFVzZXJzKFxyXG4gICAgcGF5bG9hZDogU2VhcmNoVXNlcnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZ3JvdXBVc2Vyc1NlYXJjaGAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHJvbGVzIGJhc2VkIG9uIHRoZSBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cFR5cGVJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2hlY2tib3hPcHRpb25bXT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGdldEdyb3VwVHlwZVJvbGVzKGdyb3VwVHlwZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlLyR7Z3JvdXBUeXBlSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVzT3B0aW9uOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgICAgICAgICBjb25zdCBtZW1iZXJUeXBlczogUm9sZVtdID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgocm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocm9sZT8ucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwpIHtcclxuICAgICAgICAgICAgICBtZW1iZXJUeXBlcy5wdXNoKHJvbGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJvbGVzT3B0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHJvbGUucm9sZUlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcm9sZS5yb2xlTmFtZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2V0R3JvdXBUeXBlVXNlclJvbGVzKHJvbGVzT3B0aW9uKTtcclxuICAgICAgICAgIHRoaXMuc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVzT3B0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBjbGFzc2lmaWNhdGlvbnMgbWFzdGVyIGRhdGEgZnJvbSBjb25maWd1cmF0aW9uIGFuZCByZXR1cm5zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxDbGFzc2lmaWNhdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvY2xhc3NpZmljYXRpb25gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRydWUgaWYgbG9nZ2VkIGluIHVzZXIgaXMgYWRtaW4uXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGlzQWRtaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbmNhdGVuYXRlcyB0aGUgZ3JvdXAgdXNlcnMgYXNzaWduZWQgcm9sZXMgbmFtZSBzZXBhcmF0ZWQgYnkgY29tbWEgYXMgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBncm91cCB1c2VycyBpbiBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0dldEdyb3VwVXNlcnNSZXNwb25zZX0gcmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtVc2VyW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB0cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2U6IEdldEdyb3VwVXNlcnNSZXNwb25zZSk6IFVzZXJbXSB7XHJcbiAgICBjb25zdCB1c2VyczogVXNlcltdID0gW107XHJcbiAgICB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uRGVzYyA9XHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25OYW1lICtcclxuICAgICAgICAnICgnICtcclxuICAgICAgICBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbkRlc2MgK1xyXG4gICAgICAgICcpJztcclxuICAgICAgY29uc3Qgcm9sZXNMaXN0ID0gaXRlbT8ucm9sZXNMaXN0Py5yZWR1Y2UoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAocm9sZUxpc3Q6IGFueSwgcm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgcm9sZUxpc3RbXHJcbiAgICAgICAgICAgIHJvbGUucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwgPyAnbWVtYmVyVHlwZScgOiAncm9sZXMnXHJcbiAgICAgICAgICBdLnB1c2gocm9sZT8ucm9sZU5hbWUpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVMaXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBtZW1iZXJUeXBlOiBbXSwgcm9sZXM6IFtdIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zPy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0/LnVzZXJJZCxcclxuICAgICAgICBvcmdhbml6YXRpb25zOiBpdGVtPy5vcmdhbml6YXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3Qgb3JnYW5pemF0aW9ucyA9IGl0ZW0/Lm9yZ2FuaXphdGlvbnNcclxuICAgICAgICA/IGl0ZW0/Lm9yZ2FuaXphdGlvbnM/Lm1hcCgob3JnKSA9PiBvcmc/Lm9yZ05hbWUpLmpvaW4oJzsgJylcclxuICAgICAgICA6IG51bGw7XHJcbiAgICAgIHVzZXJzLnB1c2goe1xyXG4gICAgICAgIHVzZXJJZDogaXRlbS51c2VySWQsXHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBpdGVtLmVtYWlsLFxyXG4gICAgICAgIHJvbGU6IHJvbGVzTGlzdD8ucm9sZXM/Lmxlbmd0aCA/IHJvbGVzTGlzdD8ucm9sZXM/LmpvaW4oJywgJykgOiBudWxsLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbklkXHJcbiAgICAgICAgICA/IGNsYXNzaWZpY2F0aW9uRGVzY1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogcm9sZXNMaXN0Py5tZW1iZXJUeXBlPy5sZW5ndGhcclxuICAgICAgICAgID8gcm9sZXNMaXN0Py5tZW1iZXJUeXBlWzBdXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uOiBvcmdhbml6YXRpb25zLFxyXG4gICAgICAgIGVtcGxveWVyOiBpdGVtLmVtcGxveWVyPy5vcmdOYW1lID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVDb3VudHJ5Q29kZTogaXRlbS5waG9uZUNvdW50cnlDb2RlID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IGl0ZW0ucGhvbmVOdW1iZXIgPz8gbnVsbCxcclxuICAgICAgICBhZGRyZXNzOiBpdGVtLmFkZHJlc3MgPz8gbnVsbCxcclxuICAgICAgICBjYW5EZWxldGU6ICEoXHJcbiAgICAgICAgICBpdGVtPy51c2VySWQgPT09IHRoaXMudXNlckluZm8/LnVzZXJJZCAmJlxyXG4gICAgICAgICAgdGhpcy5pc0FkbWluVXNlcigpICYmXHJcbiAgICAgICAgICB0aGlzLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICAgICAgKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmb3JtYXR0ZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119IGdyb3VwVHlwZVJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlnVmFsdWV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRHcm91cFR5cGVzKFxyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2U6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXVxyXG4gICk6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlIHtcclxuICAgIGNvbnN0IGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlID0ge307XHJcbiAgICBncm91cFR5cGVSZXNwb25zZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGdyb3VwVHlwZXNbaXRlbS5jb25maWdGaWVsZElkXSA9IGl0ZW0uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIHVzZXIgZGV0YWlscyBpZiBlbWFpbCBpcyBmb3VuZCwgZWxzZSB0aHJvd3MgZXJyb3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3VzZXJCeUVtYWlsLyR7ZW1haWx9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdXNlciBkZXRhaWxzIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcGFyYW0ge0dldFVzZXJEZXRhaWxzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlckRldGFpbHMoXHJcbiAgICBwYXlsb2FkOiBHZXRVc2VyRGV0YWlsc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci91c2VyRGV0YWlsc2AsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgYWRkIG5ldyB1c2VyIGZvcm0gZGF0YSB0byB0aGUgQVBJIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHJldHVybnMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSByZXNwb25zZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqICAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiBAcGFyYW0ge0dyb3VwUm9zdGVyVHlwZX0gZ3JvdXBSb3N0ZXJUeXBlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgYWRkTmV3R3JvdXBVc2VyKFxyXG4gICAgQWRkT3JFZGl0VXNlclBheWxvYWQ6XHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jcmVhdGVHcm91cFVzZXJSb2xlYCxcclxuICAgICAgICBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxvYWRlZCBncm91cCB0eXBlIHVzZXIgcm9sZXNcclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IHVzZXJSb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBUeXBlVXNlclJvbGVzKHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcyA9IHVzZXJSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIHR5cGUgdXNlciByb2xlcy5cclxuICAgKiBAcmV0dXJuIHtDaGVja2JveE9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlVXNlclJvbGVzKCk6IENoZWNrYm94T3B0aW9uW10ge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcz8ubWFwKChvcHRpb24pID0+IChvcHRpb24uY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFR5cGVSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcGFyYW0ge0dyb3VwVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFVzZXJJbmZvKHVzZXJJbmZvOiBHcm91cFVzZXJJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVXNlckluZm99XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFVzZXJJbmZvKCk6IEdyb3VwVXNlckluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZ3JvdXAgdXNlciByb2xlcyBhbmQgb3RoZXIgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdEdyb3Vwc1VzZXJSb2xlKFxyXG4gICAgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2VkaXRHcm91cFVzZXJSb2xlYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckZ1bmN0aW9uVHlwZX0gcm9zdGVyRnVuY3Rpb25UeXBlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb3N0ZXJGdW5jdGlvblR5cGUocm9zdGVyRnVuY3Rpb25UeXBlOiBSb3N0ZXJGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlID0gcm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtSb3N0ZXJGdW5jdGlvblR5cGV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb3N0ZXJGdW5jdGlvblR5cGUoKTogUm9zdGVyRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXBzIGJhc2VkIG9uIHRoZSBzZWFyY2ggYnkgZ3JvdXAgbmFtZSBvciBhY3JvbnltLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ3JvdXBzQnlOYW1lQWNyb255bShcclxuICAgIHNlYXJjaFRlcm06IHN0cmluZyxcclxuICAgIGZpbHRlcmVkR3JvdXBUeXBlPzogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBzZWFyY2hHcm91cHNVcmwgPSBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9ncm91cHNCeU5hbWVBY3JvbnltP25hbWU9JHtzZWFyY2hUZXJtfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBmaWx0ZXJlZEdyb3VwVHlwZVxyXG4gICAgICAgICAgPyBzZWFyY2hHcm91cHNVcmwgKyBgJmdyb3VwVHlwZT0ke2ZpbHRlcmVkR3JvdXBUeXBlfWBcclxuICAgICAgICAgIDogc2VhcmNoR3JvdXBzVXJsXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHtHcm91cFBlcm1pc3Npb25bXX0gdXNlckdyb3VwUGVybWlzc2lvbnNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJHcm91cFBlcm1pc3Npb25zKHVzZXJHcm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSkge1xyXG4gICAgdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucyA9IHVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9nZ2VkIEluIHVzZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtMb2dnZWRJblVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckluZm8odXNlckluZm86IExvZ2dlZEluVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIGluIHVzZXIgaW5mb3JtYXRpb24uIEZhbGxzIGJhY2sgdG8gdGhlIFVTRVJfSU5GTyBibG9iXHJcbiAgICogdGhlIGhvc3QgYXBwIHBlcnNpc3RzIHRvIGxvY2FsIHN0b3JhZ2Ugd2hlbiB0aGUgdXNlckluZm8gaW5wdXQgaGFzbid0XHJcbiAgICogYmVlbiBzZXQgeWV0IChlLmcuIGhvc3Qgd2lyaW5nIG5vdCBjb21wbGV0ZWQgb3IgdGltaW5nIHJhY2Ugb24gaW5pdCkuXHJcbiAgICogQHJldHVybiB7TG9nZ2VkSW5Vc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJJbmZvKCk6IExvZ2dlZEluVXNlckluZm8ge1xyXG4gICAgaWYgKHRoaXMudXNlckluZm8/LmFwcElkKSByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICAgIGNvbnN0IHN0b3JlZFVzZXJJbmZvID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VmFsdWUoU3RvcmFnZUtleXMuVVNFUl9JTkZPKTtcclxuICAgIHJldHVybiBzdG9yZWRVc2VySW5mbz8uYXBwSWQgPyBzdG9yZWRVc2VySW5mbyA6IHRoaXMudXNlckluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBwZXJtaXNzaW9uIGJhc2VkIGFjY2VzcyBmb3IgcHJvdmlkZWQgZmVhdHVyZS5cclxuICAgKiBDaGVja3MgZm9yIGdyb3VwIGxldmVsIHBlcm1pc3Npb25zLCBhbmQgcHJvdmlkZXMgYWNjZXNzIGJhc2VkIG9uIGluZGl2aWR1YWwgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogRm9yIGdsb2JhbCBwZXJtaXNzaW9ucyBwcm92aWRlcyBhY2Nlc3MgYWNyb3NzIHRoZSBpbmRpdmlkdWFsIGdyb3VwcyBvciBTeXN0ZW0gZ3JvdXBzLlxyXG4gICAqIEBwYXJhbSB7UGVybWlzc2lvblR5cGV9IHBlcm1pc3Npb25UeXBlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQWNjZXNzKFxyXG4gICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLFxyXG4gICAgcGVybWlzc2lvbnM/OiBVc2VyUGVybWlzc2lvbltdIHwgbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uc1RvR3JvdXAgPVxyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS5maWx0ZXJVc2VyR3JvdXBQZXJtaXNzaW9ucyhcclxuICAgICAgICAgIHBlcm1pc3Npb25zLFxyXG4gICAgICAgICAgdGhpcy5ncm91cFBlcm1pc3Npb25zU2VydmljZS5nZXRHcm91cFBlcm1pc3Npb25zKClcclxuICAgICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgICB1c2VyUGVybWlzc2lvbnNUb0dyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgIHRoaXMuZ2V0VXNlckdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGxvYWRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TG9hZGVkR3JvdXBUeXBlcyhncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10pIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlcyA9IGdyb3VwVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldExvYWRlZEdyb3VwVHlwZXMoKTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWR9IG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25zKFxyXG4gICAgb3JnUmVxdWVzdFBheWxvYWQ6IE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9vcmdhbml6YXRpb25zYCxcclxuICAgICAgICBvcmdSZXF1ZXN0UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSBjb25maWd1cmF0aW9uIEJ1c2luZXNzIHJ1bGUgZm9yIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHsoQnVzaW5lc3NSdWxlICB8IHVuZGVmaW5lZCl9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTogQnVzaW5lc3NSdWxlIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzUnVsZSA9IHRoaXMuZ2V0TG9hZGVkR3JvdXBUeXBlcygpPy5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwPy5jb25maWdGaWVsZElkID09PSB0aGlzLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZVxyXG4gICAgKT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlO1xyXG4gICAgaWYoYnVzaW5lc3NSdWxlPy5yb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuRU5USVRZKVxyXG4gICAgICBidXNpbmVzc1J1bGUucm9zdGVyVHlwZSA9IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMO1xyXG4gICAgcmV0dXJuIGJ1c2luZXNzUnVsZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybSBzdWJtaXQgYnV0dG9uIGJhc2VkIG9uIHBhc3NlZCBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcGFyYW0ge0Zvcm1Db250cm9sU3RhdHVzfSBmb3JtU3RhdHVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgIGdyb3VwUm9zdGVyVHlwZTogR3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgZm9ybVN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMsXHJcbiAgICBzZWxlY3RlZFVzZXJSb2xlczogc3RyaW5nW11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKVxyXG4gICAgICByZXR1cm4gZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkVXNlclJvbGVzPy5sZW5ndGggPT09IDAgfHwgZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBpc1BhcmVudEdyb3VwQ2hhbmdlZCB0cnVlIG9yIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQYXJlbnRHcm91cENoYW5nZWRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKGlzUGFyZW50R3JvdXBDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkID0gaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHZhbHVlLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRQYXJlbnRHcm91cENoYW5nZVN0YXR1cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSBtZW1iZXJUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXM6IFJvbGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW1iZXJUeXBlcyA9IG1lbWJlclR5cGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHJldHVybiB7Um9sZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogUm9sZVtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lbWJlclR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZnJvbnRlbmQtb25seSBzdGF0aWMgbGlzdCBvZiBjb3VudHJ5IGNhbGxpbmcgY29kZXMgZm9yIHRoZVxyXG4gICAqIFBob25lIE51bWJlciBmaWVsZCdzIGNvdW50cnktY29kZSBkcm9wZG93bi5cclxuICAgKiBAcmV0dXJuIHtTZWxlY3RPcHRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldENvdW50cnlDYWxsaW5nQ29kZXMoKTogU2VsZWN0T3B0aW9uW10ge1xyXG4gICAgcmV0dXJuIENPVU5UUllfQ0FMTElOR19DT0RFUztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIFJlY2lwcm9jYWwgQ3JlZGl0IChTUDNNLTIyKVxyXG4gIC8vIFRoZSByZWNpcHJvY2FsIGNvbnRyb2xsZXIgbGl2ZXMgb24gdGhlIE1FRVRJTkdTIHNlcnZpY2UsIHJlYWNoZWQgdGhyb3VnaCB0aGVcclxuICAvLyBnYXRld2F5LiBhcGlCYXNlVXJsID0gYXBwQ29uZmlnLmJhc2VBcGlVcmwgKGVuZHMgaW4gYC92MWApLCBhbmQgdGhlIGdhdGV3YXlcclxuICAvLyByb3V0ZXMgdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYCR7YXBpQmFzZVVybH0vbWVldGluZ3NgIChzYW1lIGFzIGV2ZXJ5IG90aGVyXHJcbiAgLy8gbWVldGluZ3MvZXZlbnRzIGNhbGwsIGUuZy4gYCR7YXBpQmFzZVVybH0vbWVldGluZ3MvZXZlbnQvLi4uYCkuXHJcbiAgLy9cclxuICAvLyBUaGUgcmVjaXByb2NhbCBjb250cm9sbGVyIHNpdHMgb24gdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYGFkbWluL3JlY2lwcm9jYWwtY3JlZGl0YC5cclxuICAvLyBhcGlCYXNlVXJsIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50IChgLi4uL3YxYCksIGFuZCB0aGUgZ2F0ZXdheSByb3V0ZXNcclxuICAvLyB0aGUgbWVldGluZ3Mgc2VydmljZSB1bmRlciBgJHthcGlCYXNlVXJsfS9tZWV0aW5nc2AsIHNvIHRoZSB2ZXJzaW9uIGlzIE5PVCByZXBlYXRlZFxyXG4gIC8vIChubyBzZWNvbmQgYC92MWAgb3IgYC9hcGkvdjFgKS4gVGhlIGZ1bGwgcGF0aCBpczpcclxuICAvLyAgIGAke2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0Ly4uLmBcclxuICAvLyAgID0gaHR0cHM6Ly9zYWFwcHNhcGlkZXYuaWVlZS5vcmcvdjEvbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQvLi4uXHJcbiAgLy8gRXZlcnkgbWV0aG9kIGJ1aWxkcyBVUkxzIGZyb20gUkVDSVBST0NBTF9CQVNFX1BBVEggYmVsb3cuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBQYXRoIHByZWZpeCAocmVsYXRpdmUgdG8gYXBpQmFzZVVybCkgZm9yIHRoZSByZWNpcHJvY2FsLWNyZWRpdCBlbmRwb2ludHMuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUNJUFJPQ0FMX0JBU0VfUEFUSCA9ICdtZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIGEgcmVjaXByb2NhbC1jcmVkaXQgZW5kcG9pbnQgVVJMIGZyb20gYXBpQmFzZVVybCArIHRoZSBiYXNlIHBhdGgsXHJcbiAgICogZ3VhcmRpbmcgYWdhaW5zdCBhY2NpZGVudGFsIGRvdWJsZSBzbGFzaGVzIGlmIGFwaUJhc2VVcmwgaGFzIGEgdHJhaWxpbmcgc2xhc2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdWZmaXhdIGV4dHJhIHBhdGgvcXVlcnkgYXBwZW5kZWQgYWZ0ZXIgdGhlIGJhc2UgcGF0aC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFJlY2lwcm9jYWxVcmwoc3VmZml4ID0gJycpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYXBpQmFzZVVybD8ucmVwbGFjZSgvXFwvKyQvLCAnJykgPz8gJyc7XHJcbiAgICByZXR1cm4gYCR7YmFzZX0vJHt0aGlzLlJFQ0lQUk9DQUxfQkFTRV9QQVRIfSR7c3VmZml4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCB0aGUgZm9yZWlnbiBncm91cHMgYXZhaWxhYmxlIGZvciByZWNpcHJvY2FsIGNyZWRpdCBmb3IgYSBob21lIGdyb3VwLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfS9hdmFpbGFibGUtZ3JvdXBzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEF2YWlsYWJsZVJlY2lwcm9jYWxHcm91cHMoXHJcbiAgICBob21lR3JvdXBJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybChgLyR7aG9tZUdyb3VwSWR9L2F2YWlsYWJsZS1ncm91cHNgKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBleGlzdGluZyByZWNpcHJvY2FsLWNyZWRpdCBjb25maWcgcm93cyBmb3IgYSBob21lIGdyb3VwIChlZGl0IHByZWZpbGwpLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfVs/ZXZlbnRJZD0uLi5dXHJcbiAgICogUmV0dXJucyBvbmUgcm93IHBlciBmb3JlaWduIGdyb3VwOyBhbiBlbXB0eSBhcnJheSBtZWFucyByZWNpcHJvY2FsIGNyZWRpdCBpcyBvZmYuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudElkXSBvcHRpb25hbCDigJQgZmlsdGVycyB0byBhbiBldmVudC1zY29wZWQgY29uZmlnLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPFJlY2lwcm9jYWxDcmVkaXRDb25maWdSb3dbXT4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UmVjaXByb2NhbENvbmZpZyhcclxuICAgIGhvbWVHcm91cElkOiBzdHJpbmcsXHJcbiAgICBldmVudElkPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBldmVudElkID8gYD9ldmVudElkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGV2ZW50SWQpfWAgOiAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtob21lR3JvdXBJZH0ke3F1ZXJ5fWApKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgcmVjaXByb2NhbC1jcmVkaXQgY29uZmlnIChjcmVhdGVzL3JlYWN0aXZhdGVzIG9uZSByb3cgcGVyIGZvcmVpZ24gZ3JvdXApLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogQHBhcmFtIHtTYXZlUmVjaXByb2NhbENyZWRpdFBheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93W10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNhdmVSZWNpcHJvY2FsQ3JlZGl0KFxyXG4gICAgcGF5bG9hZDogU2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKCksIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSAoc29mdCBkZWxldGUpIGEgc2luZ2xlIHJlY2lwcm9jYWwtY3JlZGl0IGNvbmZpZyByb3cgYnkgaXRzIGNvbmZpZ0lkLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0L3tjb25maWdJZH0vcmVtb3ZlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ0lkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8bnVsbD4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgcmVtb3ZlUmVjaXByb2NhbENvbmZpZyhcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxudWxsPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtjb25maWdJZH0vcmVtb3ZlYCksIHt9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
916
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdwRSxPQUFPLEVBQThCLFdBQVcsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RixPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBa0J4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW1CeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFDTCxVQUFVLEVBRVYsU0FBUyxHQUVWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFNOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFVckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRXRFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkJ4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbEMsY0FBOEIsQ0FBQyw2Q0FBNkM7O1FBUjVFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXhCLDJCQUFz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QyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7K0dBNWtDVSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBjYXRjaEVycm9yLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDcmVhdGVHcm91cFBheWxvYWQsXHJcbiAgQ3JlYXRlR3JvdXBSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvY3JlYXRlLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBCdXNpbmVzc1J1bGUsXHJcbiAgR3JvdXBUeXBlQ29uZmlndXJhdGlvbixcclxuICBHcm91cFR5cGVDb25maWdWYWx1ZSxcclxuICBHcm91cFR5cGVSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBBbGVydHNTZXJ2aWNlLCBIdHRwU2VydmljZSwgU3RvcmFnZUtleXMsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdldEdyb3VwUmVzcG9uc2UsIEdldEdyb3Vwc1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdmlldy1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZUdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBHZXRHcm91cFVzZXJzUmVzcG9uc2UsXHJcbiAgVXNlcixcclxuICBMb2dnZWRJblVzZXJJbmZvLFxyXG59IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLm1vZGVsJztcclxuaW1wb3J0IHsgRWRpdEdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9lZGl0LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBdmFpbGFibGVGb3JlaWduR3JvdXAsXHJcbiAgUmVjaXByb2NhbENyZWRpdENvbmZpZ1JvdyxcclxuICBSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2UsXHJcbiAgU2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9yZWNpcHJvY2FsLWNyZWRpdC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSb3N0ZXJGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9zdGVyLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFVzZXJJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLXVzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlLFxyXG4gIEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCxcclxuICBSZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FkZC1vci1lZGl0LXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRVc2VyRGV0YWlsc1BheWxvYWQsXHJcbiAgU2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW5ldy11c2VyLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZCxcclxuICBPcmdhbml6YXRpb25SZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvb3JnYW5pemF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ2xhc3NpZmljYXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy9jbGFzc2lmaWNhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUm9zdGVyVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb3N0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybVN0YXR1cyxcclxuICBDaGVja2JveE9wdGlvbixcclxuICBBbGVydFR5cGUsXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7IENPVU5UUllfRElBTF9DT0RFUyB9IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwUGVybWlzc2lvbixcclxuICBVc2VyUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSB9IGZyb20gJy4vZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJlbnRHcm91cHNJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhcmVudC1ncm91cHMtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFJvbGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IENhY2hlZFJlcXVpcmVkUHJvZmlsZUZpZWxkcyB9IGZyb20gJy4uL21vZGVscy9yZXF1aXJlZC1wcm9maWxlLWZpZWxkcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlldyxcclxuICBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkLFxyXG4gIEludGVyZXN0ZWRSb3N0ZXJzUmVzcG9uc2UsXHJcbiAgSW50ZXJlc3RGb3JtUmVzcG9uc2UsXHJcbiAgVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9pbnRlcmVzdC1yZXNwb25zZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogTG9jYWwgc3RvcmFnZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gY2FjaGVzIHRoZSB0ZW5hbnQnc1xyXG4gKiByZXF1aXJlZCBwcm9maWxlIGZpZWxkcyBhdCBsb2dpbiAoc2hhcGU6IGB7IGFwcElkLCByZXF1aXJlZEZpZWxkcyB9YCkuIFRoZVxyXG4gKiBhZGQtdXNlciAvIGVkaXQtdXNlciBmb3JtcyByZWFkIHRoaXMgY2FjaGUgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBzbyB0aGV5XHJcbiAqIGFsd2F5cyByZWZsZWN0IHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbiByZWdhcmRsZXNzIG9mIEBJbnB1dC9yZXNvbHZlciB0aW1pbmcuXHJcbiAqL1xyXG5jb25zdCBSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEU19TVE9SQUdFX0tFWSA9ICdSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEUyc7XHJcblxyXG4vKipcclxuICogR3JvdXBzIHNlcnZpY2UgaXMgYW4gYWJzdHJhY3QgbGF5ZXIgYW5kIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBncm91cHMgUkVTVCBBUEkgY2FsbHMuXHJcbiAqIEBjbGFzcyBHcm91cHNTZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzU2VydmljZSB7XHJcbiAgZ3JvdXBzVGV4dCA9IHNjcmVlblRleHRzPy5lcnJvcnM7XHJcbiAgYXBpQmFzZVVybCE6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVzZXJQZXJtaXNzaW9uOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogVGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIChlLmcuIFsncGhvbmUnLCdhZGRyZXNzJywnZW1wbG95ZXInXSlcclxuICAgKiBzdXBwbGllZCBieSB0aGUgaG9zdCBhcHAgZnJvbSBpdHMgY2FjaGVkIHRlbmFudCBjb25maWd1cmF0aW9uLiBDb25zdW1lZCBieVxyXG4gICAqIHRoZSByb3N0ZXIgaW1wb3J0IHRvIGFwcGVuZCB0ZW5hbnQtbWFuZGF0ZWQgY29sdW1ucyB0byB0aGUgcmVxdWlyZWQtY29sdW1uXHJcbiAgICogbGlzdCBhbmQgdGhlIHNhbXBsZSBmaWxlLiBFbXB0eSB3aGVuIHRoZSB0ZW5hbnQgaGFzIG5vbmUgY29uZmlndXJlZC5cclxuICAgKi9cclxuICByZXF1aXJlZFByb2ZpbGVGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRHcm91cEluZm8hOiBHcm91cEluZm8gfCB1bmRlZmluZWQ7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUhOiBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBvcGVuTW9kYWxOb3RpZmllciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBGdW5jdGlvblR5cGU+KFxyXG4gICAgR3JvdXBGdW5jdGlvblR5cGUuVklFV19ST1NURVJcclxuICApO1xyXG4gIGdyb3VwVHlwZVJvbGVzITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBzZWxlY3RlZFVzZXJJbmZvITogR3JvdXBVc2VySW5mbztcclxuICBjYW5TaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIHJvc3RlckZ1bmN0aW9uVHlwZSE6IFJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG4gIGdyb3VwVHlwZXMhOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbiAgaXNQYXJlbnRHcm91cENoYW5nZWQgPSBmYWxzZTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgbWVtYmVyVHlwZXMhOiBSb2xlW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICByZXByZXNlbnRpbmdPcmdhbml6YXRpb25zOiBSZXByZXNlbnRpbmdPcmdhbml6YXRpb25bXSA9IFtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdXNlclBlcm1pc3Npb25zU2VydmljZTogVXNlclBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFBlcm1pc3Npb25zU2VydmljZTogR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldEFwcENvbmZpZyhhcGlCYXNlVXJsOiBzdHJpbmcsIHVzZXJQZXJtaXNzaW9uOiBhbnkpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgdGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIHByb3ZpZGVkIGJ5IHRoZSBob3N0IGFwcC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXF1aXJlZFByb2ZpbGVGaWVsZHMgLSBGaWVsZCBrZXlzIChlLmcuICdwaG9uZScpLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKHJlcXVpcmVkUHJvZmlsZUZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID0gcmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgKG5ldmVyIG51bGwpLlxyXG4gICAqXHJcbiAgICogUmVhZHMgdGhlIGxvY2FsIHN0b3JhZ2UgY2FjaGUgdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gd3JpdGVzIGF0IGxvZ2luIChrZXlcclxuICAgKiBgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNgKSBhcyB0aGUgc291cmNlIG9mIHRydXRoLCBzbyB0aGUgYWRkLXVzZXIgL1xyXG4gICAqIGVkaXQtdXNlciBmb3JtcyBhbHdheXMgcmVmbGVjdCB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24gcmVnYXJkbGVzcyBvZiB0aGVcclxuICAgKiBASW5wdXQvcmVzb2x2ZXIgdGltaW5nLlxyXG4gICAqXHJcbiAgICogVGhlIGNhY2hlIGlzIG9ubHkgdHJ1c3RlZCB3aGVuIGl0IGlzIHdlbGwtZm9ybWVkIGZvciB0aGUgYWN0aXZlXHJcbiAgICogYXBwbGljYXRpb246IGl0cyBgYXBwSWRgIG11c3QgbWF0Y2ggdGhlIGN1cnJlbnQgdXNlcidzIGBhcHBJZGAgYW5kIGl0c1xyXG4gICAqIGByZXF1aXJlZEZpZWxkc2AgbXVzdCBiZSBhbiBhcnJheS4gVGhpcyBndWFyZHMgYWdhaW5zdCAoYSkgYSBzdGFsZSBjYWNoZVxyXG4gICAqIGZyb20gYSBwcmV2aW91c2x5IG9wZW5lZCBhcHBsaWNhdGlvbiBhcHBseWluZyBhbm90aGVyIHRlbmFudCdzIGZpZWxkcywgYW5kXHJcbiAgICogKGIpIGEgbWFsZm9ybWVkIGNhY2hlIGNyYXNoaW5nIHRoZSBmb3JtcyB3aGVuIGNhbGxlcnMgcnVuXHJcbiAgICogYHJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKC4uLilgIG9uIGEgbm9uLWFycmF5IHZhbHVlLiBXaGVuIHRoZSBjYWNoZSBpc1xyXG4gICAqIG1pc3NpbmcsIGZvciBhbm90aGVyIGFwcCwgb3IgbWFsZm9ybWVkLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBpbi1tZW1vcnlcclxuICAgKiB2YWx1ZSBzZXQgdmlhIHtAbGluayBzZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHN9ICh0aGUgaG9zdCBASW5wdXQpLCB0aGVuIHRvXHJcbiAgICogYW4gZW1wdHkgbGlzdC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJlcXVpcmVkUHJvZmlsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlPy5nZXRWYWx1ZShcclxuICAgICAgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNfU1RPUkFHRV9LRVlcclxuICAgICkgYXMgQ2FjaGVkUmVxdWlyZWRQcm9maWxlRmllbGRzIHwgbnVsbDtcclxuICAgIGNvbnN0IGFjdGl2ZUFwcElkID0gdGhpcy5nZXRVc2VySW5mbygpPy5hcHBJZDtcclxuICAgIGNvbnN0IGlzQ2FjaGVVc2FibGUgPVxyXG4gICAgICAhIWNhY2hlZCAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNhY2hlZC5yZXF1aXJlZEZpZWxkcykgJiZcclxuICAgICAgKCFhY3RpdmVBcHBJZCB8fCBjYWNoZWQuYXBwSWQgPT09IGFjdGl2ZUFwcElkKTtcclxuICAgIGlmIChpc0NhY2hlVXNhYmxlKSByZXR1cm4gY2FjaGVkLnJlcXVpcmVkRmllbGRzO1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2goXHJcbiAgICAgICAgdGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0gPz8gdGhpcy5ncm91cHNUZXh0Py5kZWZhdWx0XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGN1c3RvbSBBUEkgZXJyb3JzOiBtYXBzIEJFIGVycm9yIGNvZGVzIHRvIG1lc3NhZ2VzIGFuZCBzaG93cyBhblxyXG4gICAqIGFsZXJ0LiBNaXJyb3JzIHRoZSBldmVudHMtYW5kLW1lZXRpbmdzIGVycm9yIGhhbmRsaW5nIHNvIHJlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogZmFpbHVyZXMgKGUuZy4gTVRHLTAxMSBkdXBsaWNhdGUsIE1URy0wMTIgcGVybWlzc2lvbikgc3VyZmFjZSBjb25zaXN0ZW50bHkuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvciB0aGUgSHR0cEVycm9yUmVzcG9uc2UgZnJvbSBhIGZhaWxlZCBjYWxsXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd0FsZXJ0PXRydWVdIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgYWxlcnRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnksIHNob3dBbGVydCA9IHRydWUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgaWYgKHNob3dBbGVydCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gc2VsZWN0ZWRHcm91cEluZm8gLXNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gW3NlbGVjdGVkR3JvdXBQYXJlbnRJbmZvXSAtc2VsZWN0ZWQgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEdyb3VwSW5mbyhcclxuICAgIHNlbGVjdGVkR3JvdXBJbmZvOiBHcm91cEluZm8gfCB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbz86IEdyb3VwSW5mbyB8IHVuZGVmaW5lZFxyXG4gICkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSW5mbyA9IHNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGFyZW50SW5mbyA9IHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwSW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBncm91cCBwYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwUGFyZW50SW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtHcm91cEZ1bmN0aW9uVHlwZX0gZ3JvdXBGdW5jdGlvblR5cGUgLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRHcm91cEZ1bmN0aW9uVHlwZShncm91cEZ1bmN0aW9uVHlwZTogR3JvdXBGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGUgPSBncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtHcm91cEZ1bmN0aW9uVHlwZX0gLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cEZ1bmN0aW9uVHlwZSgpOiBHcm91cEZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgaWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFVzZXJzKFxyXG4gICAgZ3JvdXBJZDogc3RyaW5nLFxyXG4gICAgc29ydENvbHVtbjogc3RyaW5nLFxyXG4gICAgc29ydERpcmVjdGlvbjogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvJHtncm91cElkfT9zb3J0Q29sdW1uPSR7c29ydENvbHVtbn0mYXNjZW5kaW5nT3JkZXI9JHtzb3J0RGlyZWN0aW9ufWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiB0aGUgZmlsdGVyZWQgcm9sZXMuXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJzQnlSb2xlcyhcclxuICAgIHBheWxvYWQ6IEZpbHRlclVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNGaWx0ZXJgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiBzZWFyY2hlZCBuYW1lIG9yIGVtYWlsXHJcbiAgICogQHBhcmFtIHtTZWFyY2hVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZWFyY2hHcm91cFVzZXJzKFxyXG4gICAgcGF5bG9hZDogU2VhcmNoVXNlcnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZ3JvdXBVc2Vyc1NlYXJjaGAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHJvbGVzIGJhc2VkIG9uIHRoZSBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cFR5cGVJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2hlY2tib3hPcHRpb25bXT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGdldEdyb3VwVHlwZVJvbGVzKGdyb3VwVHlwZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlLyR7Z3JvdXBUeXBlSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVzT3B0aW9uOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgICAgICAgICBjb25zdCBtZW1iZXJUeXBlczogUm9sZVtdID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgocm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocm9sZT8ucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwpIHtcclxuICAgICAgICAgICAgICBtZW1iZXJUeXBlcy5wdXNoKHJvbGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJvbGVzT3B0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHJvbGUucm9sZUlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcm9sZS5yb2xlTmFtZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2V0R3JvdXBUeXBlVXNlclJvbGVzKHJvbGVzT3B0aW9uKTtcclxuICAgICAgICAgIHRoaXMuc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVzT3B0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBjbGFzc2lmaWNhdGlvbnMgbWFzdGVyIGRhdGEgZnJvbSBjb25maWd1cmF0aW9uIGFuZCByZXR1cm5zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxDbGFzc2lmaWNhdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvY2xhc3NpZmljYXRpb25gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRydWUgaWYgbG9nZ2VkIGluIHVzZXIgaXMgYWRtaW4uXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGlzQWRtaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbmNhdGVuYXRlcyB0aGUgZ3JvdXAgdXNlcnMgYXNzaWduZWQgcm9sZXMgbmFtZSBzZXBhcmF0ZWQgYnkgY29tbWEgYXMgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBncm91cCB1c2VycyBpbiBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0dldEdyb3VwVXNlcnNSZXNwb25zZX0gcmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtVc2VyW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB0cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2U6IEdldEdyb3VwVXNlcnNSZXNwb25zZSk6IFVzZXJbXSB7XHJcbiAgICBjb25zdCB1c2VyczogVXNlcltdID0gW107XHJcbiAgICB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uRGVzYyA9XHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25OYW1lICtcclxuICAgICAgICAnICgnICtcclxuICAgICAgICBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbkRlc2MgK1xyXG4gICAgICAgICcpJztcclxuICAgICAgY29uc3Qgcm9sZXNMaXN0ID0gaXRlbT8ucm9sZXNMaXN0Py5yZWR1Y2UoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAocm9sZUxpc3Q6IGFueSwgcm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgcm9sZUxpc3RbXHJcbiAgICAgICAgICAgIHJvbGUucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwgPyAnbWVtYmVyVHlwZScgOiAncm9sZXMnXHJcbiAgICAgICAgICBdLnB1c2gocm9sZT8ucm9sZU5hbWUpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVMaXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBtZW1iZXJUeXBlOiBbXSwgcm9sZXM6IFtdIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zPy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0/LnVzZXJJZCxcclxuICAgICAgICBvcmdhbml6YXRpb25zOiBpdGVtPy5vcmdhbml6YXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3Qgb3JnYW5pemF0aW9ucyA9IGl0ZW0/Lm9yZ2FuaXphdGlvbnNcclxuICAgICAgICA/IGl0ZW0/Lm9yZ2FuaXphdGlvbnM/Lm1hcCgob3JnKSA9PiBvcmc/Lm9yZ05hbWUpLmpvaW4oJzsgJylcclxuICAgICAgICA6IG51bGw7XHJcbiAgICAgIHVzZXJzLnB1c2goe1xyXG4gICAgICAgIHVzZXJJZDogaXRlbS51c2VySWQsXHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBpdGVtLmVtYWlsLFxyXG4gICAgICAgIHJvbGU6IHJvbGVzTGlzdD8ucm9sZXM/Lmxlbmd0aCA/IHJvbGVzTGlzdD8ucm9sZXM/LmpvaW4oJywgJykgOiBudWxsLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbklkXHJcbiAgICAgICAgICA/IGNsYXNzaWZpY2F0aW9uRGVzY1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogcm9sZXNMaXN0Py5tZW1iZXJUeXBlPy5sZW5ndGhcclxuICAgICAgICAgID8gcm9sZXNMaXN0Py5tZW1iZXJUeXBlWzBdXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uOiBvcmdhbml6YXRpb25zLFxyXG4gICAgICAgIGVtcGxveWVyOiBpdGVtLmVtcGxveWVyPy5vcmdOYW1lID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVDb3VudHJ5Q29kZTogaXRlbS5waG9uZUNvdW50cnlDb2RlID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IGl0ZW0ucGhvbmVOdW1iZXIgPz8gbnVsbCxcclxuICAgICAgICBhZGRyZXNzOiBpdGVtLmFkZHJlc3MgPz8gbnVsbCxcclxuICAgICAgICBjYW5EZWxldGU6ICEoXHJcbiAgICAgICAgICBpdGVtPy51c2VySWQgPT09IHRoaXMudXNlckluZm8/LnVzZXJJZCAmJlxyXG4gICAgICAgICAgdGhpcy5pc0FkbWluVXNlcigpICYmXHJcbiAgICAgICAgICB0aGlzLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICAgICAgKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmb3JtYXR0ZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119IGdyb3VwVHlwZVJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlnVmFsdWV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRHcm91cFR5cGVzKFxyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2U6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXVxyXG4gICk6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlIHtcclxuICAgIGNvbnN0IGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlID0ge307XHJcbiAgICBncm91cFR5cGVSZXNwb25zZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGdyb3VwVHlwZXNbaXRlbS5jb25maWdGaWVsZElkXSA9IGl0ZW0uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIHVzZXIgZGV0YWlscyBpZiBlbWFpbCBpcyBmb3VuZCwgZWxzZSB0aHJvd3MgZXJyb3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3VzZXJCeUVtYWlsLyR7ZW1haWx9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdXNlciBkZXRhaWxzIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcGFyYW0ge0dldFVzZXJEZXRhaWxzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlckRldGFpbHMoXHJcbiAgICBwYXlsb2FkOiBHZXRVc2VyRGV0YWlsc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci91c2VyRGV0YWlsc2AsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgYWRkIG5ldyB1c2VyIGZvcm0gZGF0YSB0byB0aGUgQVBJIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHJldHVybnMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSByZXNwb25zZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqICAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiBAcGFyYW0ge0dyb3VwUm9zdGVyVHlwZX0gZ3JvdXBSb3N0ZXJUeXBlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgYWRkTmV3R3JvdXBVc2VyKFxyXG4gICAgQWRkT3JFZGl0VXNlclBheWxvYWQ6XHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jcmVhdGVHcm91cFVzZXJSb2xlYCxcclxuICAgICAgICBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxvYWRlZCBncm91cCB0eXBlIHVzZXIgcm9sZXNcclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IHVzZXJSb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBUeXBlVXNlclJvbGVzKHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcyA9IHVzZXJSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIHR5cGUgdXNlciByb2xlcy5cclxuICAgKiBAcmV0dXJuIHtDaGVja2JveE9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlVXNlclJvbGVzKCk6IENoZWNrYm94T3B0aW9uW10ge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcz8ubWFwKChvcHRpb24pID0+IChvcHRpb24uY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFR5cGVSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcGFyYW0ge0dyb3VwVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFVzZXJJbmZvKHVzZXJJbmZvOiBHcm91cFVzZXJJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVXNlckluZm99XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFVzZXJJbmZvKCk6IEdyb3VwVXNlckluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZ3JvdXAgdXNlciByb2xlcyBhbmQgb3RoZXIgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdEdyb3Vwc1VzZXJSb2xlKFxyXG4gICAgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2VkaXRHcm91cFVzZXJSb2xlYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckZ1bmN0aW9uVHlwZX0gcm9zdGVyRnVuY3Rpb25UeXBlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb3N0ZXJGdW5jdGlvblR5cGUocm9zdGVyRnVuY3Rpb25UeXBlOiBSb3N0ZXJGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlID0gcm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtSb3N0ZXJGdW5jdGlvblR5cGV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb3N0ZXJGdW5jdGlvblR5cGUoKTogUm9zdGVyRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXBzIGJhc2VkIG9uIHRoZSBzZWFyY2ggYnkgZ3JvdXAgbmFtZSBvciBhY3JvbnltLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ3JvdXBzQnlOYW1lQWNyb255bShcclxuICAgIHNlYXJjaFRlcm06IHN0cmluZyxcclxuICAgIGZpbHRlcmVkR3JvdXBUeXBlPzogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBzZWFyY2hHcm91cHNVcmwgPSBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9ncm91cHNCeU5hbWVBY3JvbnltP25hbWU9JHtzZWFyY2hUZXJtfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBmaWx0ZXJlZEdyb3VwVHlwZVxyXG4gICAgICAgICAgPyBzZWFyY2hHcm91cHNVcmwgKyBgJmdyb3VwVHlwZT0ke2ZpbHRlcmVkR3JvdXBUeXBlfWBcclxuICAgICAgICAgIDogc2VhcmNoR3JvdXBzVXJsXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHtHcm91cFBlcm1pc3Npb25bXX0gdXNlckdyb3VwUGVybWlzc2lvbnNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJHcm91cFBlcm1pc3Npb25zKHVzZXJHcm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSkge1xyXG4gICAgdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucyA9IHVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9nZ2VkIEluIHVzZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtMb2dnZWRJblVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckluZm8odXNlckluZm86IExvZ2dlZEluVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIGluIHVzZXIgaW5mb3JtYXRpb24uIEZhbGxzIGJhY2sgdG8gdGhlIFVTRVJfSU5GTyBibG9iXHJcbiAgICogdGhlIGhvc3QgYXBwIHBlcnNpc3RzIHRvIGxvY2FsIHN0b3JhZ2Ugd2hlbiB0aGUgdXNlckluZm8gaW5wdXQgaGFzbid0XHJcbiAgICogYmVlbiBzZXQgeWV0IChlLmcuIGhvc3Qgd2lyaW5nIG5vdCBjb21wbGV0ZWQgb3IgdGltaW5nIHJhY2Ugb24gaW5pdCkuXHJcbiAgICogQHJldHVybiB7TG9nZ2VkSW5Vc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJJbmZvKCk6IExvZ2dlZEluVXNlckluZm8ge1xyXG4gICAgaWYgKHRoaXMudXNlckluZm8/LmFwcElkKSByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICAgIGNvbnN0IHN0b3JlZFVzZXJJbmZvID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VmFsdWUoU3RvcmFnZUtleXMuVVNFUl9JTkZPKTtcclxuICAgIHJldHVybiBzdG9yZWRVc2VySW5mbz8uYXBwSWQgPyBzdG9yZWRVc2VySW5mbyA6IHRoaXMudXNlckluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBwZXJtaXNzaW9uIGJhc2VkIGFjY2VzcyBmb3IgcHJvdmlkZWQgZmVhdHVyZS5cclxuICAgKiBDaGVja3MgZm9yIGdyb3VwIGxldmVsIHBlcm1pc3Npb25zLCBhbmQgcHJvdmlkZXMgYWNjZXNzIGJhc2VkIG9uIGluZGl2aWR1YWwgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogRm9yIGdsb2JhbCBwZXJtaXNzaW9ucyBwcm92aWRlcyBhY2Nlc3MgYWNyb3NzIHRoZSBpbmRpdmlkdWFsIGdyb3VwcyBvciBTeXN0ZW0gZ3JvdXBzLlxyXG4gICAqIEBwYXJhbSB7UGVybWlzc2lvblR5cGV9IHBlcm1pc3Npb25UeXBlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQWNjZXNzKFxyXG4gICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLFxyXG4gICAgcGVybWlzc2lvbnM/OiBVc2VyUGVybWlzc2lvbltdIHwgbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uc1RvR3JvdXAgPVxyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS5maWx0ZXJVc2VyR3JvdXBQZXJtaXNzaW9ucyhcclxuICAgICAgICAgIHBlcm1pc3Npb25zLFxyXG4gICAgICAgICAgdGhpcy5ncm91cFBlcm1pc3Npb25zU2VydmljZS5nZXRHcm91cFBlcm1pc3Npb25zKClcclxuICAgICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgICB1c2VyUGVybWlzc2lvbnNUb0dyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgIHRoaXMuZ2V0VXNlckdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGxvYWRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TG9hZGVkR3JvdXBUeXBlcyhncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10pIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlcyA9IGdyb3VwVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldExvYWRlZEdyb3VwVHlwZXMoKTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWR9IG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25zKFxyXG4gICAgb3JnUmVxdWVzdFBheWxvYWQ6IE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9vcmdhbml6YXRpb25zYCxcclxuICAgICAgICBvcmdSZXF1ZXN0UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSBjb25maWd1cmF0aW9uIEJ1c2luZXNzIHJ1bGUgZm9yIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHsoQnVzaW5lc3NSdWxlICB8IHVuZGVmaW5lZCl9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTogQnVzaW5lc3NSdWxlIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzUnVsZSA9IHRoaXMuZ2V0TG9hZGVkR3JvdXBUeXBlcygpPy5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwPy5jb25maWdGaWVsZElkID09PSB0aGlzLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZVxyXG4gICAgKT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlO1xyXG4gICAgaWYoYnVzaW5lc3NSdWxlPy5yb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuRU5USVRZKVxyXG4gICAgICBidXNpbmVzc1J1bGUucm9zdGVyVHlwZSA9IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMO1xyXG4gICAgcmV0dXJuIGJ1c2luZXNzUnVsZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybSBzdWJtaXQgYnV0dG9uIGJhc2VkIG9uIHBhc3NlZCBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcGFyYW0ge0Zvcm1Db250cm9sU3RhdHVzfSBmb3JtU3RhdHVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgIGdyb3VwUm9zdGVyVHlwZTogR3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgZm9ybVN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMsXHJcbiAgICBzZWxlY3RlZFVzZXJSb2xlczogc3RyaW5nW11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKVxyXG4gICAgICByZXR1cm4gZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkVXNlclJvbGVzPy5sZW5ndGggPT09IDAgfHwgZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBpc1BhcmVudEdyb3VwQ2hhbmdlZCB0cnVlIG9yIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQYXJlbnRHcm91cENoYW5nZWRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKGlzUGFyZW50R3JvdXBDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkID0gaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHZhbHVlLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRQYXJlbnRHcm91cENoYW5nZVN0YXR1cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSBtZW1iZXJUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXM6IFJvbGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW1iZXJUeXBlcyA9IG1lbWJlclR5cGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHJldHVybiB7Um9sZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogUm9sZVtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lbWJlclR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHVuaXF1ZSBjYWxsaW5nIGNvZGVzIGRlcml2ZWQgZnJvbSBwaG9uZSBjb3VudHJ5IG1ldGFkYXRhLiAqL1xyXG4gIGdldENvdW50cnlDYWxsaW5nQ29kZXMoKTogU2VsZWN0T3B0aW9uW10ge1xyXG4gICAgY29uc3QgZGlhbENvZGVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KENPVU5UUllfRElBTF9DT0RFUy5tYXAoKGNvdW50cnkpID0+IGNvdW50cnkuZGlhbENvZGUpKSxcclxuICAgIF0uc29ydChcclxuICAgICAgKGZpcnN0LCBzZWNvbmQpID0+XHJcbiAgICAgICAgTnVtYmVyKGZpcnN0LnNsaWNlKDEpKSAtIE51bWJlcihzZWNvbmQuc2xpY2UoMSkpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGRpYWxDb2Rlcy5tYXAoKGRpYWxDb2RlKSA9PiAoeyBpZDogZGlhbENvZGUsIG5hbWU6IGRpYWxDb2RlIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHN0b3JlZCBpbnRlcmVzdC1mb3JtIHJlc3BvbnNlcyBmb3IgYW4gaW50ZXJlc3QgcmVjb3JkLCBmb3IgdGhlXHJcbiAgICogUm9zdGVyIE1hbmFnZW1lbnQgYWRtaW4gXCJWaWV3IFJlc3BvbnNlc1wiIHZpZXcgKFNQM00tNDI4LCBSOC43KS5cclxuICAgKlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L3tpbnRlcmVzdElkfS9yZXNwb25zZXNcclxuICAgKlxyXG4gICAqIFRoZSBlbmRwb2ludCBpcyBrZXllZCBieSB0aGUgaW50ZXJlc3QgcmVjb3JkIGlkICh7QGNvZGUgR0lOVF9TQUFQUFNfLi4ufSksXHJcbiAgICogTk9UIHRoZSBncm91cCBpZCwgYW5kIGlzIGd1YXJkZWQgc2VydmVyLXNpZGUgYnkgcm9zdGVyLXZpZXcgcGVybWlzc2lvbnNcclxuICAgKiAoVklFV19HUk9VUF9NRU1CRVJTIG9uIHRoZSBncm91cCBvciB0aGUgdGVuYW50LXdpZGUgVklFV19BTExfUk9TVEVSUykuIFRoZVxyXG4gICAqIGJhc2UgVVJMIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50IChlLmcuIGAuLi4vdjFgKSwgbWF0Y2hpbmcgZXZlcnlcclxuICAgKiBvdGhlciBHcm91cHNTZXJ2aWNlIGNhbGwgYnVpbHQgYXMgYCR7YXBpQmFzZVVybH0vZ3JvdXBzLy4uLmAsIHNvIHRoZSB2ZXJzaW9uXHJcbiAgICogaXMgbm90IHJlcGVhdGVkLiBUaGUgcmVzcG9uc2UgZW52ZWxvcGUncyBib2R5IGlzIHRoZSBsaXN0IG9mIHJlc3BvbnNlc1xyXG4gICAqIChuZXZlciBudWxsIOKAlCBhbiBlbXB0eSBsaXN0IG1lYW5zIG5vIGFuc3dlcnMgd2VyZSBzdWJtaXR0ZWQpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlcmVzdElkIC0gVGhlIGludGVyZXN0IHJlY29yZCB3aG9zZSByZXNwb25zZXMgYXJlIHJlYWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnRlcmVzdEZvcm1SZXNwb25zZVtdPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEludGVyZXN0UmVzcG9uc2VzKFxyXG4gICAgaW50ZXJlc3RJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxJbnRlcmVzdEZvcm1SZXNwb25zZVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC8ke2ludGVyZXN0SWR9L3Jlc3BvbnNlc2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IChyZXNwb25zZT8uYm9keSBhcyBJbnRlcmVzdEZvcm1SZXNwb25zZVtdKSA/PyBbXSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBpbnRlcmVzdGVkLXVzZXJzIHJvc3RlciBmb3IgYSBncm91cCDigJQgb25lIHJvdyBwZXIgaW50ZXJlc3RcclxuICAgKiBjYXJyeWluZyB0aGUgdXNlcidzIG5hbWUvZW1haWwsIG9yZ2FuaXphdGlvbiBhZmZpbGlhdGlvbnMsIHN1Ym1pdHRlZFxyXG4gICAqIHRpbWVzdGFtcCwgdGhlIGdyb3VwJ3MgZGVmYXVsdCBtZW1iZXJzaGlwIGxldmVsLCBhbmQgdGhlIGdyb3VwIHR5cGUgaWQg4oCUIHNvXHJcbiAgICogdGhlIFJvc3RlciBNYW5hZ2VtZW50IGFkbWluIFwiSW50ZXJlc3RlZCBSb3N0ZXJzXCIgdGFiIHJlbmRlcnMgdGhlIHdob2xlIGdyb3VwXHJcbiAgICogaW4gYSBzaW5nbGUgY2FsbCAoU1AzTS00MjgsIFI4LjcpLlxyXG4gICAqXHJcbiAgICogUE9TVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L2dyb3VwL3tncm91cElkfS9yZXNwb25zZXNcclxuICAgKlxyXG4gICAqIFRoZSBzZWFyY2ggdGVybSwgcGFnaW5hdGlvbiBhbmQgc29ydCBvcHRpb25zIGFyZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHlcclxuICAgKiAoe0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWR9KSBzbyB0aGUgYmFja2VuZCBjYW4gZmlsdGVyLCBwYWdlXHJcbiAgICogYW5kIHNvcnQgdGhlIHJvc3RlciBzZXJ2ZXItc2lkZS4gR3VhcmRlZCBzZXJ2ZXItc2lkZSBieSByb3N0ZXItdmlld1xyXG4gICAqIHBlcm1pc3Npb25zIChWSUVXX0dST1VQX01FTUJFUlMgb24gdGhlIGdyb3VwIG9yIHRoZSB0ZW5hbnQtd2lkZVxyXG4gICAqIFZJRVdfQUxMX1JPU1RFUlMpLiBUaGUgYmFzZSBVUkwgYWxyZWFkeSBjYXJyaWVzIHRoZSB2ZXJzaW9uIHNlZ21lbnQsXHJcbiAgICogbWF0Y2hpbmcgZXZlcnkgb3RoZXIgR3JvdXBzU2VydmljZSBjYWxsIGJ1aWx0IGFzIGAke2FwaUJhc2VVcmx9L2dyb3Vwcy8uLi5gLFxyXG4gICAqIHNvIHRoZSB2ZXJzaW9uIGlzIG5vdCByZXBlYXRlZC4gVGhlIHJlc3BvbnNlIGVudmVsb3BlJ3MgYm9keSBpcyBhblxyXG4gICAqIHtAbGluayBJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlfTogdGhlIHJvc3RlciByb3dzIGxpdmUgdW5kZXIgYGRhdGFgIChuZXZlclxyXG4gICAqIG51bGwg4oCUIGFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIGdyb3VwIGhhcyBubyBpbnRlcmVzdHMpIGFsb25nc2lkZSB0aGUgcGFnaW5nXHJcbiAgICogbWV0YWRhdGEgKGB0b3RhbFJlY29yZHNgLCBgb2Zmc2V0YCwgYHBhZ2VTaXplYCkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWQgLSBUaGUgZ3JvdXAgd2hvc2UgaW50ZXJlc3RlZC11c2VycyByb3N0ZXIgaXMgcmVhZC5cclxuICAgKiBAcGFyYW0ge0ludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWR9IHBheWxvYWQgLSBTZWFyY2gvcGFnaW5hdGlvbi9zb3J0IG9wdGlvbnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEludGVyZXN0UmVzcG9uc2VzQnlHcm91cChcclxuICAgIGdyb3VwSWQ6IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEludGVyZXN0ZWRSb3N0ZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9ncm91cC8ke2dyb3VwSWR9L3Jlc3BvbnNlc2AsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZT8uYm9keSBhcyBJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlIHwgbnVsbDtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IGJvZHk/LmRhdGEgPz8gW10sXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogYm9keT8udG90YWxSZWNvcmRzID8/IDAsXHJcbiAgICAgICAgICAgIG9mZnNldDogYm9keT8ub2Zmc2V0ID8/IDAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBib2R5Py5wYWdlU2l6ZSA/PyAwLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMvb3ZlcnJpZGVzIHRoZSBtZW1iZXJzaGlwIGxldmVsIGZvciBhbiBpbnRlcmVzdGVkIHVzZXIgZnJvbSB0aGUgUm9zdGVyXHJcbiAgICogTWFuYWdlbWVudCBhZG1pbiBcIkludGVyZXN0ZWQgUm9zdGVyc1wiIHRhYiAoU1AzTS00MjgpLiBDYWxsZWQgd2hlbiB0aGUgYWRtaW5cclxuICAgKiBwaWNrcyBhIHZhbHVlIGluIGEgcm93J3MgTWVtYmVyIExldmVsIGRyb3Bkb3duLlxyXG4gICAqXHJcbiAgICogUFVUIHthcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvbWVtYmVyLWxldmVsXHJcbiAgICpcclxuICAgKiBUaGUgZ3JvdXAsIHVzZXIgYW5kIHNlbGVjdGVkIHJvbGUgaWQgYXJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keVxyXG4gICAqICh7QGxpbmsgVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkfSkuIEd1YXJkZWQgc2VydmVyLXNpZGUgYnkgcm9zdGVyLW1hbmFnZW1lbnRcclxuICAgKiBwZXJtaXNzaW9ucy4gVGhlIGJhc2UgVVJMIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50LCBtYXRjaGluZ1xyXG4gICAqIGV2ZXJ5IG90aGVyIEdyb3Vwc1NlcnZpY2UgY2FsbCBidWlsdCBhcyBgJHthcGlCYXNlVXJsfS9ncm91cHMvLi4uYCwgc28gdGhlXHJcbiAgICogdmVyc2lvbiBpcyBub3QgcmVwZWF0ZWQuIFRoZSByZXNwb25zZSBlbnZlbG9wZSdzIGJvZHkgaXMgcmV0dXJuZWQgYXMtaXMuXHJcbiAgICogQHBhcmFtIHtVcGRhdGVNZW1iZXJMZXZlbFBheWxvYWR9IHBheWxvYWQgLSBHcm91cCArIHVzZXIgKyBzZWxlY3RlZCByb2xlIGlkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8dW5rbm93bj59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB1cGRhdGVJbnRlcmVzdE1lbWJlckxldmVsKFxyXG4gICAgcGF5bG9hZDogVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9tZW1iZXItbGV2ZWxgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keSA/PyBudWxsKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIFJlY2lwcm9jYWwgQ3JlZGl0IChTUDNNLTIyKVxyXG4gIC8vIFRoZSByZWNpcHJvY2FsIGNvbnRyb2xsZXIgbGl2ZXMgb24gdGhlIE1FRVRJTkdTIHNlcnZpY2UsIHJlYWNoZWQgdGhyb3VnaCB0aGVcclxuICAvLyBnYXRld2F5LiBhcGlCYXNlVXJsID0gYXBwQ29uZmlnLmJhc2VBcGlVcmwgKGVuZHMgaW4gYC92MWApLCBhbmQgdGhlIGdhdGV3YXlcclxuICAvLyByb3V0ZXMgdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYCR7YXBpQmFzZVVybH0vbWVldGluZ3NgIChzYW1lIGFzIGV2ZXJ5IG90aGVyXHJcbiAgLy8gbWVldGluZ3MvZXZlbnRzIGNhbGwsIGUuZy4gYCR7YXBpQmFzZVVybH0vbWVldGluZ3MvZXZlbnQvLi4uYCkuXHJcbiAgLy9cclxuICAvLyBUaGUgcmVjaXByb2NhbCBjb250cm9sbGVyIHNpdHMgb24gdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYGFkbWluL3JlY2lwcm9jYWwtY3JlZGl0YC5cclxuICAvLyBhcGlCYXNlVXJsIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50IChgLi4uL3YxYCksIGFuZCB0aGUgZ2F0ZXdheSByb3V0ZXNcclxuICAvLyB0aGUgbWVldGluZ3Mgc2VydmljZSB1bmRlciBgJHthcGlCYXNlVXJsfS9tZWV0aW5nc2AsIHNvIHRoZSB2ZXJzaW9uIGlzIE5PVCByZXBlYXRlZFxyXG4gIC8vIChubyBzZWNvbmQgYC92MWAgb3IgYC9hcGkvdjFgKS4gVGhlIGZ1bGwgcGF0aCBpczpcclxuICAvLyAgIGAke2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0Ly4uLmBcclxuICAvLyAgID0gaHR0cHM6Ly9zYWFwcHNhcGlkZXYuaWVlZS5vcmcvdjEvbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQvLi4uXHJcbiAgLy8gRXZlcnkgbWV0aG9kIGJ1aWxkcyBVUkxzIGZyb20gUkVDSVBST0NBTF9CQVNFX1BBVEggYmVsb3cuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBQYXRoIHByZWZpeCAocmVsYXRpdmUgdG8gYXBpQmFzZVVybCkgZm9yIHRoZSByZWNpcHJvY2FsLWNyZWRpdCBlbmRwb2ludHMuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUNJUFJPQ0FMX0JBU0VfUEFUSCA9ICdtZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIGEgcmVjaXByb2NhbC1jcmVkaXQgZW5kcG9pbnQgVVJMIGZyb20gYXBpQmFzZVVybCArIHRoZSBiYXNlIHBhdGgsXHJcbiAgICogZ3VhcmRpbmcgYWdhaW5zdCBhY2NpZGVudGFsIGRvdWJsZSBzbGFzaGVzIGlmIGFwaUJhc2VVcmwgaGFzIGEgdHJhaWxpbmcgc2xhc2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdWZmaXhdIGV4dHJhIHBhdGgvcXVlcnkgYXBwZW5kZWQgYWZ0ZXIgdGhlIGJhc2UgcGF0aC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFJlY2lwcm9jYWxVcmwoc3VmZml4ID0gJycpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYXBpQmFzZVVybD8ucmVwbGFjZSgvXFwvKyQvLCAnJykgPz8gJyc7XHJcbiAgICByZXR1cm4gYCR7YmFzZX0vJHt0aGlzLlJFQ0lQUk9DQUxfQkFTRV9QQVRIfSR7c3VmZml4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCB0aGUgZm9yZWlnbiBncm91cHMgYXZhaWxhYmxlIGZvciByZWNpcHJvY2FsIGNyZWRpdCBmb3IgYSBob21lIGdyb3VwLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfS9hdmFpbGFibGUtZ3JvdXBzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEF2YWlsYWJsZVJlY2lwcm9jYWxHcm91cHMoXHJcbiAgICBob21lR3JvdXBJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybChgLyR7aG9tZUdyb3VwSWR9L2F2YWlsYWJsZS1ncm91cHNgKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBleGlzdGluZyByZWNpcHJvY2FsLWNyZWRpdCBjb25maWcgcm93cyBmb3IgYSBob21lIGdyb3VwIChlZGl0IHByZWZpbGwpLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfVs/ZXZlbnRJZD0uLi5dXHJcbiAgICogUmV0dXJucyBvbmUgcm93IHBlciBmb3JlaWduIGdyb3VwOyBhbiBlbXB0eSBhcnJheSBtZWFucyByZWNpcHJvY2FsIGNyZWRpdCBpcyBvZmYuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudElkXSBvcHRpb25hbCDigJQgZmlsdGVycyB0byBhbiBldmVudC1zY29wZWQgY29uZmlnLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPFJlY2lwcm9jYWxDcmVkaXRDb25maWdSb3dbXT4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UmVjaXByb2NhbENvbmZpZyhcclxuICAgIGhvbWVHcm91cElkOiBzdHJpbmcsXHJcbiAgICBldmVudElkPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBldmVudElkID8gYD9ldmVudElkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGV2ZW50SWQpfWAgOiAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtob21lR3JvdXBJZH0ke3F1ZXJ5fWApKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgcmVjaXByb2NhbC1jcmVkaXQgY29uZmlnIChjcmVhdGVzL3JlYWN0aXZhdGVzIG9uZSByb3cgcGVyIGZvcmVpZ24gZ3JvdXApLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogQHBhcmFtIHtTYXZlUmVjaXByb2NhbENyZWRpdFBheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93W10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNhdmVSZWNpcHJvY2FsQ3JlZGl0KFxyXG4gICAgcGF5bG9hZDogU2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKCksIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSAoc29mdCBkZWxldGUpIGEgc2luZ2xlIHJlY2lwcm9jYWwtY3JlZGl0IGNvbmZpZyByb3cgYnkgaXRzIGNvbmZpZ0lkLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0L3tjb25maWdJZH0vcmVtb3ZlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ0lkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8bnVsbD4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgcmVtb3ZlUmVjaXByb2NhbENvbmZpZyhcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxudWxsPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtjb25maWdJZH0vcmVtb3ZlYCksIHt9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==