@tiba-spark/client-shared-lib 25.4.1-16 → 25.4.1-24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/modules/auth/session.state.mjs +4 -5
- package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +109 -1
- package/esm2022/libraries/services/tenant.service.mjs +3 -3
- package/fesm2022/tiba-spark-client-shared-lib.mjs +115 -6
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/auth/session.state.d.ts +1 -1
- package/libraries/modules/auth/session.state.d.ts.map +1 -1
- package/libraries/service-proxy/cloud-service-proxies.d.ts +30 -0
- package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -324,10 +324,9 @@ let SessionState = class SessionState {
|
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
onHealthActionAction(ctx) {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
ctx.patchState({ serverEnvironmentMode: environmentVariable.data.environment });
|
|
327
|
+
return this.configurationCloudServiceProxy.getEnv().pipe(tap(envResponse => {
|
|
328
|
+
this.sessionStorageService.setItem(ENVIRONMENT, JSON.stringify(envResponse.data.environment));
|
|
329
|
+
ctx.patchState({ serverEnvironmentMode: envResponse.data.environment });
|
|
331
330
|
}));
|
|
332
331
|
}
|
|
333
332
|
onUpdateUserSettings(ctx, { userSettings }) {
|
|
@@ -514,4 +513,4 @@ export { SessionState };
|
|
|
514
513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionState, decorators: [{
|
|
515
514
|
type: Injectable
|
|
516
515
|
}], ctorParameters: () => [{ type: i1.SessionStorageService }, { type: i2.LocalStorageService }, { type: i3.AppConfigService }, { type: i4.AuthService }, { type: i5.ConfigurationCloudServiceProxy }, { type: i5.BackofficeCloudServiceProxy }, { type: i6.Router }, { type: i7.HttpCancelService }, { type: i8.TranslateService }, { type: i9.MsalService }, { type: i5.UsersCloudServiceProxy }, { type: i10.OpenIdAuthService }, { type: i11.MessageBarService }, { type: i5.MobileCloudServiceProxy }, { type: i12.MobileIdentityServiceProxy }], propDecorators: { onLogin: [], onSetTenantUserAction: [], onUpdateAuthTokenAction: [], setSessionState: [], SetUserNameAction: [], AuditLogoutAction: [], AuditLogoutMobileAction: [], onMobileLogoutAction: [], onLogout: [], onTenantLoadAction: [], onTenantClearAction: [], onHealthActionAction: [], onUpdateUserSettings: [], onUpdateTenantInfoProps: [], onAuthenticate2FAforUser: [], onLoadSessionFromLocalStorageAction: [], onBackofficeAppConfigurationAction: [], onAppConfigurationAction: [], onLoadAppConfigurationMobileAction: [], setConflictDetected: [], clearConflictDetected: [] } });
|
|
517
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEQsT0FBTyxFQUNtRyxvQkFBb0IsRUFDNUgsZ0JBQWdCLEVBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFPbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0s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QURiLFFBQVEsRUFBRTt3Q0FJVjtBQW5HVSxZQUFZO0lBTHhCLEtBQUssQ0FBb0I7UUFDeEIsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUUsbUJBQW1CO0tBQzlCLENBQUM7R0FFVyxZQUFZLENBOGN4Qjs7NEZBOWNZLFlBQVk7a0JBRHhCLFVBQVU7aWpCQXVHRixPQUFPLE1BYVAscUJBQXFCLE1BMkJyQix1QkFBdUIsTUFRdkIsZUFBZSxNQWVmLGlCQUFpQixNQVFqQixpQkFBaUIsTUF5QmpCLHVCQUF1QixNQVl2QixvQkFBb0IsTUFnRHBCLFFBQVEsTUFvRVIsa0JBQWtCLE1BYWxCLG1CQUFtQixNQWdCbkIsb0JBQW9CLE1BU3BCLG9CQUFvQixNQU9wQix1QkFBdUIsTUFPdkIsd0JBQXdCLE1BU3hCLG1DQUFtQyxNQWlCbkMsa0NBQWtDLE1BWWxDLHdCQUF3QixNQVl4QixrQ0FBa0MsTUFZbEMsbUJBQW1CLE1BT25CLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTmF2aWdhdGUgfSBmcm9tICdAbmd4cy9yb3V0ZXItcGx1Z2luJztcclxuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IExPQ0FMX0VOR0xJU0hfTEFOR1VBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEVOVklST05NRU5ULCBMT0dHRURfVEVOQU5UX0tFWSwgU0VTU0lPTiwgVEVOQU5UX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XHJcbmltcG9ydCB7IFZFUlNJT05fTU9CSUxFX0xBVEVTVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU3BhcmtTZXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zcGFyay1zZXNzaW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LCBDb25maWd1cmF0aW9uQ2xvdWRTZXJ2aWNlUHJveHksIE1vYmlsZUNsb3VkU2VydmljZVByb3h5LCBTZXR0aW5nc0NhdGVnb3J5LCBTaW5nbGVTaWduT25Qcm92aWRlcixcclxuICBTcGFya1NldHRpbmdzRHRvLCBVc2Vyc0Nsb3VkU2VydmljZVByb3h5XHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xyXG5pbXBvcnQgeyBNb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBDYW5jZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC1jYW5jZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcGVuSWRBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29wZW5pZC1hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcclxuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcclxuaW1wb3J0IHsgZ2V0TmF2aWdhdGlvblJvdXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91dGUudXRpbCc7XHJcbmltcG9ydCB7IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi9tb2RlbCc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uSW5mbyB9IGZyb20gJy4vbW9kZWwvYXBwbGljYXRpb24taW5mby5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi9tb2RlbC90ZW5hbnQtaW5mby5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEF1ZGl0TG9nb3V0QWN0aW9uLCBBdWRpdExvZ291dE1vYmlsZUFjdGlvbiwgQXV0aGVudGljYXRlMkZBZm9yVXNlciwgQ2xlYXJDb25mbGljdERldGVjdGVkLCBIZWFsdGhBY3Rpb24sXHJcbiAgSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24sIExvYWRCYWNrb2ZmaWNlQXBwQ29uZmlndXJhdGlvbkFjdGlvbixcclxuICBMb2dpblJlcXVlc3RBY3Rpb24sIExvZ291dEFjdGlvbiwgTG9nb3V0TW9iaWxlQWN0aW9uLCBNb2JpbGVMb2dvdXRBY3Rpb24sIFNldENvbmZsaWN0RGV0ZWN0ZWQsIFNldFN0YXRlQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uLCBTZXRVc2VyTmFtZUFjdGlvbixcclxuICBUZW5hbnRDbGVhckFjdGlvbiwgVGVuYW50TG9hZEFjdGlvbiwgVXBkYXRlQXV0aFRva2VuQWN0aW9uLCBVcGRhdGVUZW5hbnRJbmZvUHJvcHMsIFVwZGF0ZVVzZXJTZXR0aW5nc0luU2Vzc2lvbkFjdGlvblxyXG59IGZyb20gJy4vc2Vzc2lvbi5hY3Rpb25zJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0YXRlTW9kZWwge1xyXG4gIHNwYXJrU2Vzc2lvbnM6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+O1xyXG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb25JbmZvO1xyXG4gIHNlcnZlckVudmlyb25tZW50TW9kZT86IHN0cmluZztcclxuICBjb25mbGljdERldGVjdGVkPzogSHR0cEVycm9yUmVzcG9uc2U7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRTZXNzaW9uU3RhdGUgPSB7XHJcbiAgc3BhcmtTZXNzaW9uczoge30sXHJcbiAgYXBwbGljYXRpb246IHsgdmVyc2lvbjogbnVsbCwgcmVsZWFzZURhdGU6IG51bGwsIGZlYXR1cmVzOiB7fSB9LFxyXG4gIGNvbmZsaWN0RGV0ZWN0ZWQ6IG51bGwsXHJcbn07XHJcblxyXG5AU3RhdGU8U2Vzc2lvblN0YXRlTW9kZWw+KHtcclxuICBuYW1lOiAnc2Vzc2lvbicsXHJcbiAgZGVmYXVsdHM6IGRlZmF1bHRTZXNzaW9uU3RhdGUsXHJcbn0pXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdGF0ZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5OiBDb25maWd1cmF0aW9uQ2xvdWRTZXJ2aWNlUHJveHksXHJcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eTogQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgaHR0cENhbmNlbFNlcnZpY2U6IEh0dHBDYW5jZWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2FsU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJzQ2xvdWRTZXJ2aWNlUHJveHk6IFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksXHJcbiAgICBwcml2YXRlIG9wZW5JZEF1dGhTZXJ2aWNlOiBPcGVuSWRBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2JpbGVDbG91ZFNlcnZpY2VQcm94eTogTW9iaWxlQ2xvdWRTZXJ2aWNlUHJveHksXHJcbiAgICBwcml2YXRlIG1vYmlsZUlkZW50aXR5U2VydmljZVByb3h5OiBNb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eSkge1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGlzQ29uZmxpY3REZXRlY3RlZChzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIHJldHVybiBzdGF0ZS5jb25mbGljdERldGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGlzVXNlckF1dGhlbnRpY2F0ZWRXaXRoU1NPKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udXNlcj8uc3NvQXV0aGVudGljYXRlZDtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBpc1VzZXJBdXRoZW50aWNhdGVkV2l0aDJGQShzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnVzZXIuYXV0aGVudGljYXRlZDJGQTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBzZXJ2ZXJFbnZpcm9ubWVudE1vZGUoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gc3RhdGUuc2VydmVyRW52aXJvbm1lbnRNb2RlO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIHVzZXJJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IFVzZXJJbmZvIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnVzZXI7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgbG9nZ2VkVXNlckluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTE9HR0VEX1RFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnVzZXI7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgdGVuYW50SW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnRlbmFudDtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyB0aGlyZFBhcnR5VG9rZW4oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy50aGlyZFBhcnR5VG9rZW47XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgbG9nZ2VkVGVuYW50SW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy50ZW5hbnQ7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgdXNlclNldHRpbmdzKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IFNwYXJrU2V0dGluZ3NEdG9bXSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy51c2VyLnNldHRpbmdzIGFzIFNwYXJrU2V0dGluZ3NEdG9bXTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBtYXBwZWRVc2VyU2V0dGluZ3Moc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy51c2VyLnNldHRpbmdzLnJlZHVjZSgoc2V0dGluZ3NNYXAsIHVzZXJTZXR0aW5nKSA9PlxyXG4gICAgICBzZXR0aW5nc01hcC5zZXQoXHJcbiAgICAgICAgdXNlclNldHRpbmcuY2F0ZWdvcnksXHJcbiAgICAgICAgdHlwZW9mIHVzZXJTZXR0aW5nLnNldHRpbmdzSnNvbiA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gSlNPTi5wYXJzZSh1c2VyU2V0dGluZy5zZXR0aW5nc0pzb24pXHJcbiAgICAgICAgICA6IHVzZXJTZXR0aW5nLnNldHRpbmdzSnNvblxyXG4gICAgICApLCBuZXcgTWFwPFNldHRpbmdzQ2F0ZWdvcnksIGFueT4oKSk7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgYXBwQ29uZmlndXJhdGlvbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy5hcHBDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGtlZXBNZUxvZ2dlZEluKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udXNlci5rZWVwTWVMb2dnZWRJbiA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oTG9naW5SZXF1ZXN0QWN0aW9uKVxyXG4gIHB1YmxpYyBvbkxvZ2luKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2dpblJlcXVlc3RBY3Rpb24pIHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luKGFjdGlvbikucGlwZSh0YXAoe1xyXG4gICAgICBuZXh0OiBzcGFya1Nlc3Npb24gPT4ge1xyXG4gICAgICAgIHRoaXMuU2V0VGVuYW50VXNlckFjdGlvbihjdHgsIHNwYXJrU2Vzc2lvbik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlID0+IHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VBcGlFcnJvck1lc3NhZ2UoZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihTZXRUZW5hbnRVc2VyQWN0aW9uKVxyXG4gIHB1YmxpYyBvblNldFRlbmFudFVzZXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IHNwYXJrU2Vzc2lvbiB9OiBTZXRUZW5hbnRVc2VyQWN0aW9uKSB7XHJcbiAgICB0aGlzLlNldFRlbmFudFVzZXJBY3Rpb24oY3R4LCBzcGFya1Nlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBTZXRUZW5hbnRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgc3BhcmtTZXNzaW9uOiBTcGFya1Nlc3Npb24pIHtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIGNvbnN0IHsgdXNlciwgYXV0aFRva2VuLCByZWZyZXNoLCB0aGlyZFBhcnR5VG9rZW4gfSA9IHNwYXJrU2Vzc2lvbjtcclxuICAgIHVzZXIuc2V0dGluZ3MgPSB1c2VyLnNldHRpbmdzLm1hcChzID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBTcGFya1NldHRpbmdzRHRvKHtcclxuICAgICAgICBjYXRlZ29yeTogcy5jYXRlZ29yeSxcclxuICAgICAgICBzZXR0aW5nc0pzb246IEpTT04ucGFyc2Uocy5zZXR0aW5nc0pzb24pXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0pIHtcclxuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdID0geyB1c2VyLCBhdXRoVG9rZW4sIHJlZnJlc2gsIHRlbmFudDogbnVsbCwgdGhpcmRQYXJ0eVRva2VuIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlciA9IHVzZXI7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhdXRoVG9rZW47XHJcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoID0gcmVmcmVzaDtcclxuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRoaXJkUGFydHlUb2tlbiA9IHRoaXJkUGFydHlUb2tlbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVXBkYXRlQXV0aFRva2VuQWN0aW9uKVxyXG4gIHB1YmxpYyBvblVwZGF0ZUF1dGhUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogVXBkYXRlQXV0aFRva2VuQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYWN0aW9uLmF1dGhUb2tlbjtcclxuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoLnJlZnJlc2hUb2tlbiA9IGFjdGlvbi5yZWZyZXNoVG9rZW47XHJcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oU2V0U3RhdGVBY3Rpb24pXHJcbiAgcHVibGljIHNldFNlc3Npb25TdGF0ZShjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U3RhdGVBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhY3Rpb24uYXV0aFRva2VuO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnJlZnJlc2ggPSBhY3Rpb24ucmVmcmVzaDtcclxuXHJcbiAgICBjb25zdCBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25JbmZvID0ge1xyXG4gICAgICB2ZXJzaW9uOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbixcclxuICAgICAgcmVsZWFzZURhdGU6IG51bGwsXHJcbiAgICAgIGZlYXR1cmVzOiB7fSxcclxuICAgIH07XHJcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGFwcGxpY2F0aW9uIH0pO1xyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFNldFVzZXJOYW1lQWN0aW9uKVxyXG4gIHB1YmxpYyBTZXRVc2VyTmFtZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0VXNlck5hbWVBY3Rpb24pIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLmRpc3BsYXlOYW1lID0gYWN0aW9uLnVzZXJOYW1lO1xyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEF1ZGl0TG9nb3V0QWN0aW9uKVxyXG4gIHB1YmxpYyBBdWRpdExvZ291dEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRMb2dvdXRBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnRlbmFudDtcclxuICAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XHJcbiAgICAgIHJldHVybiBvZihudWxsKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRlbmFudCBvciBzcGFya1Nlc3Npb25zIGFyZSB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnVzZXJzQ2xvdWRTZXJ2aWNlUHJveHkuYXVkaXRMb2dvdXQoKS5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4geyB9KSk7XHJcbiAgfVxyXG5cclxuICAvL1RPRE8gLCBlbmFibGUgYmFja29mZmljZSBsb2dvdXQgd2hlbiAsIEJFIEF1ZGl0IGZvciBiYWNrb2ZmaWNlIGlzIGltcGxlbWVudGVkXHJcbiAgLy8gQEFjdGlvbihBdWRpdEJhY2tvZmZpY2VBY3Rpb24pXHJcbiAgLy8gcHVibGljIG9uQXVkaXRCYWNrb2ZmaWNlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBBdWRpdEJhY2tvZmZpY2VBY3Rpb24pIHtcclxuICAvLyAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAvLyAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gIC8vICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xyXG4gIC8vICAgaWYgKHRoaXMuaXNUZW5hbnRVbmRlZmluZWQodGVuYW50SW5mbywgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSkpIHtcclxuICAvLyAgICAgcmV0dXJuIG9mKG51bGwpOyAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGVuYW50IG9yIHNwYXJrU2Vzc2lvbnMgYXJlIHVuZGVmaW5lZFxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHRoaXMuYmFja29mZmljZVNlcnZpY2VQcm94eS5iYWNrb2ZmaWNlQXVkaXRMb2dvdXQoKS5waXBlKFxyXG4gIC8vICAgICB0YXAoKCkgPT4geyB9KSk7XHJcbiAgLy8gfVxyXG5cclxuICBAQWN0aW9uKEF1ZGl0TG9nb3V0TW9iaWxlQWN0aW9uKVxyXG4gIHB1YmxpYyBBdWRpdExvZ291dE1vYmlsZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnRlbmFudDtcclxuICAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XHJcbiAgICAgIHJldHVybiBvZihudWxsKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRlbmFudCBvciBzcGFya1Nlc3Npb25zIGFyZSB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1vYmlsZUNsb3VkU2VydmljZVByb3h5Lm1vYmlsZUF1ZGl0TG9nb3V0VjIoVkVSU0lPTl9NT0JJTEVfTEFURVNUKS5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4geyB9KSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKE1vYmlsZUxvZ291dEFjdGlvbilcclxuICBwdWJsaWMgb25Nb2JpbGVMb2dvdXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IGxvZ291dEF1ZGl0IH06IE1vYmlsZUxvZ291dEFjdGlvbikge1xyXG4gICAgY29uc3QgYXBwVHlwZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlO1xyXG4gICAgdGhpcy5odHRwQ2FuY2VsU2VydmljZS5jYW5jZWxQZW5kaW5nUmVxdWVzdHMoKTtcclxuXHJcbiAgICBpZiAoYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUpIHtcclxuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBMb2dvdXRNb2JpbGVBY3Rpb24oKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwYXRoID0gZ2V0TmF2aWdhdGlvblJvdXRlKFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKGN0eC5nZXRTdGF0ZSgpKSwgYXBwVHlwZSwgWydhY2NvdW50JywgJ2xvZ2luJ10pO1xyXG4gICAgICBjdHguZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHBhdGgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobG9nb3V0QXVkaXQpIHtcclxuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdExvZ291dE1vYmlsZUFjdGlvbigpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xyXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiBlLnVybC5pbmNsdWRlcygnL2FjY291bnQvbG9naW4nKSksIC8vIGZpbHRlciBvbmx5IE5hdmlnYXRpb25FbmQgZXZlbnRzXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpcnN0KCksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0KCkucGlwZShcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgICAgICAgICAgY29uc3QgdGVuYW50ID0gc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKExPQ0FMX0VOR0xJU0hfTEFOR1VBR0UpO1xyXG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFRlbmFudENsZWFyQWN0aW9uKCkpO1xyXG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XHJcbiAgICAgICAgICAgIGlmIChzc29FbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGVuYW50TmFtZSA9IHRlbmFudD8udGVuYW50Py50ZW5hbnROYW1lO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XHJcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdHguZ2V0U3RhdGUoKS5jb25mbGljdERldGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogYC8ke3RlbmFudE5hbWV9YFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5JZEF1dGhTZXJ2aWNlLnNpZ25PdXQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy90aGlzLnNpbGVudExvZ091dE1zbChjdHgsIGFwcFR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oTG9nb3V0QWN0aW9uKVxyXG4gIHB1YmxpYyBvbkxvZ291dChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgbG9nb3V0QXVkaXQsIGxvZ291dEJhY2tvZmZpY2VBdWRpdCB9OiBMb2dvdXRBY3Rpb24pIHtcclxuICAgIGNvbnN0IGFwcFR5cGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZTtcclxuICAgIHRoaXMuaHR0cENhbmNlbFNlcnZpY2UuY2FuY2VsUGVuZGluZ1JlcXVlc3RzKCk7XHJcblxyXG4gICAgaWYgKGFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlKSB7XHJcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTG9nb3V0TW9iaWxlQWN0aW9uKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcclxuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxvZ291dEF1ZGl0KSB7XHJcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgQXVkaXRMb2dvdXRBY3Rpb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPICwgZW5hYmxlIGJhY2tvZmZpY2UgbG9nb3V0IHdoZW4gLCBCRSBBdWRpdCBmb3IgYmFja29mZmljZSBpcyBpbXBsZW1lbnRlZFxyXG4gICAgLy8gaWYgKGxvZ291dEJhY2tvZmZpY2VBdWRpdCkge1xyXG4gICAgLy8gICBjdHguZGlzcGF0Y2gobmV3IEF1ZGl0QmFja29mZmljZUFjdGlvbigpKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xyXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiBlLnVybC5pbmNsdWRlcygnL2FjY291bnQvbG9naW4nKSksIC8vIGZpbHRlciBvbmx5IE5hdmlnYXRpb25FbmQgZXZlbnRzXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpcnN0KCksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0KCkucGlwZShcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgICAgICAgICAgY29uc3QgdGVuYW50ID0gc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKExPQ0FMX0VOR0xJU0hfTEFOR1VBR0UpO1xyXG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFRlbmFudENsZWFyQWN0aW9uKCkpO1xyXG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XHJcbiAgICAgICAgICAgIGlmIChzc29FbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGVuYW50TmFtZSA9IHRlbmFudD8udGVuYW50Py50ZW5hbnROYW1lO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XHJcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdHguZ2V0U3RhdGUoKS5jb25mbGljdERldGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogbG9nb3V0QmFja29mZmljZUF1ZGl0ID8gJy8nIDogYC8ke3RlbmFudE5hbWV9YFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5JZEF1dGhTZXJ2aWNlLnNpZ25PdXQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy90aGlzLnNpbGVudExvZ091dE1zbChjdHgsIGFwcFR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNUZW5hbnRVbmRlZmluZWQgPSAodGVuYW50OiBUZW5hbnRJbmZvLCBzZXNzaW9uOiBTcGFya1Nlc3Npb24pID0+ICF0ZW5hbnQgfHwgIXNlc3Npb247XHJcblxyXG4gIHNpbGVudExvZ091dE1zbChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFwcFR5cGU6IEFwcFR5cGUpIHtcclxuICAgIGNvbnN0IGNsZWFyQ2FjaGVSZXF1ZXN0OiBDbGVhckNhY2hlUmVxdWVzdCA9IHtcclxuICAgICAgYWNjb3VudDogdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpWzBdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xyXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG5cclxuICAgIGNvbnN0IHBhdGggPSBnZXROYXZpZ2F0aW9uUm91dGUoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8oY3R4LmdldFN0YXRlKCkpLCBhcHBUeXBlLCBbJ2FjY291bnQnLCAnbG9naW4nXSk7XHJcbiAgICBjdHguZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHBhdGgpKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVGVuYW50TG9hZEFjdGlvbilcclxuICBwdWJsaWMgb25UZW5hbnRMb2FkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBUZW5hbnRMb2FkQWN0aW9uKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gYWN0aW9uLnRlbmFudD8udGVuYW50TmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgaWYgKCFzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdKSB7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0gPSB7IHVzZXI6IG51bGwsIGF1dGhUb2tlbjogbnVsbCwgcmVmcmVzaDogbnVsbCwgdGVuYW50OiBhY3Rpb24udGVuYW50IH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudCA9IGFjdGlvbi50ZW5hbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFRlbmFudENsZWFyQWN0aW9uKVxyXG4gIHB1YmxpYyBvblRlbmFudENsZWFyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgXzogVGVuYW50Q2xlYXJBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbiA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcclxuICAgIGlmIChzcGFya1Nlc3Npb24pIHtcclxuICAgICAgc3BhcmtTZXNzaW9uLnVzZXIgPSBudWxsO1xyXG4gICAgICBzcGFya1Nlc3Npb24ucmVmcmVzaCA9IG51bGw7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbi5hdXRoVG9rZW4gPSBudWxsO1xyXG4gICAgICBpZiAoc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBzcGFya1Nlc3Npb24uYXBwQ29uZmlndXJhdGlvbi5hbmFseXRpY3NUb2tlbiA9ICcnO1xyXG4gICAgICAgIHNwYXJrU2Vzc2lvbi5hcHBDb25maWd1cmF0aW9uLmZlZWRiYWNrVG9rZW4gPSAnJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBBY3Rpb24oSGVhbHRoQWN0aW9uKVxyXG4gIHB1YmxpYyBvbkhlYWx0aEFjdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4pIHtcclxuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGUkID0gdGhpcy5jb25maWd1cmF0aW9uQ2xvdWRTZXJ2aWNlUHJveHkuZ2V0SGVhbHRoKCk7XHJcbiAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZSQucGlwZSh0YXAoZW52aXJvbm1lbnRWYXJpYWJsZSA9PiB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oRU5WSVJPTk1FTlQsIEpTT04uc3RyaW5naWZ5KGVudmlyb25tZW50VmFyaWFibGUuZGF0YS5lbnZpcm9ubWVudCkpO1xyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZlckVudmlyb25tZW50TW9kZTogZW52aXJvbm1lbnRWYXJpYWJsZS5kYXRhLmVudmlyb25tZW50IH0pO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb24pXHJcbiAgcHVibGljIG9uVXBkYXRlVXNlclNldHRpbmdzKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyB1c2VyU2V0dGluZ3MgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIuc2V0dGluZ3MgPSB1c2VyU2V0dGluZ3M7XHJcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVXBkYXRlVGVuYW50SW5mb1Byb3BzKVxyXG4gIHB1YmxpYyBvblVwZGF0ZVRlbmFudEluZm9Qcm9wcyhjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgcHJvcHMgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRlbmFudC5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIpXHJcbiAgcHVibGljIG9uQXV0aGVudGljYXRlMkZBZm9yVXNlcihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgaWYgKHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XT8udXNlcikge1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlci5hdXRoZW50aWNhdGVkMkZBID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbilcclxuICBwdWJsaWMgb25Mb2FkU2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBJbml0U2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24pIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKTtcclxuICAgIGNvbnN0IHNlc3Npb246IHtcclxuICAgICAgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyxcclxuICAgICAgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4sXHJcbiAgICB9ID0gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiBkZWZhdWx0U2Vzc2lvblN0YXRlO1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBhcHBsaWNhdGlvbjogc2Vzc2lvbi5hcHBsaWNhdGlvbixcclxuICAgICAgc3BhcmtTZXNzaW9uczogc2Vzc2lvbi5zcGFya1Nlc3Npb25zXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcclxuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gc2Vzc2lvbi5zcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XHJcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEF1dGhTZXNzaW9uKHNwYXJrU2Vzc2lvbj8uYXV0aFRva2VuLCBzcGFya1Nlc3Npb24/LnJlZnJlc2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24pXHJcbiAgcHVibGljIG9uQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMuYmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LmdldEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uKCk7XHJcbiAgICByZXR1cm4gYXBwQ29uZmlndXJhdGlvbiQucGlwZSh0YXAoYXBwQ29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudCkge1xyXG4gICAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hcHBDb25maWd1cmF0aW9uID0gYXBwQ29uZmlndXJhdGlvbi5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKVxyXG4gIHB1YmxpYyBvbkFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMuY29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LmdldEFwcENvbmZpZ3VyYXRpb24oKTtcclxuICAgIHJldHVybiBhcHBDb25maWd1cmF0aW9uJC5waXBlKHRhcChhcHBDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XHJcbiAgICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmFwcENvbmZpZ3VyYXRpb24gPSBhcHBDb25maWd1cmF0aW9uLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24pXHJcbiAgcHVibGljIG9uTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMubW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkubW9iaWxlR2V0QXBwQ29uZmlndXJhdGlvbihWRVJTSU9OX01PQklMRV9MQVRFU1QpO1xyXG4gICAgcmV0dXJuIGFwcENvbmZpZ3VyYXRpb24kLnBpcGUodGFwKGFwcENvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcclxuICAgICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXBwQ29uZmlndXJhdGlvbiA9IGFwcENvbmZpZ3VyYXRpb24uZGF0YTtcclxuICAgICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihTZXRDb25mbGljdERldGVjdGVkKVxyXG4gIHB1YmxpYyBzZXRDb25mbGljdERldGVjdGVkKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRDb25mbGljdERldGVjdGVkKSB7XHJcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgIGNvbmZsaWN0RGV0ZWN0ZWQ6IGFjdGlvbi5lcnJvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihDbGVhckNvbmZsaWN0RGV0ZWN0ZWQpXHJcbiAgcHVibGljIGNsZWFyQ29uZmxpY3REZXRlY3RlZChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIF86IENsZWFyQ29uZmxpY3REZXRlY3RlZCkge1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBjb25mbGljdERldGVjdGVkOiBudWxsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3BhcmtTZXNzaW9ucyA9ICgpOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPiA9PiBKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFNFU1NJT04pKT8uc3BhcmtTZXNzaW9ucyA/PyB7fTtcclxuICBwcml2YXRlIHNldFNwYXJrU2Vzc2lvbnMgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPik6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgYXBwbGljYXRpb24gPSBjdHguZ2V0U3RhdGUoKS5hcHBsaWNhdGlvbjtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFNFU1NJT04sIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgYXBwbGljYXRpb24sXHJcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IHNwYXJrU2Vzc2lvbnNcclxuICAgIH0pKTtcclxuICAgIGN0eC5wYXRjaFN0YXRlKHsgc3BhcmtTZXNzaW9ucyB9KTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEQsT0FBTyxFQUNtRyxvQkFBb0IsRUFDNUgsZ0JBQWdCLEVBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFPbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0s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LENBQW9CO1FBQ3hCLElBQUksRUFBRSxTQUFTO1FBQ2YsUUFBUSxFQUFFLG1CQUFtQjtLQUM5QixDQUFDO0dBRVcsWUFBWSxDQTZjeEI7OzRGQTdjWSxZQUFZO2tCQUR4QixVQUFVO2lqQkF1R0YsT0FBTyxNQWFQLHFCQUFxQixNQTJCckIsdUJBQXVCLE1BUXZCLGVBQWUsTUFlZixpQkFBaUIsTUFRakIsaUJBQWlCLE1BeUJqQix1QkFBdUIsTUFZdkIsb0JBQW9CLE1BZ0RwQixRQUFRLE1Bb0VSLGtCQUFrQixNQWFsQixtQkFBbUIsTUFnQm5CLG9CQUFvQixNQVFwQixvQkFBb0IsTUFPcEIsdUJBQXVCLE1BT3ZCLHdCQUF3QixNQVN4QixtQ0FBbUMsTUFpQm5DLGtDQUFrQyxNQVlsQyx3QkFBd0IsTUFZeEIsa0NBQWtDLE1BWWxDLG1CQUFtQixNQU9uQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBDbGVhckNhY2hlUmVxdWVzdCB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XHJcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMT0NBTF9FTkdMSVNIX0xBTkdVQUdFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgTE9HR0VEX1RFTkFOVF9LRVksIFNFU1NJT04sIFRFTkFOVF9LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBWRVJTSU9OX01PQklMRV9MQVRFU1QgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmVyc2lvbi1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNwYXJrU2Vzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3Bhcmstc2Vzc2lvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eSwgQ29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LCBNb2JpbGVDbG91ZFNlcnZpY2VQcm94eSwgU2V0dGluZ3NDYXRlZ29yeSwgU2luZ2xlU2lnbk9uUHJvdmlkZXIsXHJcbiAgU3BhcmtTZXR0aW5nc0R0bywgVXNlcnNDbG91ZFNlcnZpY2VQcm94eVxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2FuY2VsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtY2FuY2VsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XHJcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XHJcbmltcG9ydCB7IGdldE5hdmlnYXRpb25Sb3V0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JvdXRlLnV0aWwnO1xyXG5pbXBvcnQgeyBVbmxvYWRQYXJraW5nTG90QWN0aW9uIH0gZnJvbSAnLi4vZmFjaWxpdHkvZmFjaWxpdHkuYWN0aW9ucyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4vbW9kZWwnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluZm8gfSBmcm9tICcuL21vZGVsL2FwcGxpY2F0aW9uLWluZm8uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGVuYW50SW5mbyB9IGZyb20gJy4vbW9kZWwvdGVuYW50LWluZm8uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBdWRpdExvZ291dEFjdGlvbiwgQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24sIEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIsIENsZWFyQ29uZmxpY3REZXRlY3RlZCwgSGVhbHRoQWN0aW9uLFxyXG4gIEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24sIExvYWRBcHBDb25maWd1cmF0aW9uTW9iaWxlQWN0aW9uLCBMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24sXHJcbiAgTG9naW5SZXF1ZXN0QWN0aW9uLCBMb2dvdXRBY3Rpb24sIExvZ291dE1vYmlsZUFjdGlvbiwgTW9iaWxlTG9nb3V0QWN0aW9uLCBTZXRDb25mbGljdERldGVjdGVkLCBTZXRTdGF0ZUFjdGlvbiwgU2V0VGVuYW50VXNlckFjdGlvbiwgU2V0VXNlck5hbWVBY3Rpb24sXHJcbiAgVGVuYW50Q2xlYXJBY3Rpb24sIFRlbmFudExvYWRBY3Rpb24sIFVwZGF0ZUF1dGhUb2tlbkFjdGlvbiwgVXBkYXRlVGVuYW50SW5mb1Byb3BzLCBVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb25cclxufSBmcm9tICcuL3Nlc3Npb24uYWN0aW9ucyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25TdGF0ZU1vZGVsIHtcclxuICBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPjtcclxuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uSW5mbztcclxuICBzZXJ2ZXJFbnZpcm9ubWVudE1vZGU/OiBzdHJpbmc7XHJcbiAgY29uZmxpY3REZXRlY3RlZD86IEh0dHBFcnJvclJlc3BvbnNlO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0U2Vzc2lvblN0YXRlID0ge1xyXG4gIHNwYXJrU2Vzc2lvbnM6IHt9LFxyXG4gIGFwcGxpY2F0aW9uOiB7IHZlcnNpb246IG51bGwsIHJlbGVhc2VEYXRlOiBudWxsLCBmZWF0dXJlczoge30gfSxcclxuICBjb25mbGljdERldGVjdGVkOiBudWxsLFxyXG59O1xyXG5cclxuQFN0YXRlPFNlc3Npb25TdGF0ZU1vZGVsPih7XHJcbiAgbmFtZTogJ3Nlc3Npb24nLFxyXG4gIGRlZmF1bHRzOiBkZWZhdWx0U2Vzc2lvblN0YXRlLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RhdGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25DbG91ZFNlcnZpY2VQcm94eTogQ29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSBiYWNrb2ZmaWNlQ2xvdWRTZXJ2aWNlUHJveHk6IEJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHBDYW5jZWxTZXJ2aWNlOiBIdHRwQ2FuY2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2Vyc0Nsb3VkU2VydmljZVByb3h5OiBVc2Vyc0Nsb3VkU2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSBvcGVuSWRBdXRoU2VydmljZTogT3BlbklkQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9iaWxlQ2xvdWRTZXJ2aWNlUHJveHk6IE1vYmlsZUNsb3VkU2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSBtb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eTogTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkpIHtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBpc0NvbmZsaWN0RGV0ZWN0ZWQoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gc3RhdGUuY29uZmxpY3REZXRlY3RlZDtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBpc1VzZXJBdXRoZW50aWNhdGVkV2l0aFNTTyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgaXNVc2VyQXV0aGVudGljYXRlZFdpdGgyRkEoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy51c2VyLmF1dGhlbnRpY2F0ZWQyRkE7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgc2VydmVyRW52aXJvbm1lbnRNb2RlKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xyXG4gICAgcmV0dXJuIHN0YXRlLnNlcnZlckVudmlyb25tZW50TW9kZTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBVc2VySW5mbyB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy51c2VyO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGxvZ2dlZFVzZXJJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IFVzZXJJbmZvIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy51c2VyO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIHRlbmFudEluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy50ZW5hbnQ7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgdGhpcmRQYXJ0eVRva2VuKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udGhpcmRQYXJ0eVRva2VuO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGxvZ2dlZFRlbmFudEluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShMT0dHRURfVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udGVuYW50O1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIHVzZXJTZXR0aW5ncyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBTcGFya1NldHRpbmdzRHRvW10ge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udXNlci5zZXR0aW5ncyBhcyBTcGFya1NldHRpbmdzRHRvW107XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHB1YmxpYyBzdGF0aWMgbWFwcGVkVXNlclNldHRpbmdzKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8udXNlci5zZXR0aW5ncy5yZWR1Y2UoKHNldHRpbmdzTWFwLCB1c2VyU2V0dGluZykgPT5cclxuICAgICAgc2V0dGluZ3NNYXAuc2V0KFxyXG4gICAgICAgIHVzZXJTZXR0aW5nLmNhdGVnb3J5LFxyXG4gICAgICAgIHR5cGVvZiB1c2VyU2V0dGluZy5zZXR0aW5nc0pzb24gPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IEpTT04ucGFyc2UodXNlclNldHRpbmcuc2V0dGluZ3NKc29uKVxyXG4gICAgICAgICAgOiB1c2VyU2V0dGluZy5zZXR0aW5nc0pzb25cclxuICAgICAgKSwgbmV3IE1hcDxTZXR0aW5nc0NhdGVnb3J5LCBhbnk+KCkpO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBwdWJsaWMgc3RhdGljIGFwcENvbmZpZ3VyYXRpb24oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShMT0dHRURfVEVOQU5UX0tFWSk7XHJcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXT8uYXBwQ29uZmlndXJhdGlvbjtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgcHVibGljIHN0YXRpYyBrZWVwTWVMb2dnZWRJbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0/LnVzZXIua2VlcE1lTG9nZ2VkSW4gPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvZ2luUmVxdWVzdEFjdGlvbilcclxuICBwdWJsaWMgb25Mb2dpbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogTG9naW5SZXF1ZXN0QWN0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dpbihhY3Rpb24pLnBpcGUodGFwKHtcclxuICAgICAgbmV4dDogc3BhcmtTZXNzaW9uID0+IHtcclxuICAgICAgICB0aGlzLlNldFRlbmFudFVzZXJBY3Rpb24oY3R4LCBzcGFya1Nlc3Npb24pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobWVzc2FnZSksIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oU2V0VGVuYW50VXNlckFjdGlvbilcclxuICBwdWJsaWMgb25TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBzcGFya1Nlc3Npb24gfTogU2V0VGVuYW50VXNlckFjdGlvbikge1xyXG4gICAgdGhpcy5TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eCwgc3BhcmtTZXNzaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgU2V0VGVuYW50VXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHNwYXJrU2Vzc2lvbjogU3BhcmtTZXNzaW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBjb25zdCB7IHVzZXIsIGF1dGhUb2tlbiwgcmVmcmVzaCwgdGhpcmRQYXJ0eVRva2VuIH0gPSBzcGFya1Nlc3Npb247XHJcbiAgICB1c2VyLnNldHRpbmdzID0gdXNlci5zZXR0aW5ncy5tYXAocyA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XHJcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnksXHJcbiAgICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnBhcnNlKHMuc2V0dGluZ3NKc29uKVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdKSB7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XSA9IHsgdXNlciwgYXV0aFRva2VuLCByZWZyZXNoLCB0ZW5hbnQ6IG51bGwsIHRoaXJkUGFydHlUb2tlbiB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIgPSB1c2VyO1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYXV0aFRva2VuO1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0ucmVmcmVzaCA9IHJlZnJlc2g7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS50aGlyZFBhcnR5VG9rZW4gPSB0aGlyZFBhcnR5VG9rZW47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFVwZGF0ZUF1dGhUb2tlbkFjdGlvbilcclxuICBwdWJsaWMgb25VcGRhdGVBdXRoVG9rZW5BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFVwZGF0ZUF1dGhUb2tlbkFjdGlvbikge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmF1dGhUb2tlbiA9IGFjdGlvbi5hdXRoVG9rZW47XHJcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0ucmVmcmVzaC5yZWZyZXNoVG9rZW4gPSBhY3Rpb24ucmVmcmVzaFRva2VuO1xyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFNldFN0YXRlQWN0aW9uKVxyXG4gIHB1YmxpYyBzZXRTZXNzaW9uU3RhdGUoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFN0YXRlQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYWN0aW9uLmF1dGhUb2tlbjtcclxuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoID0gYWN0aW9uLnJlZnJlc2g7XHJcblxyXG4gICAgY29uc3QgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyA9IHtcclxuICAgICAgdmVyc2lvbjogdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24sXHJcbiAgICAgIHJlbGVhc2VEYXRlOiBudWxsLFxyXG4gICAgICBmZWF0dXJlczoge30sXHJcbiAgICB9O1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoeyBhcHBsaWNhdGlvbiB9KTtcclxuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihTZXRVc2VyTmFtZUFjdGlvbilcclxuICBwdWJsaWMgU2V0VXNlck5hbWVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFVzZXJOYW1lQWN0aW9uKSB7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5kaXNwbGF5TmFtZSA9IGFjdGlvbi51c2VyTmFtZTtcclxuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihBdWRpdExvZ291dEFjdGlvbilcclxuICBwdWJsaWMgQXVkaXRMb2dvdXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IEF1ZGl0TG9nb3V0QWN0aW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIGNvbnN0IHRlbmFudEluZm8gPSBjdHguZ2V0U3RhdGUoKS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy50ZW5hbnQ7XHJcbiAgICBpZiAodGhpcy5pc1RlbmFudFVuZGVmaW5lZCh0ZW5hbnRJbmZvLCBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdKSkge1xyXG4gICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0ZW5hbnQgb3Igc3BhcmtTZXNzaW9ucyBhcmUgdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmF1ZGl0TG9nb3V0KCkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHsgfSkpO1xyXG4gIH1cclxuXHJcbiAgLy9UT0RPICwgZW5hYmxlIGJhY2tvZmZpY2UgbG9nb3V0IHdoZW4gLCBCRSBBdWRpdCBmb3IgYmFja29mZmljZSBpcyBpbXBsZW1lbnRlZFxyXG4gIC8vIEBBY3Rpb24oQXVkaXRCYWNrb2ZmaWNlQWN0aW9uKVxyXG4gIC8vIHB1YmxpYyBvbkF1ZGl0QmFja29mZmljZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRCYWNrb2ZmaWNlQWN0aW9uKSB7XHJcbiAgLy8gICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgLy8gICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAvLyAgIGNvbnN0IHRlbmFudEluZm8gPSBjdHguZ2V0U3RhdGUoKS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudDtcclxuICAvLyAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XHJcbiAgLy8gICAgIHJldHVybiBvZihudWxsKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRlbmFudCBvciBzcGFya1Nlc3Npb25zIGFyZSB1bmRlZmluZWRcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiB0aGlzLmJhY2tvZmZpY2VTZXJ2aWNlUHJveHkuYmFja29mZmljZUF1ZGl0TG9nb3V0KCkucGlwZShcclxuICAvLyAgICAgdGFwKCgpID0+IHsgfSkpO1xyXG4gIC8vIH1cclxuXHJcbiAgQEFjdGlvbihBdWRpdExvZ291dE1vYmlsZUFjdGlvbilcclxuICBwdWJsaWMgQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IEF1ZGl0TG9nb3V0TW9iaWxlQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcclxuICAgIGNvbnN0IHRlbmFudEluZm8gPSBjdHguZ2V0U3RhdGUoKS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdPy50ZW5hbnQ7XHJcbiAgICBpZiAodGhpcy5pc1RlbmFudFVuZGVmaW5lZCh0ZW5hbnRJbmZvLCBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdKSkge1xyXG4gICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0ZW5hbnQgb3Igc3BhcmtTZXNzaW9ucyBhcmUgdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tb2JpbGVDbG91ZFNlcnZpY2VQcm94eS5tb2JpbGVBdWRpdExvZ291dFYyKFZFUlNJT05fTU9CSUxFX0xBVEVTVCkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHsgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihNb2JpbGVMb2dvdXRBY3Rpb24pXHJcbiAgcHVibGljIG9uTW9iaWxlTG9nb3V0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBsb2dvdXRBdWRpdCB9OiBNb2JpbGVMb2dvdXRBY3Rpb24pIHtcclxuICAgIGNvbnN0IGFwcFR5cGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZTtcclxuICAgIHRoaXMuaHR0cENhbmNlbFNlcnZpY2UuY2FuY2VsUGVuZGluZ1JlcXVlc3RzKCk7XHJcblxyXG4gICAgaWYgKGFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlKSB7XHJcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTG9nb3V0TW9iaWxlQWN0aW9uKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcclxuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxvZ291dEF1ZGl0KSB7XHJcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgQXVkaXRMb2dvdXRNb2JpbGVBY3Rpb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKCAvLyBvYnNlcnZlIGFsbCByb3V0ZSBldmVudHNcclxuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaXJzdCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcclxuICAgICAgICAgICAgY29uc3Qgc3NvRW5hYmxlZCA9IHRlbmFudD8udXNlcj8uc3NvQXV0aGVudGljYXRlZDtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcclxuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBUZW5hbnRDbGVhckFjdGlvbigpKTtcclxuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBVbmxvYWRQYXJraW5nTG90QWN0aW9uKCkpO1xyXG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbmFudE5hbWUgPSB0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZTtcclxuICAgICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRlbmFudD8udGVuYW50LnByb3BzPy5zc28/LnByb3ZpZGVyO1xyXG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3R4LmdldFN0YXRlKCkuY29uZmxpY3REZXRlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcclxuICAgICAgICAgICAgICAgICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IGAvJHt0ZW5hbnROYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvZ291dEFjdGlvbilcclxuICBwdWJsaWMgb25Mb2dvdXQoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IGxvZ291dEF1ZGl0LCBsb2dvdXRCYWNrb2ZmaWNlQXVkaXQgfTogTG9nb3V0QWN0aW9uKSB7XHJcbiAgICBjb25zdCBhcHBUeXBlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGU7XHJcbiAgICB0aGlzLmh0dHBDYW5jZWxTZXJ2aWNlLmNhbmNlbFBlbmRpbmdSZXF1ZXN0cygpO1xyXG5cclxuICAgIGlmIChhcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSkge1xyXG4gICAgICBjdHguZGlzcGF0Y2gobmV3IExvZ291dE1vYmlsZUFjdGlvbigpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBnZXROYXZpZ2F0aW9uUm91dGUoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8oY3R4LmdldFN0YXRlKCkpLCBhcHBUeXBlLCBbJ2FjY291bnQnLCAnbG9naW4nXSk7XHJcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTmF2aWdhdGUocGF0aCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsb2dvdXRBdWRpdCkge1xyXG4gICAgICBjdHguZGlzcGF0Y2gobmV3IEF1ZGl0TG9nb3V0QWN0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vVE9ETyAsIGVuYWJsZSBiYWNrb2ZmaWNlIGxvZ291dCB3aGVuICwgQkUgQXVkaXQgZm9yIGJhY2tvZmZpY2UgaXMgaW1wbGVtZW50ZWRcclxuICAgIC8vIGlmIChsb2dvdXRCYWNrb2ZmaWNlQXVkaXQpIHtcclxuICAgIC8vICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdEJhY2tvZmZpY2VBY3Rpb24oKSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKCAvLyBvYnNlcnZlIGFsbCByb3V0ZSBldmVudHNcclxuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaXJzdCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcclxuICAgICAgICAgICAgY29uc3Qgc3NvRW5hYmxlZCA9IHRlbmFudD8udXNlcj8uc3NvQXV0aGVudGljYXRlZDtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcclxuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBUZW5hbnRDbGVhckFjdGlvbigpKTtcclxuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBVbmxvYWRQYXJraW5nTG90QWN0aW9uKCkpO1xyXG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbmFudE5hbWUgPSB0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZTtcclxuICAgICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRlbmFudD8udGVuYW50LnByb3BzPy5zc28/LnByb3ZpZGVyO1xyXG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3R4LmdldFN0YXRlKCkuY29uZmxpY3REZXRlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcclxuICAgICAgICAgICAgICAgICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IGxvZ291dEJhY2tvZmZpY2VBdWRpdCA/ICcvJyA6IGAvJHt0ZW5hbnROYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVGVuYW50VW5kZWZpbmVkID0gKHRlbmFudDogVGVuYW50SW5mbywgc2Vzc2lvbjogU3BhcmtTZXNzaW9uKSA9PiAhdGVuYW50IHx8ICFzZXNzaW9uO1xyXG5cclxuICBzaWxlbnRMb2dPdXRNc2woY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhcHBUeXBlOiBBcHBUeXBlKSB7XHJcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XHJcbiAgICAgIGFjY291bnQ6IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5jbGVhckNhY2hlKGNsZWFyQ2FjaGVSZXF1ZXN0KTtcclxuICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcclxuXHJcbiAgICBjb25zdCBwYXRoID0gZ2V0TmF2aWdhdGlvblJvdXRlKFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKGN0eC5nZXRTdGF0ZSgpKSwgYXBwVHlwZSwgWydhY2NvdW50JywgJ2xvZ2luJ10pO1xyXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFRlbmFudExvYWRBY3Rpb24pXHJcbiAgcHVibGljIG9uVGVuYW50TG9hZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogVGVuYW50TG9hZEFjdGlvbikge1xyXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IGFjdGlvbi50ZW5hbnQ/LnRlbmFudE5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgIGlmICghc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSkge1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdID0geyB1c2VyOiBudWxsLCBhdXRoVG9rZW46IG51bGwsIHJlZnJlc2g6IG51bGwsIHRlbmFudDogYWN0aW9uLnRlbmFudCB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQgPSBhY3Rpb24udGVuYW50O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihUZW5hbnRDbGVhckFjdGlvbilcclxuICBwdWJsaWMgb25UZW5hbnRDbGVhckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIF86IFRlbmFudENsZWFyQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICBjb25zdCBzcGFya1Nlc3Npb24gPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XHJcbiAgICBpZiAoc3BhcmtTZXNzaW9uKSB7XHJcbiAgICAgIHNwYXJrU2Vzc2lvbi51c2VyID0gbnVsbDtcclxuICAgICAgc3BhcmtTZXNzaW9uLnJlZnJlc2ggPSBudWxsO1xyXG4gICAgICBzcGFya1Nlc3Npb24uYXV0aFRva2VuID0gbnVsbDtcclxuICAgICAgaWYgKHNwYXJrU2Vzc2lvbi5hcHBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24uYW5hbHl0aWNzVG9rZW4gPSAnJztcclxuICAgICAgICBzcGFya1Nlc3Npb24uYXBwQ29uZmlndXJhdGlvbi5mZWVkYmFja1Rva2VuID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEhlYWx0aEFjdGlvbilcclxuICBwdWJsaWMgb25IZWFsdGhBY3Rpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uQ2xvdWRTZXJ2aWNlUHJveHkuZ2V0RW52KCkucGlwZSh0YXAoZW52UmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKEVOVklST05NRU5ULCBKU09OLnN0cmluZ2lmeShlbnZSZXNwb25zZS5kYXRhLmVudmlyb25tZW50KSk7XHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmVyRW52aXJvbm1lbnRNb2RlOiBlbnZSZXNwb25zZS5kYXRhLmVudmlyb25tZW50IH0pO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb24pXHJcbiAgcHVibGljIG9uVXBkYXRlVXNlclNldHRpbmdzKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyB1c2VyU2V0dGluZ3MgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIuc2V0dGluZ3MgPSB1c2VyU2V0dGluZ3M7XHJcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVXBkYXRlVGVuYW50SW5mb1Byb3BzKVxyXG4gIHB1YmxpYyBvblVwZGF0ZVRlbmFudEluZm9Qcm9wcyhjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgcHJvcHMgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRlbmFudC5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIpXHJcbiAgcHVibGljIG9uQXV0aGVudGljYXRlMkZBZm9yVXNlcihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgfSkge1xyXG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgaWYgKHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XT8udXNlcikge1xyXG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlci5hdXRoZW50aWNhdGVkMkZBID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbilcclxuICBwdWJsaWMgb25Mb2FkU2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBJbml0U2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24pIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKTtcclxuICAgIGNvbnN0IHNlc3Npb246IHtcclxuICAgICAgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyxcclxuICAgICAgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4sXHJcbiAgICB9ID0gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiBkZWZhdWx0U2Vzc2lvblN0YXRlO1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBhcHBsaWNhdGlvbjogc2Vzc2lvbi5hcHBsaWNhdGlvbixcclxuICAgICAgc3BhcmtTZXNzaW9uczogc2Vzc2lvbi5zcGFya1Nlc3Npb25zXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcclxuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gc2Vzc2lvbi5zcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XHJcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEF1dGhTZXNzaW9uKHNwYXJrU2Vzc2lvbj8uYXV0aFRva2VuLCBzcGFya1Nlc3Npb24/LnJlZnJlc2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24pXHJcbiAgcHVibGljIG9uQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMuYmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LmdldEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uKCk7XHJcbiAgICByZXR1cm4gYXBwQ29uZmlndXJhdGlvbiQucGlwZSh0YXAoYXBwQ29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudCkge1xyXG4gICAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hcHBDb25maWd1cmF0aW9uID0gYXBwQ29uZmlndXJhdGlvbi5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKVxyXG4gIHB1YmxpYyBvbkFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMuY29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LmdldEFwcENvbmZpZ3VyYXRpb24oKTtcclxuICAgIHJldHVybiBhcHBDb25maWd1cmF0aW9uJC5waXBlKHRhcChhcHBDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XHJcbiAgICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmFwcENvbmZpZ3VyYXRpb24gPSBhcHBDb25maWd1cmF0aW9uLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24pXHJcbiAgcHVibGljIG9uTG9hZEFwcENvbmZpZ3VyYXRpb25Nb2JpbGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XHJcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMubW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkubW9iaWxlR2V0QXBwQ29uZmlndXJhdGlvbihWRVJTSU9OX01PQklMRV9MQVRFU1QpO1xyXG4gICAgcmV0dXJuIGFwcENvbmZpZ3VyYXRpb24kLnBpcGUodGFwKGFwcENvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XHJcbiAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcclxuICAgICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXBwQ29uZmlndXJhdGlvbiA9IGFwcENvbmZpZ3VyYXRpb24uZGF0YTtcclxuICAgICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihTZXRDb25mbGljdERldGVjdGVkKVxyXG4gIHB1YmxpYyBzZXRDb25mbGljdERldGVjdGVkKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRDb25mbGljdERldGVjdGVkKSB7XHJcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgIGNvbmZsaWN0RGV0ZWN0ZWQ6IGFjdGlvbi5lcnJvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihDbGVhckNvbmZsaWN0RGV0ZWN0ZWQpXHJcbiAgcHVibGljIGNsZWFyQ29uZmxpY3REZXRlY3RlZChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIF86IENsZWFyQ29uZmxpY3REZXRlY3RlZCkge1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBjb25mbGljdERldGVjdGVkOiBudWxsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3BhcmtTZXNzaW9ucyA9ICgpOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPiA9PiBKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFNFU1NJT04pKT8uc3BhcmtTZXNzaW9ucyA/PyB7fTtcclxuICBwcml2YXRlIHNldFNwYXJrU2Vzc2lvbnMgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPik6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgYXBwbGljYXRpb24gPSBjdHguZ2V0U3RhdGUoKS5hcHBsaWNhdGlvbjtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFNFU1NJT04sIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgYXBwbGljYXRpb24sXHJcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IHNwYXJrU2Vzc2lvbnNcclxuICAgIH0pKTtcclxuICAgIGN0eC5wYXRjaFN0YXRlKHsgc3BhcmtTZXNzaW9ucyB9KTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|