@c8y/ngx-components 1021.3.1 → 1021.6.0
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/assets-navigator/asset-selector/asset-selector-node.component.d.ts +2 -1
- package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector.component.d.ts +2 -1
- package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
- package/cockpit-config/cockpit-config.service.d.ts.map +1 -1
- package/cockpit-config/cockpit-configuration.component.d.ts +1 -0
- package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
- package/cockpit-config/root-node-config.component.d.ts +2 -1
- package/cockpit-config/root-node-config.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts +3 -3
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/dashboard.model.d.ts +11 -0
- package/core/dashboard/dashboard.model.d.ts.map +1 -1
- package/core/dashboard/dashboard.module.d.ts +2 -1
- package/core/dashboard/dashboard.module.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -4
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/login/login.component.d.ts.map +1 -1
- package/core/login/login.service.d.ts +1 -1
- package/core/login/login.service.d.ts.map +1 -1
- package/core/properties-list/properties-list.component.d.ts +6 -9
- package/core/properties-list/properties-list.component.d.ts.map +1 -1
- package/core/provider-configuration/provider-configuration.component.d.ts.map +1 -1
- package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +6 -3
- package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +7 -4
- package/esm2022/assets-navigator/asset-selector/miller-view.component.mjs +1 -1
- package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.mjs +1 -1
- package/esm2022/cockpit-config/cockpit-config.service.mjs +7 -3
- package/esm2022/cockpit-config/cockpit-configuration.component.mjs +6 -3
- package/esm2022/cockpit-config/root-node-config.component.mjs +8 -4
- package/esm2022/cockpit-config/setup/cockpit-setup-step3.component.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.component.mjs +12 -7
- package/esm2022/core/dashboard/dashboard.model.mjs +5 -1
- package/esm2022/core/dashboard/dashboard.module.mjs +8 -4
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +33 -15
- package/esm2022/core/login/login.component.mjs +8 -3
- package/esm2022/core/login/login.service.mjs +5 -2
- package/esm2022/core/properties-list/properties-list.component.mjs +32 -42
- package/esm2022/core/provider-configuration/provider-configuration.component.mjs +8 -3
- package/esm2022/device-grid/columns/group.filtering-form-renderer.component.mjs +1 -1
- package/esm2022/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.mjs +11 -2
- package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +2 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +12 -6
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +19 -9
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +11 -6
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +10 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +83 -56
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +9 -0
- package/locales/es.po +9 -0
- package/locales/fr.po +9 -0
- package/locales/ja_JP.po +9 -3
- package/locales/locales.pot +15 -0
- package/locales/nl.po +9 -0
- package/locales/pl.po +9 -0
- package/locales/pt_BR.po +9 -0
- package/package.json +1 -1
- package/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.d.ts +10 -0
- package/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.d.ts.map +1 -1
|
@@ -124,7 +124,10 @@ export class LoginService {
|
|
|
124
124
|
return this.client
|
|
125
125
|
.fetch(`/tenant/oauth?session_state=${sessionState}&code=${code}`, params)
|
|
126
126
|
.then(res => this.handleErrorStatusCodes(res))
|
|
127
|
-
.
|
|
127
|
+
.catch(ex => {
|
|
128
|
+
this.showSsoError(ex);
|
|
129
|
+
throw new Error();
|
|
130
|
+
});
|
|
128
131
|
}
|
|
129
132
|
autoLogout() {
|
|
130
133
|
const errorPattern = /invalid\scredentials.*pin.*generate/i;
|
|
@@ -611,4 +614,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
611
614
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.FetchClient }, { type: i1.BasicAuth }, { type: i1.CookieAuth }, { type: i2.AppStateService }, { type: i1.UserService }, { type: i1.TenantService }, { type: i1.Realtime }, { type: i3.AlertService }, { type: i4.ApiService }, { type: i5.TenantUiService }, { type: i1.TenantLoginOptionsService }, { type: i6.TranslateService }, { type: i7.ModalService }, { type: i8.LocationStrategy, decorators: [{
|
|
612
615
|
type: Optional
|
|
613
616
|
}] }] });
|
|
614
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLFdBQVcsRUFLWCxRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFFaEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQStE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RkFBWixZQUFZO2tCQUR4QixVQUFVOzswQkErRU4sUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzaWNBdXRoLFxuICBDb29raWVBdXRoLFxuICBCZWFyZXJBdXRoRnJvbVNlc3Npb25TdG9yYWdlLFxuICBGZXRjaENsaWVudCxcbiAgSUF1dGhlbnRpY2F0aW9uLFxuICBJQ3JlZGVudGlhbHMsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJVGVuYW50TG9naW5PcHRpb24sXG4gIFJlYWx0aW1lLFxuICBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICBUZW5hbnRTZXJ2aWNlLFxuICBVc2VyU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IFRlbmFudFVpU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi90ZW5hbnQtdWkuc2VydmljZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldCwgaXNTdHJpbmcsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICcuLi9jb21tb24vc3RhdHVzLm1vZGVsJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSB0aGUgbG9naW4uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2dpblNlcnZpY2Uge1xuICByZW1lbWJlck1lID0gZmFsc2U7XG4gIFRPS0VOX0tFWSA9ICdfdGN5OCc7XG4gIFRGQVRPS0VOX0tFWSA9ICdURkFUb2tlbic7XG4gIGxvZ2luTW9kZTogSVRlbmFudExvZ2luT3B0aW9uO1xuICBtYW5hZ2VtZW50TG9naW5Nb2RlOiBJVGVuYW50TG9naW5PcHRpb247XG4gIG9hdXRoT3B0aW9uczogSVRlbmFudExvZ2luT3B0aW9uO1xuICBpc0ZpcnN0TG9naW4gPSB0cnVlO1xuICBHUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQgPSA4O1xuICBhdXRvbWF0aWNMb2dpbkluUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG4gIEVSUk9SX01FU1NBR0VTID0ge1xuICAgIG1pbmxlbmd0aDogZ2V0dGV4dCgnUGFzc3dvcmQgbXVzdCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgbm8gbW9yZSB0aGFuIDMyLicpLFxuICAgIHBhc3N3b3JkX21pc3NtYXRjaDogZ2V0dGV4dCgnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4nKSxcbiAgICBtYXhsZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9zdHJlbmd0aDogZ2V0dGV4dChcbiAgICAgICdZb3VyIHBhc3N3b3JkIGlzIG5vdCBzdHJvbmcgZW5vdWdoLiBQbGVhc2UgaW5jbHVkZSBudW1iZXJzLCBsb3dlciBhbmQgdXBwZXIgY2FzZSBjaGFyYWN0ZXJzJ1xuICAgICksXG4gICAgcmVtb3RlX2Vycm9yOiBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyksXG4gICAgZW1haWw6IGdldHRleHQoJ0ludmFsaWQgZW1haWwgYWRkcmVzcy4nKSxcbiAgICBwYXNzd29yZF9jaGFuZ2U6IGdldHRleHQoJ1lvdXIgcGFzc3dvcmQgaXMgZXhwaXJlZC4gUGxlYXNlIHNldCBhIG5ldyBwYXNzd29yZC4nKSxcbiAgICBwYXNzd29yZF9yZXNldF90b2tlbl9leHBpcmVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IGxpbmsgZXhwaXJlZC4gUGxlYXNlIGVudGVyIHlvdXIgZW1haWwgYWRkcmVzcyB0byByZWNlaXZlIGEgbmV3IG9uZS4nXG4gICAgKSxcbiAgICB0ZmFfcGluX2ludmFsaWQ6IGdldHRleHQoJ1RoZSBjb2RlIHlvdSBlbnRlcmVkIGlzIGludmFsaWQuIFBsZWFzZSB0cnkgYWdhaW4uJyksXG4gICAgcGF0dGVybl9uZXdQYXNzd29yZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICAnUGFzc3dvcmQgbXVzdCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgbm8gbW9yZSB0aGFuIDMyIGFuZCBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMgYW5kIGZvbGxvd2luZyBzeW1ib2xzOiB7eyBzeW1ib2xzIH19J1xuICAgICAgKSxcbiAgICAgIHsgc3ltYm9sczogJ2B+IUAjJCVeJiooKV98Ky09Pzs6XFwnXCIsLjw+e31bXVxcXFwvJyB9XG4gICAgKSxcbiAgICBpbnRlcm5hdGlvbmFsUGhvbmVOdW1iZXI6IGdldHRleHQoXG4gICAgICAnTXVzdCBiZSBhIHZhbGlkIHBob25lIG51bWJlciAob25seSBkaWdpdHMsIHNwYWNlcywgc2xhc2hlcyAoXCIvXCIpLCBkYXNoZXMgKFwiLVwiKSwgYW5kIHBsdXMgKFwiK1wiKSBhbGxvd2VkLCBmb3IgZXhhbXBsZTogKzQ5IDkgODc2IDU0MyAyMTApLidcbiAgICApLFxuICAgIHBob25lX251bWJlcl9lcnJvcjogZ2V0dGV4dCgnQ291bGQgbm90IHVwZGF0ZSBwaG9uZSBudW1iZXIuJyksXG4gICAgcGluQWxyZWFkeVNlbnQ6IGdldHRleHQoXG4gICAgICAnVGhlIHZlcmlmaWNhdGlvbiBjb2RlIHdhcyBhbHJlYWR5IHNlbnQuIEZvciBhIG5ldyB2ZXJpZmljYXRpb24gY29kZSwgcGxlYXNlIGNsaWNrIG9uIHRoZSBsaW5rIGFib3ZlLidcbiAgICApLFxuICAgIHBhc3N3b3JkQ29uZmlybTogZ2V0dGV4dCgnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4nKSxcbiAgICB0ZmFFeHBpcmVkOiBnZXR0ZXh0KCdUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIHRva2VuIGV4cGlyZWQuJylcbiAgfTtcbiAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcblxuICBwcml2YXRlIFNVQ0NFU1NfTUVTU0FHRVMgPSB7XG4gICAgcGFzc3dvcmRfY2hhbmdlZDogZ2V0dGV4dCgnUGFzc3dvcmQgY2hhbmdlZC4gWW91IGNhbiBub3cgbG9nIGluIHVzaW5nIG5ldyBwYXNzd29yZC4nKSxcbiAgICBwYXNzd29yZF9yZXNldF9yZXF1ZXN0ZWQ6IGdldHRleHQoXG4gICAgICAnUGFzc3dvcmQgcmVzZXQgcmVxdWVzdCBoYXMgYmVlbiBzZW50LiBQbGVhc2UgY2hlY2sgeW91ciBlbWFpbC4nXG4gICAgKSxcbiAgICByZXNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgcmVzZW50LicpLFxuICAgIHNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgc2VudC4nKVxuICB9O1xuXG4gIHByaXZhdGUgcGFzc3dvcmRTdHJlbmd0aFNldHRpbmcgPSB7XG4gICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg6IGZhbHNlLFxuICAgIGdyZWVuTWluTGVuZ3RoOiB0aGlzLkdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCxcbiAgICBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk6IGZhbHNlXG4gIH07XG5cbiAgcHJpdmF0ZSBsb2NhbGhvc3RSZWdFeHAgPSBuZXcgUmVnRXhwKCdsb2NhbGhvc3QnKTtcbiAgcHJpdmF0ZSBsb2NhbGhvc3RJcFJlZ0V4cCA9IG5ldyBSZWdFeHAoJzEyNy4wLjAuMScpO1xuICBwcml2YXRlIHNob3dUZW5hbnRSZWdFeHAgPSBuZXcgUmVnRXhwKCdzaG93VGVuYW50Jyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYmFzaWNBdXRoOiBCYXNpY0F1dGgsXG4gICAgcHJpdmF0ZSBjb29raWVBdXRoOiBDb29raWVBdXRoLFxuICAgIHByaXZhdGUgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50OiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFwaTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblN0cmF0ZWd5XG4gICkge1xuICAgIHRoaXMuYXV0b0xvZ291dCgpO1xuICAgIHRoaXMuaW5pdExvZ2luT3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcmV0dXJuIFRoZSB0ZW5hbnQgbmFtZS5cbiAgICovXG4gIGdldFRlbmFudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQudGVuYW50O1xuICB9XG5cbiAgaW5pdExvZ2luT3B0aW9ucygpIHtcbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICB0aGlzLmxvZ2luTW9kZSA9IHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldFByZWZlcnJlZExvZ2luT3B0aW9uKGxvZ2luT3B0aW9ucyk7XG4gICAgdGhpcy5vYXV0aE9wdGlvbnMgPVxuICAgICAgdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0T2F1dGgyT3B0aW9uKGxvZ2luT3B0aW9ucykgfHwgKHt9IGFzIElUZW5hbnRMb2dpbk9wdGlvbik7XG4gIH1cblxuICByZWRpcmVjdFRvT2F1dGgoKSB7XG4gICAgY29uc3QgeyBpbml0UmVxdWVzdCwgZmxvd0NvbnRyb2xsZWRCeVVJIH0gPSB0aGlzLm9hdXRoT3B0aW9ucztcbiAgICBjb25zdCBmdWxsUGF0aCA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9YDtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGVuY29kZVVSSUNvbXBvbmVudChmdWxsUGF0aCk7XG4gICAgY29uc3Qgb3JpZ2luVXJpUGFyYW0gPSBgJHtpbml0UmVxdWVzdC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfW9yaWdpblVyaT0ke3JlZGlyZWN0VXJsfWA7XG4gICAgY29uc3QgdXJsT2JqZWN0ID0gbmV3IFVSTChpbml0UmVxdWVzdCk7XG5cbiAgICBpZiAoZmxvd0NvbnRyb2xsZWRCeVVJKSB7XG4gICAgICB0aGlzLmNsaWVudFxuICAgICAgICAuZmV0Y2goYC90ZW5hbnQvb2F1dGgke3VybE9iamVjdC5zZWFyY2h9JHtvcmlnaW5VcmlQYXJhbX1gKVxuICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVFcnJvclN0YXR1c0NvZGVzKHJlcykpXG4gICAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+ICh3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlcy5yZWRpcmVjdFRvKSlcbiAgICAgICAgLmNhdGNoKGV4ID0+IHRoaXMuc2hvd1Nzb0Vycm9yKGV4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7aW5pdFJlcXVlc3R9JHtvcmlnaW5VcmlQYXJhbX1gO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luQnlTc28oc2Vzc2lvblN0YXRlOiBzdHJpbmcsIGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogJ3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwnXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRcbiAgICAgIC5mZXRjaChgL3RlbmFudC9vYXV0aD9zZXNzaW9uX3N0YXRlPSR7c2Vzc2lvblN0YXRlfSZjb2RlPSR7Y29kZX1gLCBwYXJhbXMpXG4gICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVFcnJvclN0YXR1c0NvZGVzKHJlcykpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmxvZ2luKCkpO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdXRoU3RyYXRlZ3kgPSBuZXcgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgY29uc29sZS5sb2coYFVzaW5nIEJlYXJlckF1dGhGcm9tU2Vzc2lvblN0b3JhZ2VgKTtcbiAgICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICBsZXQgYXV0aFN0cmF0ZWd5OiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgY29uc3QgdGZhID0gdGhpcy5nZXRTdG9yZWRUZmFUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgYXV0aFN0cmF0ZWd5ID0gdGhpcy5iYXNpY0F1dGg7XG4gICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHsgdG9rZW4sIHRmYSB9LCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgfVxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1c2Ugb2YgYmFzaWMgYXV0aCBhcyBzdHJhdGVneSB3aXRoIHRoaXMgY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdXNlLlxuICAgKi9cbiAgdXNlQmFzaWNBdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzaWNBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIGEgdXNlciB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy5cbiAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGN1cnJlbnQgdGVuYW50IGFuZCB1c2VyIGlzIHNldC4gSWYgbm90IGFuIGVycm9yXG4gICAqIGlzIHRocm93bi4gSXQgYWxzbyB2ZXJpZmllcyBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG9wZW4gdGhlXG4gICAqIGN1cnJlbnQgYXBwLlxuICAgKiBAcGFyYW0gYXV0aCBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB0cnkgdG8gbG9naW4uXG4gICAqL1xuICBhc3luYyBsb2dpbihhdXRoOiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmdldEF1dGhTdHJhdGVneSgpLCBjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIHRoaXMuY2xpZW50LnNldEF1dGgoYXV0aCk7XG5cbiAgICBjb25zdCB0ZW5hbnRSZXMgPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KHsgd2l0aFBhcmVudDogdHJ1ZSB9KTtcbiAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRSZXMuZGF0YTtcblxuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzKSkge1xuICAgICAgYXV0aCA9IHRoaXMuY29va2llQXV0aDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUmVzID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICBjb25zdCB1c2VyID0gdXNlclJlcy5kYXRhO1xuICAgIGF3YWl0IHRoaXMudmVyaWZ5QXBwQWNjZXNzKCk7XG5cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSB0aGlzLmdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFscyk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNldENyZWRlbnRpYWxzKFxuICAgICAge1xuICAgICAgICB0ZW5hbnQ6IHRlbmFudC5uYW1lLFxuICAgICAgICB1c2VyOiAoc3VwcG9ydFVzZXJOYW1lID8gYCR7c3VwcG9ydFVzZXJOYW1lfSRgIDogJycpICsgdXNlci51c2VyTmFtZVxuICAgICAgfSxcbiAgICAgIGF1dGhcbiAgICApO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYXV0aEZ1bGZpbGxlZCh0ZW5hbnQsIHVzZXIsIHN1cHBvcnRVc2VyTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGVuYW50LCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgaW5mbyB0byB0aGUgYXBwIHN0YXRlLlxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSBjdXJyZW50IHRlbmFudCBvYmplY3QuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSBjdXJyZW50IHVzZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0gc3VwcG9ydFVzZXJOYW1lIFRoZSBjdXJyZW50IHN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgYXN5bmMgYXV0aEZ1bGZpbGxlZCh0ZW5hbnQ/LCB1c2VyPywgc3VwcG9ydFVzZXJOYW1lPykge1xuICAgIGlmICghdGVuYW50KSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoeyB3aXRoUGFyZW50OiB0cnVlIH0pO1xuICAgICAgdGVuYW50ID0gZGF0YTtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghdXNlcikge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgICAgdXNlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0VXNlck5hbWUpIHtcbiAgICAgIHN1cHBvcnRVc2VyTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51aS5zZXRVc2VyKHsgdXNlciwgc3VwcG9ydFVzZXJOYW1lIH0pO1xuICAgIHRoaXMudWkuY3VycmVudFRlbmFudC5uZXh0KHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIHRoZSBsb2dpbiBtb2RlIHRvIENvb2tpZUF1dGggaWYgdGhlXG4gICAqIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdG8gdXNlIGl0IGluIGxvZ2luT3B0aW9ucy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmb3IgdGhhdCBsb2dpblxuICAgKi9cbiAgYXN5bmMgc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoaXNQYXNzd29yZEdyYW50TG9naW4gJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghKHJlcyBhcyBSZXNwb25zZSkub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICB0aHJvdyB7IHJlcywgZGF0YSB9O1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoKHRoaXMuY29va2llQXV0aCk7XG4gICAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzUGFzc3dvcmRHcmFudExvZ2luO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKSkgJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAnUEFTU1dPUkQnLFxuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICB0ZmFfY29kZTogY3JlZGVudGlhbHMudGZhXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgRmV0Y2hDbGllbnQoKS5mZXRjaCh0aGlzLmdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzKSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGxldCBsb2dpbk1vZGUgPSB0aGlzLmxvZ2luTW9kZTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoIXRoaXMubWFuYWdlbWVudExvZ2luTW9kZSkge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUgPSBhd2FpdCB0aGlzLmdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2luTW9kZSA9IHRoaXMubWFuYWdlbWVudExvZ2luTW9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNPYXV0aEludGVybmFsKGxvZ2luTW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIHVzZSBhIHN1cHBvcnQgdXNlciB0byBsb2cgaW4gb3Igbm90LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdXNlciBpcyBhIHN1cHBvcnQgdXNlci5cbiAgICovXG4gIGlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMudXNlci5pbmNsdWRlcygnJCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IHRoaXMuaXNMb2NhbCgpIHx8IHRoaXMuaXNTaG93VGVuYW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBzZXR1cCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50U2V0dXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyAmJiAhdGhpcy5pc0xvY2FsKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgdXNlciBvdXRcbiAgICogQHBhcmFtIHJlbG9hZCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwYWdlIHdpbGwgbm90IHJlbG9hZFxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KHJlbG9hZCA9IHRydWUpIHtcbiAgICBsZXQgcmVzRGF0YSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFssIGNvb2tpZVJlc10gPSBhd2FpdCB0aGlzLnJlc2V0KCk7XG4gICAgICByZXNEYXRhID0gYXdhaXQgY29va2llUmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5yZW1vdmVMYXN0RGFuZ2VyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZXNEYXRhICYmIHJlc0RhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QocmVzRGF0YS51cmwpO1xuICAgICAgfSBlbHNlIGlmIChyZWxvYWQpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoe30sICcnLCAnJywgJycpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIGF1dGgtZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuY2xlYW5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIHRoaXMucmVhbHRpbWUuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChudWxsKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuYmFzaWNBdXRoLmxvZ291dCgpLCB0aGlzLmNvb2tpZUF1dGgubG9nb3V0KCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgVEZBIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRmYVRva2VuIFRoZSB0ZmEgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHNhdmVURkFUb2tlbih0ZmFUb2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZLCB0ZmFUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgbWFuaWZlc3QgLT4gb24gNDAxIHVzZXIgaGFzIG5vIGFjY2VzcyB0byB0aGF0IGFwcGxpY2F0aW9uXG4gICAqIGFuZCB3ZSB0aHJvdyB0aGUgZXJyb3IgdXAgdG8gdGhlIGxvZ2luIGZvcm0uXG4gICAqL1xuICBhc3luYyB2ZXJpZnlBcHBBY2Nlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudWkubG9hZE1hbmlmZXN0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4LnJlcyAmJiBleC5yZXMuc3RhdHVzID09PSA0MDQgJiYgdGhpcy5pc0xvY2FsKCkpKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9Eb21haW4oZG9tYWluKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBvcmlnaW5VcmwuaHJlZi5yZXBsYWNlKG9yaWdpblVybC5ob3N0bmFtZSwgZG9tYWluKTtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICB9XG5cbiAgc2hvd1Nzb0Vycm9yKGVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYm9keSA9IGVycm9yXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnPHA+PHN0cm9uZz5UaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlOjwvc3Ryb25nPjwvcD48cD48Y29kZT57eyBlcnJvciB9fTwvY29kZT48L3A+LidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICApXG4gICAgICA6IGdldHRleHQoJ1NTTyBsb2dpbiBmYWlsZWQuIENvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyk7XG5cbiAgICB0aGlzLm1vZGFsU2VydmljZS5hY2tub3dsZWRnZShnZXR0ZXh0KCdMb2dpbiBlcnJvcicpLCBib2R5LCBTdGF0dXMuREFOR0VSLCBnZXR0ZXh0KCdPSycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgdG8gdGhlIGNsaWVudCBhbmQgdXBkYXRlcyB0aGUgY3JlZGVudGlhbHMgb24gdGhlXG4gICAqIGF1dGggc3RyYXRlZ3kuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgbmFtZSBvZiB0aGUgdGVuYW50LlxuICAgKiBAcGFyYW0gYXV0aFN0cmF0ZWd5IFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRva2VuIGlmIGJhc2ljIGF1dGgsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMsIGF1dGhTdHJhdGVneTogSUF1dGhlbnRpY2F0aW9uKSB7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnRlbmFudCkge1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gY3JlZGVudGlhbHMudGVuYW50O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBhIHRva2VuIGlzIGFscmVhZHkgc2V0IChjYXNlIGZvciBzdXBwb3J0IHVzZXIgbG9naW4pXG4gICAgLy8gaWYgeWVzIC0+IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXIsIGFuZCByZXVzZSB0aGUgdG9rZW5cbiAgICAvLyBvZiB0aGUgc3VwcG9ydCB1c2VyLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHBhc3MgdXNlciBhbmQgdGVuYW50LCB0byBnZXRcbiAgICAvLyBqdXN0IHRoZSBzdG9yZWQgdG9rZW4gYW5kIG5vdGhpbmcgZWxzZSAoc2VlIEJhc2ljQXV0aC50czozMSkuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmJhc2ljQXV0aC51cGRhdGVDcmVkZW50aWFscyh7XG4gICAgICB0ZW5hbnQ6IGNyZWRlbnRpYWxzLnRlbmFudCxcbiAgICAgIHVzZXI6IGNyZWRlbnRpYWxzLnVzZXJcbiAgICB9KTtcbiAgICBjb25zdCBuZXdDcmVkZW50aWFscyA9IHsgdG9rZW4sIC4uLmNyZWRlbnRpYWxzIH07XG5cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5LnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGEgZGV2ZWxvcGVyIG9yIG5vdC5cbiAgICogUnVubmluZyBvbiBsb2NhbGhvc3QgbWVhbnMgZGV2ZWxvcG1lbnQgbW9kZS5cbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGhvc3RJcFJlZ0V4cC50ZXN0KGhvc3RuYW1lKSB8fCB0aGlzLmxvY2FsaG9zdFJlZ0V4cC50ZXN0KGhvc3RuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVRva2VuKHRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIHNlc3Npb25TdG9yYWdlKTtcbiAgICBpZiAodGhpcy5yZW1lbWJlck1lKSB7XG4gICAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgbG9jYWxTdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuU2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVuYW50UmVnRXhwLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdCh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoPyk6IFByb21pc2U8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMudWkucmVmcmVzaExvZ2luT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNpY0F1dGhMb2dpbk9wdGlvbiA9IGxvZ2luT3B0aW9ucy5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ0JBU0lDJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNpY0F1dGhMb2dpbk9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdXBwb3J0IHVzZXIgbmFtZSBmcm9tIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgb2JqZWN0IChkZWZhdWx0cyB0byB0aGUgc3RvcmVkIG9uZSkuXG4gICAqIEByZXR1cm5zIFN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHRoaXMuZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKSk6IHN0cmluZyB7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IGNyZWRlbnRpYWxzLnVzZXIubWF0Y2goL14oLitcXC8pPygoLispXFwkKT8oLispPyQvKVszXTtcbiAgICByZXR1cm4gc3VwcG9ydFVzZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCB0b2tlbi5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRDcmVkZW50aWFscygpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgVEZBIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCBURkEgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRmYVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRva2VuIHRvIGNyZWRlbnRpYWxzIG9iamVjdC5cbiAgICogQHBhcmFtIHRva2VuIFRva2VuIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYih0b2tlbikpKTtcbiAgICBjb25zdCBzcGxpdCA9IGRlY29kZWQubWF0Y2goLygoW14vXSopXFwvKT8oW14vOl0rKTooLispLyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50OiBzcGxpdFsyXSxcbiAgICAgIHVzZXI6IHNwbGl0WzNdLFxuICAgICAgcGFzc3dvcmQ6IHNwbGl0WzRdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIGlmIChpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudCkgJiYgdGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3Quc3BsaXQoJz8nKS5wb3AoKSk7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB1cmxQYXJhbXMuZ2V0KCd0ZW5hbnRfaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuICFpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudClcbiAgICAgID8gYHRlbmFudC9vYXV0aD90ZW5hbnRfaWQ9JHtjcmVkZW50aWFscy50ZW5hbnR9YFxuICAgICAgOiBgdGVuYW50L29hdXRoYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpIHtcbiAgICBjb25zdCBtYW5hZ2VtZW50TG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yTWFuYWdlbWVudCgpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihtYW5hZ2VtZW50TG9naW5PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXNwb25zZTogSUZldGNoUmVzcG9uc2UpOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zdCBlcnJvciA9IGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGRhdGEuZXJyb3I7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXX0=
|
|
617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLFdBQVcsRUFLWCxRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFFaEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQStE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QUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs4R0E1cEJVLFlBQVk7a0hBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBK0VOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgQ29va2llQXV0aCxcbiAgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSxcbiAgRmV0Y2hDbGllbnQsXG4gIElBdXRoZW50aWNhdGlvbixcbiAgSUNyZWRlbnRpYWxzLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSVRlbmFudExvZ2luT3B0aW9uLFxuICBSZWFsdGltZSxcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgVGVuYW50U2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdGVuYW50LXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBnZXQsIGlzU3RyaW5nLCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uL3N0YXR1cy5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSB0byBtYW5hZ2UgdGhlIGxvZ2luLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcbiAgcmVtZW1iZXJNZSA9IGZhbHNlO1xuICBUT0tFTl9LRVkgPSAnX3RjeTgnO1xuICBURkFUT0tFTl9LRVkgPSAnVEZBVG9rZW4nO1xuICBsb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgbWFuYWdlbWVudExvZ2luTW9kZTogSVRlbmFudExvZ2luT3B0aW9uO1xuICBvYXV0aE9wdGlvbnM6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgaXNGaXJzdExvZ2luID0gdHJ1ZTtcbiAgR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUID0gODtcbiAgYXV0b21hdGljTG9naW5JblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICBFUlJPUl9NRVNTQUdFUyA9IHtcbiAgICBtaW5sZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9taXNzbWF0Y2g6IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgbWF4bGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfc3RyZW5ndGg6IGdldHRleHQoXG4gICAgICAnWW91ciBwYXNzd29yZCBpcyBub3Qgc3Ryb25nIGVub3VnaC4gUGxlYXNlIGluY2x1ZGUgbnVtYmVycywgbG93ZXIgYW5kIHVwcGVyIGNhc2UgY2hhcmFjdGVycydcbiAgICApLFxuICAgIHJlbW90ZV9lcnJvcjogZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpLFxuICAgIGVtYWlsOiBnZXR0ZXh0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3MuJyksXG4gICAgcGFzc3dvcmRfY2hhbmdlOiBnZXR0ZXh0KCdZb3VyIHBhc3N3b3JkIGlzIGV4cGlyZWQuIFBsZWFzZSBzZXQgYSBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfdG9rZW5fZXhwaXJlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCBsaW5rIGV4cGlyZWQuIFBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MgdG8gcmVjZWl2ZSBhIG5ldyBvbmUuJ1xuICAgICksXG4gICAgdGZhX3Bpbl9pbnZhbGlkOiBnZXR0ZXh0KCdUaGUgY29kZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgdHJ5IGFnYWluLicpLFxuICAgIHBhdHRlcm5fbmV3UGFzc3dvcmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMiBhbmQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBmb2xsb3dpbmcgc3ltYm9sczoge3sgc3ltYm9scyB9fSdcbiAgICAgICksXG4gICAgICB7IHN5bWJvbHM6ICdgfiFAIyQlXiYqKClffCstPT87OlxcJ1wiLC48Pnt9W11cXFxcLycgfVxuICAgICksXG4gICAgaW50ZXJuYXRpb25hbFBob25lTnVtYmVyOiBnZXR0ZXh0KFxuICAgICAgJ011c3QgYmUgYSB2YWxpZCBwaG9uZSBudW1iZXIgKG9ubHkgZGlnaXRzLCBzcGFjZXMsIHNsYXNoZXMgKFwiL1wiKSwgZGFzaGVzIChcIi1cIiksIGFuZCBwbHVzIChcIitcIikgYWxsb3dlZCwgZm9yIGV4YW1wbGU6ICs0OSA5IDg3NiA1NDMgMjEwKS4nXG4gICAgKSxcbiAgICBwaG9uZV9udW1iZXJfZXJyb3I6IGdldHRleHQoJ0NvdWxkIG5vdCB1cGRhdGUgcGhvbmUgbnVtYmVyLicpLFxuICAgIHBpbkFscmVhZHlTZW50OiBnZXR0ZXh0KFxuICAgICAgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB3YXMgYWxyZWFkeSBzZW50LiBGb3IgYSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBhYm92ZS4nXG4gICAgKSxcbiAgICBwYXNzd29yZENvbmZpcm06IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgdGZhRXhwaXJlZDogZ2V0dGV4dCgnVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiB0b2tlbiBleHBpcmVkLicpXG4gIH07XG4gIC8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbiAgcHJpdmF0ZSBTVUNDRVNTX01FU1NBR0VTID0ge1xuICAgIHBhc3N3b3JkX2NoYW5nZWQ6IGdldHRleHQoJ1Bhc3N3b3JkIGNoYW5nZWQuIFlvdSBjYW4gbm93IGxvZyBpbiB1c2luZyBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IHJlcXVlc3QgaGFzIGJlZW4gc2VudC4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwuJ1xuICAgICksXG4gICAgcmVzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHJlc2VudC4nKSxcbiAgICBzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHNlbnQuJylcbiAgfTtcblxuICBwcml2YXRlIHBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nID0ge1xuICAgIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoOiBmYWxzZSxcbiAgICBncmVlbk1pbkxlbmd0aDogdGhpcy5HUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQsXG4gICAgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5OiBmYWxzZVxuICB9O1xuXG4gIHByaXZhdGUgbG9jYWxob3N0UmVnRXhwID0gbmV3IFJlZ0V4cCgnbG9jYWxob3N0Jyk7XG4gIHByaXZhdGUgbG9jYWxob3N0SXBSZWdFeHAgPSBuZXcgUmVnRXhwKCcxMjcuMC4wLjEnKTtcbiAgcHJpdmF0ZSBzaG93VGVuYW50UmVnRXhwID0gbmV3IFJlZ0V4cCgnc2hvd1RlbmFudCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY29va2llQXV0aDogQ29va2llQXV0aCxcbiAgICBwcml2YXRlIHVpOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudDogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25TdHJhdGVneVxuICApIHtcbiAgICB0aGlzLmF1dG9Mb2dvdXQoKTtcbiAgICB0aGlzLmluaXRMb2dpbk9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHJldHVybiBUaGUgdGVuYW50IG5hbWUuXG4gICAqL1xuICBnZXRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRlbmFudDtcbiAgfVxuXG4gIGluaXRMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgdGhpcy5sb2dpbk1vZGUgPSB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihsb2dpbk9wdGlvbnMpO1xuICAgIHRoaXMub2F1dGhPcHRpb25zID1cbiAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldE9hdXRoMk9wdGlvbihsb2dpbk9wdGlvbnMpIHx8ICh7fSBhcyBJVGVuYW50TG9naW5PcHRpb24pO1xuICB9XG5cbiAgcmVkaXJlY3RUb09hdXRoKCkge1xuICAgIGNvbnN0IHsgaW5pdFJlcXVlc3QsIGZsb3dDb250cm9sbGVkQnlVSSB9ID0gdGhpcy5vYXV0aE9wdGlvbnM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoZnVsbFBhdGgpO1xuICAgIGNvbnN0IG9yaWdpblVyaVBhcmFtID0gYCR7aW5pdFJlcXVlc3QuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31vcmlnaW5Vcmk9JHtyZWRpcmVjdFVybH1gO1xuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaW5pdFJlcXVlc3QpO1xuXG4gICAgaWYgKGZsb3dDb250cm9sbGVkQnlVSSkge1xuICAgICAgdGhpcy5jbGllbnRcbiAgICAgICAgLmZldGNoKGAvdGVuYW50L29hdXRoJHt1cmxPYmplY3Quc2VhcmNofSR7b3JpZ2luVXJpUGFyYW19YClcbiAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiAod2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXMucmVkaXJlY3RUbykpXG4gICAgICAgIC5jYXRjaChleCA9PiB0aGlzLnNob3dTc29FcnJvcihleCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke2luaXRSZXF1ZXN0fSR7b3JpZ2luVXJpUGFyYW19YDtcbiAgICB9XG4gIH1cblxuICBsb2dpbkJ5U3NvKHNlc3Npb25TdGF0ZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sJ1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuZmV0Y2goYC90ZW5hbnQvb2F1dGg/c2Vzc2lvbl9zdGF0ZT0ke3Nlc3Npb25TdGF0ZX0mY29kZT0ke2NvZGV9YCwgcGFyYW1zKVxuICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgdGhpcy5zaG93U3NvRXJyb3IoZXgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdXRoU3RyYXRlZ3kgPSBuZXcgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgY29uc29sZS5sb2coYFVzaW5nIEJlYXJlckF1dGhGcm9tU2Vzc2lvblN0b3JhZ2VgKTtcbiAgICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICBsZXQgYXV0aFN0cmF0ZWd5OiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgY29uc3QgdGZhID0gdGhpcy5nZXRTdG9yZWRUZmFUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgYXV0aFN0cmF0ZWd5ID0gdGhpcy5iYXNpY0F1dGg7XG4gICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHsgdG9rZW4sIHRmYSB9LCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgfVxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1c2Ugb2YgYmFzaWMgYXV0aCBhcyBzdHJhdGVneSB3aXRoIHRoaXMgY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdXNlLlxuICAgKi9cbiAgdXNlQmFzaWNBdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzaWNBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIGEgdXNlciB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy5cbiAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGN1cnJlbnQgdGVuYW50IGFuZCB1c2VyIGlzIHNldC4gSWYgbm90IGFuIGVycm9yXG4gICAqIGlzIHRocm93bi4gSXQgYWxzbyB2ZXJpZmllcyBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG9wZW4gdGhlXG4gICAqIGN1cnJlbnQgYXBwLlxuICAgKiBAcGFyYW0gYXV0aCBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB0cnkgdG8gbG9naW4uXG4gICAqL1xuICBhc3luYyBsb2dpbihhdXRoOiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmdldEF1dGhTdHJhdGVneSgpLCBjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIHRoaXMuY2xpZW50LnNldEF1dGgoYXV0aCk7XG5cbiAgICBjb25zdCB0ZW5hbnRSZXMgPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KHsgd2l0aFBhcmVudDogdHJ1ZSB9KTtcbiAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRSZXMuZGF0YTtcblxuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzKSkge1xuICAgICAgYXV0aCA9IHRoaXMuY29va2llQXV0aDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUmVzID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICBjb25zdCB1c2VyID0gdXNlclJlcy5kYXRhO1xuICAgIGF3YWl0IHRoaXMudmVyaWZ5QXBwQWNjZXNzKCk7XG5cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSB0aGlzLmdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFscyk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNldENyZWRlbnRpYWxzKFxuICAgICAge1xuICAgICAgICB0ZW5hbnQ6IHRlbmFudC5uYW1lLFxuICAgICAgICB1c2VyOiAoc3VwcG9ydFVzZXJOYW1lID8gYCR7c3VwcG9ydFVzZXJOYW1lfSRgIDogJycpICsgdXNlci51c2VyTmFtZVxuICAgICAgfSxcbiAgICAgIGF1dGhcbiAgICApO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYXV0aEZ1bGZpbGxlZCh0ZW5hbnQsIHVzZXIsIHN1cHBvcnRVc2VyTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGVuYW50LCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgaW5mbyB0byB0aGUgYXBwIHN0YXRlLlxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSBjdXJyZW50IHRlbmFudCBvYmplY3QuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSBjdXJyZW50IHVzZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0gc3VwcG9ydFVzZXJOYW1lIFRoZSBjdXJyZW50IHN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgYXN5bmMgYXV0aEZ1bGZpbGxlZCh0ZW5hbnQ/LCB1c2VyPywgc3VwcG9ydFVzZXJOYW1lPykge1xuICAgIGlmICghdGVuYW50KSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoeyB3aXRoUGFyZW50OiB0cnVlIH0pO1xuICAgICAgdGVuYW50ID0gZGF0YTtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghdXNlcikge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgICAgdXNlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0VXNlck5hbWUpIHtcbiAgICAgIHN1cHBvcnRVc2VyTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51aS5zZXRVc2VyKHsgdXNlciwgc3VwcG9ydFVzZXJOYW1lIH0pO1xuICAgIHRoaXMudWkuY3VycmVudFRlbmFudC5uZXh0KHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIHRoZSBsb2dpbiBtb2RlIHRvIENvb2tpZUF1dGggaWYgdGhlXG4gICAqIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdG8gdXNlIGl0IGluIGxvZ2luT3B0aW9ucy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmb3IgdGhhdCBsb2dpblxuICAgKi9cbiAgYXN5bmMgc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoaXNQYXNzd29yZEdyYW50TG9naW4gJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghKHJlcyBhcyBSZXNwb25zZSkub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICB0aHJvdyB7IHJlcywgZGF0YSB9O1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoKHRoaXMuY29va2llQXV0aCk7XG4gICAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzUGFzc3dvcmRHcmFudExvZ2luO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKSkgJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAnUEFTU1dPUkQnLFxuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICB0ZmFfY29kZTogY3JlZGVudGlhbHMudGZhXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgRmV0Y2hDbGllbnQoKS5mZXRjaCh0aGlzLmdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzKSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGxldCBsb2dpbk1vZGUgPSB0aGlzLmxvZ2luTW9kZTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoIXRoaXMubWFuYWdlbWVudExvZ2luTW9kZSkge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUgPSBhd2FpdCB0aGlzLmdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2luTW9kZSA9IHRoaXMubWFuYWdlbWVudExvZ2luTW9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNPYXV0aEludGVybmFsKGxvZ2luTW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIHVzZSBhIHN1cHBvcnQgdXNlciB0byBsb2cgaW4gb3Igbm90LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdXNlciBpcyBhIHN1cHBvcnQgdXNlci5cbiAgICovXG4gIGlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMudXNlci5pbmNsdWRlcygnJCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IHRoaXMuaXNMb2NhbCgpIHx8IHRoaXMuaXNTaG93VGVuYW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBzZXR1cCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50U2V0dXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyAmJiAhdGhpcy5pc0xvY2FsKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgdXNlciBvdXRcbiAgICogQHBhcmFtIHJlbG9hZCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwYWdlIHdpbGwgbm90IHJlbG9hZFxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KHJlbG9hZCA9IHRydWUpIHtcbiAgICBsZXQgcmVzRGF0YSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFssIGNvb2tpZVJlc10gPSBhd2FpdCB0aGlzLnJlc2V0KCk7XG4gICAgICByZXNEYXRhID0gYXdhaXQgY29va2llUmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5yZW1vdmVMYXN0RGFuZ2VyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZXNEYXRhICYmIHJlc0RhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QocmVzRGF0YS51cmwpO1xuICAgICAgfSBlbHNlIGlmIChyZWxvYWQpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoe30sICcnLCAnJywgJycpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIGF1dGgtZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuY2xlYW5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIHRoaXMucmVhbHRpbWUuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChudWxsKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuYmFzaWNBdXRoLmxvZ291dCgpLCB0aGlzLmNvb2tpZUF1dGgubG9nb3V0KCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgVEZBIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRmYVRva2VuIFRoZSB0ZmEgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHNhdmVURkFUb2tlbih0ZmFUb2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZLCB0ZmFUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgbWFuaWZlc3QgLT4gb24gNDAxIHVzZXIgaGFzIG5vIGFjY2VzcyB0byB0aGF0IGFwcGxpY2F0aW9uXG4gICAqIGFuZCB3ZSB0aHJvdyB0aGUgZXJyb3IgdXAgdG8gdGhlIGxvZ2luIGZvcm0uXG4gICAqL1xuICBhc3luYyB2ZXJpZnlBcHBBY2Nlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudWkubG9hZE1hbmlmZXN0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4LnJlcyAmJiBleC5yZXMuc3RhdHVzID09PSA0MDQgJiYgdGhpcy5pc0xvY2FsKCkpKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9Eb21haW4oZG9tYWluKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBvcmlnaW5VcmwuaHJlZi5yZXBsYWNlKG9yaWdpblVybC5ob3N0bmFtZSwgZG9tYWluKTtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICB9XG5cbiAgc2hvd1Nzb0Vycm9yKGVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYm9keSA9IGVycm9yXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnPHA+PHN0cm9uZz5UaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlOjwvc3Ryb25nPjwvcD48cD48Y29kZT57eyBlcnJvciB9fTwvY29kZT48L3A+LidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICApXG4gICAgICA6IGdldHRleHQoJ1NTTyBsb2dpbiBmYWlsZWQuIENvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyk7XG5cbiAgICB0aGlzLm1vZGFsU2VydmljZS5hY2tub3dsZWRnZShnZXR0ZXh0KCdMb2dpbiBlcnJvcicpLCBib2R5LCBTdGF0dXMuREFOR0VSLCBnZXR0ZXh0KCdPSycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgdG8gdGhlIGNsaWVudCBhbmQgdXBkYXRlcyB0aGUgY3JlZGVudGlhbHMgb24gdGhlXG4gICAqIGF1dGggc3RyYXRlZ3kuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgbmFtZSBvZiB0aGUgdGVuYW50LlxuICAgKiBAcGFyYW0gYXV0aFN0cmF0ZWd5IFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRva2VuIGlmIGJhc2ljIGF1dGgsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMsIGF1dGhTdHJhdGVneTogSUF1dGhlbnRpY2F0aW9uKSB7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnRlbmFudCkge1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gY3JlZGVudGlhbHMudGVuYW50O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBhIHRva2VuIGlzIGFscmVhZHkgc2V0IChjYXNlIGZvciBzdXBwb3J0IHVzZXIgbG9naW4pXG4gICAgLy8gaWYgeWVzIC0+IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXIsIGFuZCByZXVzZSB0aGUgdG9rZW5cbiAgICAvLyBvZiB0aGUgc3VwcG9ydCB1c2VyLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHBhc3MgdXNlciBhbmQgdGVuYW50LCB0byBnZXRcbiAgICAvLyBqdXN0IHRoZSBzdG9yZWQgdG9rZW4gYW5kIG5vdGhpbmcgZWxzZSAoc2VlIEJhc2ljQXV0aC50czozMSkuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmJhc2ljQXV0aC51cGRhdGVDcmVkZW50aWFscyh7XG4gICAgICB0ZW5hbnQ6IGNyZWRlbnRpYWxzLnRlbmFudCxcbiAgICAgIHVzZXI6IGNyZWRlbnRpYWxzLnVzZXJcbiAgICB9KTtcbiAgICBjb25zdCBuZXdDcmVkZW50aWFscyA9IHsgdG9rZW4sIC4uLmNyZWRlbnRpYWxzIH07XG5cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5LnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGEgZGV2ZWxvcGVyIG9yIG5vdC5cbiAgICogUnVubmluZyBvbiBsb2NhbGhvc3QgbWVhbnMgZGV2ZWxvcG1lbnQgbW9kZS5cbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGhvc3RJcFJlZ0V4cC50ZXN0KGhvc3RuYW1lKSB8fCB0aGlzLmxvY2FsaG9zdFJlZ0V4cC50ZXN0KGhvc3RuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVRva2VuKHRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIHNlc3Npb25TdG9yYWdlKTtcbiAgICBpZiAodGhpcy5yZW1lbWJlck1lKSB7XG4gICAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgbG9jYWxTdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuU2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVuYW50UmVnRXhwLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdCh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoPyk6IFByb21pc2U8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMudWkucmVmcmVzaExvZ2luT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNpY0F1dGhMb2dpbk9wdGlvbiA9IGxvZ2luT3B0aW9ucy5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ0JBU0lDJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNpY0F1dGhMb2dpbk9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdXBwb3J0IHVzZXIgbmFtZSBmcm9tIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgb2JqZWN0IChkZWZhdWx0cyB0byB0aGUgc3RvcmVkIG9uZSkuXG4gICAqIEByZXR1cm5zIFN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHRoaXMuZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKSk6IHN0cmluZyB7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IGNyZWRlbnRpYWxzLnVzZXIubWF0Y2goL14oLitcXC8pPygoLispXFwkKT8oLispPyQvKVszXTtcbiAgICByZXR1cm4gc3VwcG9ydFVzZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCB0b2tlbi5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRDcmVkZW50aWFscygpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgVEZBIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCBURkEgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRmYVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRva2VuIHRvIGNyZWRlbnRpYWxzIG9iamVjdC5cbiAgICogQHBhcmFtIHRva2VuIFRva2VuIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYih0b2tlbikpKTtcbiAgICBjb25zdCBzcGxpdCA9IGRlY29kZWQubWF0Y2goLygoW14vXSopXFwvKT8oW14vOl0rKTooLispLyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50OiBzcGxpdFsyXSxcbiAgICAgIHVzZXI6IHNwbGl0WzNdLFxuICAgICAgcGFzc3dvcmQ6IHNwbGl0WzRdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIGlmIChpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudCkgJiYgdGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3Quc3BsaXQoJz8nKS5wb3AoKSk7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB1cmxQYXJhbXMuZ2V0KCd0ZW5hbnRfaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuICFpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudClcbiAgICAgID8gYHRlbmFudC9vYXV0aD90ZW5hbnRfaWQ9JHtjcmVkZW50aWFscy50ZW5hbnR9YFxuICAgICAgOiBgdGVuYW50L29hdXRoYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpIHtcbiAgICBjb25zdCBtYW5hZ2VtZW50TG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yTWFuYWdlbWVudCgpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihtYW5hZ2VtZW50TG9naW5PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXNwb25zZTogSUZldGNoUmVzcG9uc2UpOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zdCBlcnJvciA9IGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGRhdGEuZXJyb3I7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXX0=
|
|
@@ -19,6 +19,10 @@ import * as i3 from "../i18n/c8y-translate.pipe";
|
|
|
19
19
|
*/
|
|
20
20
|
export class PropertiesListComponent {
|
|
21
21
|
constructor() {
|
|
22
|
+
/**
|
|
23
|
+
* The properties that this list should display.
|
|
24
|
+
*/
|
|
25
|
+
this.properties = [];
|
|
22
26
|
/**
|
|
23
27
|
* A string array of groups that are shown. If noParse is set to false,
|
|
24
28
|
* each complex key will form a group.
|
|
@@ -35,38 +39,6 @@ export class PropertiesListComponent {
|
|
|
35
39
|
* defaults to 'c8ydontshow' and it not rendered
|
|
36
40
|
*/
|
|
37
41
|
this.emptyLabel = null;
|
|
38
|
-
this._data = {};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* The properties that this list should display.
|
|
42
|
-
*/
|
|
43
|
-
set properties(items) {
|
|
44
|
-
this._properties = this.parseProperties(items);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @ignore
|
|
48
|
-
*/
|
|
49
|
-
get properties() {
|
|
50
|
-
if (this.noParse) {
|
|
51
|
-
return this._properties;
|
|
52
|
-
}
|
|
53
|
-
const propsWithGroups = [
|
|
54
|
-
...this._properties,
|
|
55
|
-
...this.groups.map(group => ({
|
|
56
|
-
key: group,
|
|
57
|
-
label: group,
|
|
58
|
-
value: group,
|
|
59
|
-
type: 'group'
|
|
60
|
-
}))
|
|
61
|
-
].filter(item => item.value !== undefined && item.value !== null);
|
|
62
|
-
return sortBy(propsWithGroups, ['key']);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* An object where the properties keys are resolved from.
|
|
66
|
-
*/
|
|
67
|
-
set data(data) {
|
|
68
|
-
this._data = data;
|
|
69
|
-
this._properties = this.parseProperties(this._properties);
|
|
70
42
|
}
|
|
71
43
|
/**
|
|
72
44
|
* Checks if a certain property has an group associated.
|
|
@@ -83,7 +55,14 @@ export class PropertiesListComponent {
|
|
|
83
55
|
* @ignore
|
|
84
56
|
*/
|
|
85
57
|
ngOnInit() {
|
|
86
|
-
this.
|
|
58
|
+
this.originalProperties = [...this.properties];
|
|
59
|
+
this.parseProperties();
|
|
60
|
+
}
|
|
61
|
+
ngOnChanges(changes) {
|
|
62
|
+
if (changes.properties || changes.noParse) {
|
|
63
|
+
this.originalProperties = [...this.properties];
|
|
64
|
+
this.parseProperties();
|
|
65
|
+
}
|
|
87
66
|
}
|
|
88
67
|
/**
|
|
89
68
|
* Used in trackBy to avoid recalculation all the time.
|
|
@@ -92,13 +71,24 @@ export class PropertiesListComponent {
|
|
|
92
71
|
identity(index, item) {
|
|
93
72
|
return item.value;
|
|
94
73
|
}
|
|
95
|
-
parseProperties(
|
|
96
|
-
return items.map(item => this.parsePropertyItem(item));
|
|
97
|
-
}
|
|
98
|
-
parsePropertyItem(item) {
|
|
74
|
+
parseProperties() {
|
|
99
75
|
if (this.noParse) {
|
|
100
|
-
|
|
76
|
+
this.properties = [...this.originalProperties];
|
|
77
|
+
return;
|
|
101
78
|
}
|
|
79
|
+
this.properties = this.properties.map(item => this.parsePropertyItem(item));
|
|
80
|
+
const propsWithGroups = [];
|
|
81
|
+
propsWithGroups.push(...this.properties);
|
|
82
|
+
propsWithGroups.push(...this.groups.map(group => ({
|
|
83
|
+
key: group,
|
|
84
|
+
label: group,
|
|
85
|
+
value: group,
|
|
86
|
+
type: 'group'
|
|
87
|
+
})));
|
|
88
|
+
const filteredProps = propsWithGroups.filter(item => item.value != null);
|
|
89
|
+
this.properties = sortBy(filteredProps, ['key']);
|
|
90
|
+
}
|
|
91
|
+
parsePropertyItem(item) {
|
|
102
92
|
item.value = this.resolveValueFromKey(item);
|
|
103
93
|
item.value = item.transform && item.value ? item.transform(item.value) : item.value;
|
|
104
94
|
item.type = this.resolveType(item);
|
|
@@ -106,13 +96,13 @@ export class PropertiesListComponent {
|
|
|
106
96
|
return item;
|
|
107
97
|
}
|
|
108
98
|
resolveValueFromKey(item) {
|
|
109
|
-
if (item.key && this.
|
|
99
|
+
if (item.key && this.data) {
|
|
110
100
|
const keyPath = item.key.split('.');
|
|
111
101
|
const rootGroup = keyPath[0];
|
|
112
102
|
if (keyPath.length > 1 && !this.groups.includes(rootGroup)) {
|
|
113
103
|
this.groups.push(rootGroup);
|
|
114
104
|
}
|
|
115
|
-
return get(this.
|
|
105
|
+
return get(this.data, item.key);
|
|
116
106
|
}
|
|
117
107
|
return item.value;
|
|
118
108
|
}
|
|
@@ -126,7 +116,7 @@ export class PropertiesListComponent {
|
|
|
126
116
|
return item.value;
|
|
127
117
|
}
|
|
128
118
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PropertiesListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
129
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: PropertiesListComponent, selector: "c8y-properties-list", inputs: { properties: "properties", title: "title", icon: "icon", data: "data", groups: "groups", noParse: "noParse", emptyLabel: "emptyLabel" }, ngImport: i0, template: "<p class=\"m-b-8\" *ngIf=\"title\">\n <i *ngIf=\"icon\" [c8yIcon]=\"icon\" class=\"text-info m-r-8\"></i>\n <span class=\"text-label-small\">{{ title | translate }}</span>\n</p>\n<ul class=\"list-unstyled small\">\n <li\n class=\"p-t-4 p-b-4 d-flex\"\n *ngFor=\"let prop of properties; let i = index; trackBy: identity\"\n [ngClass]=\"{'separator-top-bottom': i === 0,\n 'separator-bottom': i > 0}\"\n >\n <div\n [ngClass]=\"{\n 'm-l-16': hasGroup(prop),\n legend: prop.type === 'group',\n 'form-block': prop.type === 'group',\n 'm-b-0': prop.type === 'group',\n 'm-t-4': prop.type === 'group'\n }\"\n class=\"small text-medium text-nowrap m-r-4\"\n >\n {{ prop.label | translate }}\n </div>\n <span [ngSwitch]=\"prop.type\" class=\"m-l-auto\">\n <span *ngSwitchCase=\"'string'\" class=\"m-l-auto\">{{ prop.value }}</span>\n <a\n *ngSwitchCase=\"'link'\"\n (click)=\"prop.action($event, prop.value)\"\n class=\"m-l-auto pointer text-truncate m-l-4\"\n >{{ prop.value }}</a>\n <span *ngSwitchCase=\"'array'\">\n <span\n class=\"label label-info m-l-4\"\n *ngFor=\"let propTag of prop.value\"\n (click)=\"prop.action && prop.action($event, propTag)\"\n [ngClass]=\"{\n pointer: prop.action\n }\"\n >{{ propTag }}</span>\n </span>\n </span>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
|
|
119
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: PropertiesListComponent, selector: "c8y-properties-list", inputs: { properties: "properties", title: "title", icon: "icon", data: "data", groups: "groups", noParse: "noParse", emptyLabel: "emptyLabel" }, usesOnChanges: true, ngImport: i0, template: "<p class=\"m-b-8\" *ngIf=\"title\">\n <i *ngIf=\"icon\" [c8yIcon]=\"icon\" class=\"text-info m-r-8\"></i>\n <span class=\"text-label-small\">{{ title | translate }}</span>\n</p>\n<ul class=\"list-unstyled small\">\n <li\n class=\"p-t-4 p-b-4 d-flex\"\n *ngFor=\"let prop of properties; let i = index; trackBy: identity\"\n [ngClass]=\"{'separator-top-bottom': i === 0,\n 'separator-bottom': i > 0}\"\n >\n <div\n [ngClass]=\"{\n 'm-l-16': hasGroup(prop),\n legend: prop.type === 'group',\n 'form-block': prop.type === 'group',\n 'm-b-0': prop.type === 'group',\n 'm-t-4': prop.type === 'group'\n }\"\n class=\"small text-medium text-nowrap m-r-4\"\n >\n {{ prop.label | translate }}\n </div>\n <span [ngSwitch]=\"prop.type\" class=\"m-l-auto\">\n <span *ngSwitchCase=\"'string'\" class=\"m-l-auto\">{{ prop.value }}</span>\n <a\n *ngSwitchCase=\"'link'\"\n (click)=\"prop.action($event, prop.value)\"\n class=\"m-l-auto pointer text-truncate m-l-4\"\n >{{ prop.value }}</a>\n <span *ngSwitchCase=\"'array'\">\n <span\n class=\"label label-info m-l-4\"\n *ngFor=\"let propTag of prop.value\"\n (click)=\"prop.action && prop.action($event, propTag)\"\n [ngClass]=\"{\n pointer: prop.action\n }\"\n >{{ propTag }}</span>\n </span>\n </span>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
|
|
130
120
|
}
|
|
131
121
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PropertiesListComponent, decorators: [{
|
|
132
122
|
type: Component,
|
|
@@ -146,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
146
136
|
}], emptyLabel: [{
|
|
147
137
|
type: Input
|
|
148
138
|
}] } });
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcHJvcGVydGllcy1saXN0L3Byb3BlcnRpZXMtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3Byb3BlcnRpZXMtbGlzdC9wcm9wZXJ0aWVzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBR3hDOzs7Ozs7Ozs7Ozs7R0FZRztBQUtILE1BQU0sT0FBTyx1QkFBdUI7SUFKcEM7UUFzREU7OztXQUdHO1FBRUgsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUV0Qjs7O1dBR0c7UUFFSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCOzs7O1dBSUc7UUFFSCxlQUFVLEdBQVcsSUFBSSxDQUFDO1FBR2xCLFVBQUssR0FBRyxFQUFFLENBQUM7S0FtRXBCO0lBM0lDOztPQUVHO0lBQ0gsSUFDSSxVQUFVLENBQUMsS0FBMkI7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUc7WUFDdEIsR0FBRyxJQUFJLENBQUMsV0FBVztZQUNuQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsS0FBSyxFQUFFLEtB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TyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQXdCO1FBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3RixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBd0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7OEdBM0lVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDZNQ3JCcEMsaThDQTJDQTs7MkZEdEJhLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSxxQkFBcUI7OEJBUTNCLFVBQVU7c0JBRGIsS0FBSztnQkE2Qk4sS0FBSztzQkFESixLQUFLO2dCQU9OLElBQUk7c0JBREgsS0FBSztnQkFPRixJQUFJO3NCQURQLEtBQUs7Z0JBV04sTUFBTTtzQkFETCxLQUFLO2dCQVFOLE9BQU87c0JBRE4sS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzb3J0QnksIGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBQcm9wZXJ0aWVzTGlzdEl0ZW0gfSBmcm9tICcuL3Byb3BlcnRpZXMtbGlzdC5tb2RlbCc7XG5cbi8qKlxuICogUmVuZGVycyBhIGxpc3Qgb2YgcHJvcGVydGllcyBvZiBhbiBvYmplY3QuXG4gKlxuICogYGBgaHRtbFxuICogPGM4eS1wcm9wZXJ0aWVzLWxpc3RcbiAqICAgaWNvbj1cImluZm9cIlxuICogICBbcHJvcGVydGllc109XCJwcm9wZXJ0aWVzXCJcbiAqICAgW2RhdGFdPVwib3B0aW9uc1wiXG4gKiAgIFtlbXB0eUxhYmVsXT1cIictJ1wiXG4gKiAgIFt0aXRsZV09XCInQXBwbGljYXRpb24gcHJvcGVydGllcycgfCB0cmFuc2xhdGVcIlxuICogPjwvYzh5LXByb3BlcnRpZXMtbGlzdD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcHJvcGVydGllcy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3BlcnRpZXMtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydGllc0xpc3RDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHByb3BlcnRpZXMgdGhhdCB0aGlzIGxpc3Qgc2hvdWxkIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcHJvcGVydGllcyhpdGVtczogUHJvcGVydGllc0xpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gdGhpcy5wYXJzZVByb3BlcnRpZXMoaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGdldCBwcm9wZXJ0aWVzKCk6IFByb3BlcnRpZXNMaXN0SXRlbVtdIHtcbiAgICBpZiAodGhpcy5ub1BhcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcbiAgICB9XG4gICAgY29uc3QgcHJvcHNXaXRoR3JvdXBzID0gW1xuICAgICAgLi4udGhpcy5fcHJvcGVydGllcyxcbiAgICAgIC4uLnRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiAoe1xuICAgICAgICBrZXk6IGdyb3VwLFxuICAgICAgICBsYWJlbDogZ3JvdXAsXG4gICAgICAgIHZhbHVlOiBncm91cCxcbiAgICAgICAgdHlwZTogJ2dyb3VwJ1xuICAgICAgfSkpXG4gICAgXS5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc29ydEJ5KHByb3BzV2l0aEdyb3VwcywgWydrZXknXSk7XG4gIH1cblxuICAvKipcbiAgICogQSB0aXRsZSBmb3IgdGhlIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBpY29uIHdoaWNoIGlzIGRpc3BsYXllZCBuZXh0IHRvIHRoZSB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHdoZXJlIHRoZSBwcm9wZXJ0aWVzIGtleXMgYXJlIHJlc29sdmVkIGZyb20uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgZGF0YShkYXRhOiBvYmplY3QpIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gdGhpcy5wYXJzZVByb3BlcnRpZXModGhpcy5fcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQSBzdHJpbmcgYXJyYXkgb2YgZ3JvdXBzIHRoYXQgYXJlIHNob3duLiBJZiBub1BhcnNlIGlzIHNldCB0byBmYWxzZSxcbiAgICogZWFjaCBjb21wbGV4IGtleSB3aWxsIGZvcm0gYSBncm91cC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdyb3Vwczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB0cmllcyB0byBwYXJzZSB0aGUgcHJvcGVydGllcyBhbmQgcmVzb2x2ZSBrZXlzIGFuZCB0eXBlcy4gWW91IGNhblxuICAgKiBhdm9pZCB0aGlzIGJ5IHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgbm9QYXJzZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBsYWJlbCB0byBkaXNwbGF5IGFsbCBwcm9wZXJ0aWVzIGJ1dCB0aGUgZW1wdHkgb25lc1xuICAgKiBnZXQgdGhlIGBlbXB0eUxhYmVsYCBhc3NpZ25lZC4gSWYgdGhlIGVtcHR5IGxhYmVsIGlzIG5vdCBzZXQsXG4gICAqIGRlZmF1bHRzIHRvICdjOHlkb250c2hvdycgYW5kIGl0IG5vdCByZW5kZXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgZW1wdHlMYWJlbDogc3RyaW5nID0gbnVsbDtcblxuICBwcml2YXRlIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTGlzdEl0ZW1bXTtcbiAgcHJpdmF0ZSBfZGF0YSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjZXJ0YWluIHByb3BlcnR5IGhhcyBhbiBncm91cCBhc3NvY2lhdGVkLlxuICAgKiBAcGFyYW0gaXRlbSBUaGUgcHJvcGVydHkgdG8gdmVyaWZ5LlxuICAgKi9cbiAgaGFzR3JvdXAoaXRlbTogUHJvcGVydGllc0xpc3RJdGVtKSB7XG4gICAgaWYgKCFpdGVtLmtleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYXRoID0gaXRlbS5rZXkuc3BsaXQoJy4nKTtcbiAgICByZXR1cm4ga2V5UGF0aC5sZW5ndGggPiAxICYmIHRoaXMuZ3JvdXBzLmluY2x1ZGVzKGtleVBhdGhbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB0aGlzLnBhcnNlUHJvcGVydGllcyh0aGlzLl9wcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGluIHRyYWNrQnkgdG8gYXZvaWQgcmVjYWxjdWxhdGlvbiBhbGwgdGhlIHRpbWUuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlkZW50aXR5KGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUHJvcGVydGllcyhpdGVtczogUHJvcGVydGllc0xpc3RJdGVtW10gPSBbXSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB0aGlzLnBhcnNlUHJvcGVydHlJdGVtKGl0ZW0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQcm9wZXJ0eUl0ZW0oaXRlbTogUHJvcGVydGllc0xpc3RJdGVtKTogUHJvcGVydGllc0xpc3RJdGVtIHtcbiAgICBpZiAodGhpcy5ub1BhcnNlKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBpdGVtLnZhbHVlID0gdGhpcy5yZXNvbHZlVmFsdWVGcm9tS2V5KGl0ZW0pO1xuICAgIGl0ZW0udmFsdWUgPSBpdGVtLnRyYW5zZm9ybSAmJiBpdGVtLnZhbHVlID8gaXRlbS50cmFuc2Zvcm0oaXRlbS52YWx1ZSkgOiBpdGVtLnZhbHVlO1xuICAgIGl0ZW0udHlwZSA9IHRoaXMucmVzb2x2ZVR5cGUoaXRlbSk7XG4gICAgaXRlbS52YWx1ZSA9IHRoaXMuYXR0YWNoRW1wdHlMYWJlbChpdGVtKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVZhbHVlRnJvbUtleShpdGVtOiBQcm9wZXJ0aWVzTGlzdEl0ZW0pIHtcbiAgICBpZiAoaXRlbS5rZXkgJiYgdGhpcy5fZGF0YSkge1xuICAgICAgY29uc3Qga2V5UGF0aCA9IGl0ZW0ua2V5LnNwbGl0KCcuJyk7XG4gICAgICBjb25zdCByb290R3JvdXAgPSBrZXlQYXRoWzBdO1xuICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID4gMSAmJiAhdGhpcy5ncm91cHMuaW5jbHVkZXMocm9vdEdyb3VwKSkge1xuICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKHJvb3RHcm91cCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0KHRoaXMuX2RhdGEsIGl0ZW0ua2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUeXBlKGl0ZW06IFByb3BlcnRpZXNMaXN0SXRlbSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0udmFsdWUpID8gJ2FycmF5JyA6IGl0ZW0uYWN0aW9uICYmIGl0ZW0udmFsdWUgPyAnbGluaycgOiAnc3RyaW5nJztcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoRW1wdHlMYWJlbChpdGVtOiBQcm9wZXJ0aWVzTGlzdEl0ZW0pIHtcbiAgICBpZiAoaXRlbS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0udmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtcHR5TGFiZWw7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG59XG4iLCI8cCBjbGFzcz1cIm0tYi04XCIgKm5nSWY9XCJ0aXRsZVwiPlxuICA8aSAqbmdJZj1cImljb25cIiBbYzh5SWNvbl09XCJpY29uXCIgY2xhc3M9XCJ0ZXh0LWluZm8gbS1yLThcIj48L2k+XG4gIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuPC9wPlxuPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbFwiPlxuICA8bGlcbiAgICBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleFwiXG4gICAgKm5nRm9yPVwibGV0IHByb3Agb2YgcHJvcGVydGllczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogaWRlbnRpdHlcIlxuICAgIFtuZ0NsYXNzXT1cInsnc2VwYXJhdG9yLXRvcC1ib3R0b20nOiBpID09PSAwLFxuICAgICAgICAgICAgICAgICdzZXBhcmF0b3ItYm90dG9tJzogaSA+IDB9XCJcbiAgICA+XG4gICAgPGRpdlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnbS1sLTE2JzogaGFzR3JvdXAocHJvcCksXG4gICAgICAgIGxlZ2VuZDogcHJvcC50eXBlID09PSAnZ3JvdXAnLFxuICAgICAgICAnZm9ybS1ibG9jayc6IHByb3AudHlwZSA9PT0gJ2dyb3VwJyxcbiAgICAgICAgJ20tYi0wJzogcHJvcC50eXBlID09PSAnZ3JvdXAnLFxuICAgICAgICAnbS10LTQnOiBwcm9wLnR5cGUgPT09ICdncm91cCdcbiAgICAgIH1cIlxuICAgICAgY2xhc3M9XCJzbWFsbCB0ZXh0LW1lZGl1bSB0ZXh0LW5vd3JhcCBtLXItNFwiXG4gICAgPlxuICAgICAge3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJwcm9wLnR5cGVcIiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3N0cmluZydcIiBjbGFzcz1cIm0tbC1hdXRvXCI+e3sgcHJvcC52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgIDxhXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGluaydcIlxuICAgICAgICAoY2xpY2spPVwicHJvcC5hY3Rpb24oJGV2ZW50LCBwcm9wLnZhbHVlKVwiXG4gICAgICAgIGNsYXNzPVwibS1sLWF1dG8gcG9pbnRlciB0ZXh0LXRydW5jYXRlIG0tbC00XCJcbiAgICAgID57eyBwcm9wLnZhbHVlIH19PC9hPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm8gbS1sLTRcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9wVGFnIG9mIHByb3AudmFsdWVcIlxuICAgICAgICAgIChjbGljayk9XCJwcm9wLmFjdGlvbiAmJiBwcm9wLmFjdGlvbigkZXZlbnQsIHByb3BUYWcpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICBwb2ludGVyOiBwcm9wLmFjdGlvblxuICAgICAgICAgIH1cIlxuICAgICAgICA+e3sgcHJvcFRhZyB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvbGk+XG48L3VsPlxuIl19
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcHJvcGVydGllcy1saXN0L3Byb3BlcnRpZXMtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3Byb3BlcnRpZXMtbGlzdC9wcm9wZXJ0aWVzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7OztBQUd4Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFLSCxNQUFNLE9BQU8sdUJBQXVCO0lBSnBDO1FBS0U7O1dBRUc7UUFDTSxlQUFVLEdBQXlCLEVBQUUsQ0FBQztRQW1CL0M7OztXQUdHO1FBRUgsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUV0Qjs7O1dBR0c7UUFFSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCOzs7O1dBSUc7UUFFSCxlQUFVLEdBQVcsSUFBSSxDQUFDO0tBNkYzQjtJQXpGQzs7O09BR0c7SUFDSCxRQUFRLENBQUMsSUFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVB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SUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQXdCO1FBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3RixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBd0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7OEdBdklVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGtPQ3JCcEMsaThDQTJDQTs7MkZEdEJhLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSxxQkFBcUI7OEJBT3RCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTU4sS0FBSztzQkFESixLQUFLO2dCQU9OLElBQUk7c0JBREgsS0FBSztnQkFNRyxJQUFJO3NCQUFaLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQVFOLE9BQU87c0JBRE4sS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNvcnRCeSwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFByb3BlcnRpZXNMaXN0SXRlbSB9IGZyb20gJy4vcHJvcGVydGllcy1saXN0Lm1vZGVsJztcblxuLyoqXG4gKiBSZW5kZXJzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8Yzh5LXByb3BlcnRpZXMtbGlzdFxuICogICBpY29uPVwiaW5mb1wiXG4gKiAgIFtwcm9wZXJ0aWVzXT1cInByb3BlcnRpZXNcIlxuICogICBbZGF0YV09XCJvcHRpb25zXCJcbiAqICAgW2VtcHR5TGFiZWxdPVwiJy0nXCJcbiAqICAgW3RpdGxlXT1cIidBcHBsaWNhdGlvbiBwcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZVwiXG4gKiA+PC9jOHktcHJvcGVydGllcy1saXN0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1wcm9wZXJ0aWVzLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydGllcy1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0aWVzTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyB0aGF0IHRoaXMgbGlzdCBzaG91bGQgZGlzcGxheS5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IFByb3BlcnRpZXNMaXN0SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgZm9yIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gaWNvbiB3aGljaCBpcyBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCB3aGVyZSB0aGUgcHJvcGVydGllcyBrZXlzIGFyZSByZXNvbHZlZCBmcm9tLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogb2JqZWN0O1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBhcnJheSBvZiBncm91cHMgdGhhdCBhcmUgc2hvd24uIElmIG5vUGFyc2UgaXMgc2V0IHRvIGZhbHNlLFxuICAgKiBlYWNoIGNvbXBsZXgga2V5IHdpbGwgZm9ybSBhIGdyb3VwLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHRyaWVzIHRvIHBhcnNlIHRoZSBwcm9wZXJ0aWVzIGFuZCByZXNvbHZlIGtleXMgYW5kIHR5cGVzLiBZb3UgY2FuXG4gICAqIGF2b2lkIHRoaXMgYnkgc2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBub1BhcnNlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIGxhYmVsIHRvIGRpc3BsYXkgYWxsIHByb3BlcnRpZXMgYnV0IHRoZSBlbXB0eSBvbmVzXG4gICAqIGdldCB0aGUgYGVtcHR5TGFiZWxgIGFzc2lnbmVkLiBJZiB0aGUgZW1wdHkgbGFiZWwgaXMgbm90IHNldCxcbiAgICogZGVmYXVsdHMgdG8gJ2M4eWRvbnRzaG93JyBhbmQgaXQgbm90IHJlbmRlcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBlbXB0eUxhYmVsOiBzdHJpbmcgPSBudWxsO1xuXG4gIHByaXZhdGUgb3JpZ2luYWxQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTGlzdEl0ZW1bXTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgY2VydGFpbiBwcm9wZXJ0eSBoYXMgYW4gZ3JvdXAgYXNzb2NpYXRlZC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIHByb3BlcnR5IHRvIHZlcmlmeS5cbiAgICovXG4gIGhhc0dyb3VwKGl0ZW06IFByb3BlcnRpZXNMaXN0SXRlbSkge1xuICAgIGlmICghaXRlbS5rZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qga2V5UGF0aCA9IGl0ZW0ua2V5LnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGtleVBhdGgubGVuZ3RoID4gMSAmJiB0aGlzLmdyb3Vwcy5pbmNsdWRlcyhrZXlQYXRoWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbmFsUHJvcGVydGllcyA9IFsuLi50aGlzLnByb3BlcnRpZXNdO1xuICAgIHRoaXMucGFyc2VQcm9wZXJ0aWVzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucHJvcGVydGllcyB8fCBjaGFuZ2VzLm5vUGFyc2UpIHtcbiAgICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0aWVzID0gWy4uLnRoaXMucHJvcGVydGllc107XG4gICAgICB0aGlzLnBhcnNlUHJvcGVydGllcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGluIHRyYWNrQnkgdG8gYXZvaWQgcmVjYWxjdWxhdGlvbiBhbGwgdGhlIHRpbWUuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlkZW50aXR5KGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUHJvcGVydGllcygpIHtcbiAgICBpZiAodGhpcy5ub1BhcnNlKSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSBbLi4udGhpcy5vcmlnaW5hbFByb3BlcnRpZXNdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcy5tYXAoaXRlbSA9PiB0aGlzLnBhcnNlUHJvcGVydHlJdGVtKGl0ZW0pKTtcbiAgICBjb25zdCBwcm9wc1dpdGhHcm91cHM6IFByb3BlcnRpZXNMaXN0SXRlbVtdID0gW107XG5cbiAgICBwcm9wc1dpdGhHcm91cHMucHVzaCguLi50aGlzLnByb3BlcnRpZXMpO1xuICAgIHByb3BzV2l0aEdyb3Vwcy5wdXNoKFxuICAgICAgLi4udGhpcy5ncm91cHMubWFwKGdyb3VwID0+ICh7XG4gICAgICAgIGtleTogZ3JvdXAsXG4gICAgICAgIGxhYmVsOiBncm91cCxcbiAgICAgICAgdmFsdWU6IGdyb3VwLFxuICAgICAgICB0eXBlOiAnZ3JvdXAnIGFzIGNvbnN0XG4gICAgICB9KSlcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHByb3BzV2l0aEdyb3Vwcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbHVlICE9IG51bGwpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gc29ydEJ5KGZpbHRlcmVkUHJvcHMsIFsna2V5J10pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVByb3BlcnR5SXRlbShpdGVtOiBQcm9wZXJ0aWVzTGlzdEl0ZW0pOiBQcm9wZXJ0aWVzTGlzdEl0ZW0ge1xuICAgIGl0ZW0udmFsdWUgPSB0aGlzLnJlc29sdmVWYWx1ZUZyb21LZXkoaXRlbSk7XG4gICAgaXRlbS52YWx1ZSA9IGl0ZW0udHJhbnNmb3JtICYmIGl0ZW0udmFsdWUgPyBpdGVtLnRyYW5zZm9ybShpdGVtLnZhbHVlKSA6IGl0ZW0udmFsdWU7XG4gICAgaXRlbS50eXBlID0gdGhpcy5yZXNvbHZlVHlwZShpdGVtKTtcbiAgICBpdGVtLnZhbHVlID0gdGhpcy5hdHRhY2hFbXB0eUxhYmVsKGl0ZW0pO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVmFsdWVGcm9tS2V5KGl0ZW06IFByb3BlcnRpZXNMaXN0SXRlbSkge1xuICAgIGlmIChpdGVtLmtleSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgIGNvbnN0IGtleVBhdGggPSBpdGVtLmtleS5zcGxpdCgnLicpO1xuICAgICAgY29uc3Qgcm9vdEdyb3VwID0ga2V5UGF0aFswXTtcbiAgICAgIGlmIChrZXlQYXRoLmxlbmd0aCA+IDEgJiYgIXRoaXMuZ3JvdXBzLmluY2x1ZGVzKHJvb3RHcm91cCkpIHtcbiAgICAgICAgdGhpcy5ncm91cHMucHVzaChyb290R3JvdXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldCh0aGlzLmRhdGEsIGl0ZW0ua2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUeXBlKGl0ZW06IFByb3BlcnRpZXNMaXN0SXRlbSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0udmFsdWUpID8gJ2FycmF5JyA6IGl0ZW0uYWN0aW9uICYmIGl0ZW0udmFsdWUgPyAnbGluaycgOiAnc3RyaW5nJztcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoRW1wdHlMYWJlbChpdGVtOiBQcm9wZXJ0aWVzTGlzdEl0ZW0pIHtcbiAgICBpZiAoaXRlbS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0udmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtcHR5TGFiZWw7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG59XG4iLCI8cCBjbGFzcz1cIm0tYi04XCIgKm5nSWY9XCJ0aXRsZVwiPlxuICA8aSAqbmdJZj1cImljb25cIiBbYzh5SWNvbl09XCJpY29uXCIgY2xhc3M9XCJ0ZXh0LWluZm8gbS1yLThcIj48L2k+XG4gIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuPC9wPlxuPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbFwiPlxuICA8bGlcbiAgICBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleFwiXG4gICAgKm5nRm9yPVwibGV0IHByb3Agb2YgcHJvcGVydGllczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogaWRlbnRpdHlcIlxuICAgIFtuZ0NsYXNzXT1cInsnc2VwYXJhdG9yLXRvcC1ib3R0b20nOiBpID09PSAwLFxuICAgICAgICAgICAgICAgICdzZXBhcmF0b3ItYm90dG9tJzogaSA+IDB9XCJcbiAgICA+XG4gICAgPGRpdlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnbS1sLTE2JzogaGFzR3JvdXAocHJvcCksXG4gICAgICAgIGxlZ2VuZDogcHJvcC50eXBlID09PSAnZ3JvdXAnLFxuICAgICAgICAnZm9ybS1ibG9jayc6IHByb3AudHlwZSA9PT0gJ2dyb3VwJyxcbiAgICAgICAgJ20tYi0wJzogcHJvcC50eXBlID09PSAnZ3JvdXAnLFxuICAgICAgICAnbS10LTQnOiBwcm9wLnR5cGUgPT09ICdncm91cCdcbiAgICAgIH1cIlxuICAgICAgY2xhc3M9XCJzbWFsbCB0ZXh0LW1lZGl1bSB0ZXh0LW5vd3JhcCBtLXItNFwiXG4gICAgPlxuICAgICAge3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJwcm9wLnR5cGVcIiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3N0cmluZydcIiBjbGFzcz1cIm0tbC1hdXRvXCI+e3sgcHJvcC52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgIDxhXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGluaydcIlxuICAgICAgICAoY2xpY2spPVwicHJvcC5hY3Rpb24oJGV2ZW50LCBwcm9wLnZhbHVlKVwiXG4gICAgICAgIGNsYXNzPVwibS1sLWF1dG8gcG9pbnRlciB0ZXh0LXRydW5jYXRlIG0tbC00XCJcbiAgICAgID57eyBwcm9wLnZhbHVlIH19PC9hPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm8gbS1sLTRcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9wVGFnIG9mIHByb3AudmFsdWVcIlxuICAgICAgICAgIChjbGljayk9XCJwcm9wLmFjdGlvbiAmJiBwcm9wLmFjdGlvbigkZXZlbnQsIHByb3BUYWcpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICBwb2ludGVyOiBwcm9wLmFjdGlvblxuICAgICAgICAgIH1cIlxuICAgICAgICA+e3sgcHJvcFRhZyB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvbGk+XG48L3VsPlxuIl19
|
|
@@ -3,7 +3,7 @@ import { FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { ActivatedRoute } from '@angular/router';
|
|
4
4
|
import { ɵdefineHiddenProp } from '@ngx-formly/core';
|
|
5
5
|
import { find, forOwn, get, mapValues, pick } from 'lodash-es';
|
|
6
|
-
import { BehaviorSubject, combineLatest, from, merge, of
|
|
6
|
+
import { BehaviorSubject, Subject, combineLatest, from, merge, of } from 'rxjs';
|
|
7
7
|
import { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators';
|
|
8
8
|
import { AlertService } from '../alert/alert.service';
|
|
9
9
|
import { Permissions, Status } from '../common/index';
|
|
@@ -96,7 +96,12 @@ export class ProviderConfigurationComponent {
|
|
|
96
96
|
: this.model;
|
|
97
97
|
forOwn(modelToSave, (value, key) => {
|
|
98
98
|
if (Array.isArray(value)) {
|
|
99
|
-
modelToSave[key] = value
|
|
99
|
+
modelToSave[key] = value
|
|
100
|
+
.filter(item => !!item || item === 0)
|
|
101
|
+
.map(item => (typeof item === 'string' ? item.trim() : item));
|
|
102
|
+
}
|
|
103
|
+
else if (typeof value === 'string') {
|
|
104
|
+
modelToSave[key] = value.trim();
|
|
100
105
|
}
|
|
101
106
|
});
|
|
102
107
|
try {
|
|
@@ -136,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
136
141
|
type: Component,
|
|
137
142
|
args: [{ selector: 'c8y-sms-gateway', providers: [ProviderConfigurationService, ProviderDefinitionsService], template: "<c8y-title>\n {{ (layout$ | async)?.pageTitle | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [label]=\"'Settings' | translate\"\n [icon]=\"'cog'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle !='Connectivity'\"\n [label]=\"'SMS provider' | translate\"\n [icon]=\"'cog'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle =='Connectivity'\"\n [label]=\"'Connectivity' | translate\"\n [icon]=\"'cog'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle =='Connectivity'\"\n [icon]=\"'cog'\"\n [label]=\"'SIM provider settings' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"row\">\n <div class=\"col-md-8 col-xs-12\">\n <form class=\"card card--fullpage\" (ngSubmit)=\"saveProviderConfiguration()\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ (layout$ | async)?.cardTitle | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <p *ngIf=\"!!(layout$ | async)?.description\" class=\"m-b-8\">\n {{ (layout$ | async)?.description | translate }}\n </p>\n <c8y-form-group>\n <label for=\"providerName\">{{ (layout$ | async)?.providerName | translate }}</label>\n <c8y-typeahead\n [disabled]=\"!permissions.hasAllRoles((layout$ | async)?.saveRoles || [])\"\n [ngModel]=\"selectedProvider$ | async\"\n [displayProperty]=\"'displayName'\"\n name=\"providerName\"\n placeholder=\"{{ (layout$ | async)?.providerNamePlaceholder | translate }}\"\n (onSearch)=\"providerInput$.next($event)\"\n [allowFreeEntries]=\"false\"\n [required]=\"true\"\n [container]=\"'body'\"\n >\n <c8y-li\n *ngFor=\"let provider of providers$ | async\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"changeProvider$.next(provider); providerInput$.next('')\"\n [active]=\"(selectedProvider$ | async) === provider\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight\n [text]=\"provider.displayName || '--'\"\n [pattern]=\"providerInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"(layout$ | async)?.providerNameNoMatchesHint | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <formly-form\n *ngIf=\"selectedProvider$ | async\"\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer separator\" *c8yIfAllowed=\"allRoles$ | async; allowAny\">\n <button\n *c8yIfAllowed=\"(layout$ | async)?.deleteRoles\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"deleteProviderConfiguration()\"\n [disabled]=\"\n !(configuration$ | async)?.provider && !(configuration$ | async)?.providerName\n \"\n title=\"{{ (layout$ | async)?.deleteBtnLabel | translate }}\"\n >\n {{ (layout$ | async)?.deleteBtnLabel | translate }}\n </button>\n <button\n *c8yIfAllowed=\"(layout$ | async)?.saveRoles\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"form.invalid || form.pristine\"\n title=\"{{ (layout$ | async)?.saveBtnLabel | translate }}\"\n >\n {{ (layout$ | async)?.saveBtnLabel | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n" }]
|
|
138
143
|
}], ctorParameters: () => [{ type: i1.Permissions }, { type: i2.ActivatedRoute }, { type: i3.ModalService }, { type: i4.AlertService }, { type: i5.ProviderDefinitionsService }, { type: i6.ProviderConfigurationService }, { type: i7.C8yJSONSchema }] });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24vcHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24vcHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUF3QyxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPdEQsT0FBTyxFQUFFLDRCQUE0QixF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Q0FBQyxNQUFNLENBQUMsc0NBQXNDO2FBQzNELENBQ0YsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQWlDO1FBQzdELE9BQU8sU0FBUyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7OEdBOUtVLDhCQUE4QjtrR0FBOUIsOEJBQThCLDBDQUY5QixDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDLDBCQ3hCdkUsKytIQXdHQTs7MkZEOUVhLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSxpQkFBaUIsYUFFaEIsQ0FBQyw0QkFBNEIsRUFBRSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSVJlc3VsdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgybVkZWZpbmVIaWRkZW5Qcm9wIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBmaW5kLCBmb3JPd24sIGdldCwgbWFwVmFsdWVzLCBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMsIFN0YXR1cyB9IGZyb20gJy4uL2NvbW1vbi9pbmRleCc7XG5pbXBvcnQgeyBDOHlKU09OU2NoZW1hIH0gZnJvbSAnLi4vZHluYW1pYy1mb3Jtcy9qc29uLXNjaGVtYS9jOHktanNvbi1zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIER5bmFtaWNQcm92aWRlckNvbmZpZyxcbiAgRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnXG59IGZyb20gJy4vbW9kZWwvZHluYW1pYy1wcm92aWRlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgUHJvdmlkZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbC9wcm92aWRlci1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFByb3ZpZGVyUHJvcGVydGllcyB9IGZyb20gJy4vbW9kZWwvcHJvdmlkZXItcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQcm92aWRlckRlZmluaXRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9wcm92aWRlci1kZWZpbml0aW9ucy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNtcy1nYXRld2F5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlLCBQcm92aWRlckRlZmluaXRpb25zU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJDb25maWd1cmF0aW9uQ29tcG9uZW50IHtcbiAgbGF5b3V0JDogT2JzZXJ2YWJsZTxEeW5hbWljUHJvdmlkZXJMYXlvdXRDb25maWc+ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnBpcGUoXG4gICAgbWFwKChjb25maWc6IER5bmFtaWNQcm92aWRlckNvbmZpZykgPT4gY29uZmlnLmxheW91dCksXG4gICAgdGFwKChsYXlvdXQ6IER5bmFtaWNQcm92aWRlckxheW91dENvbmZpZykgPT4gKHRoaXMubGF5b3V0ID0gbGF5b3V0KSksXG4gICAgdGFwKChsYXlvdXQ6IER5bmFtaWNQcm92aWRlckxheW91dENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9ICF0aGlzLnBlcm1pc3Npb25zLmhhc0FsbFJvbGVzKGxheW91dC5zYXZlUm9sZXMgfHwgW10pO1xuICAgICAgdGhpcy5iZWZvcmVTYXZlSG9vayA9IGxheW91dC5iZWZvcmVTYXZlSG9vaztcbiAgICB9KVxuICApO1xuXG4gIGFsbFJvbGVzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPSB0aGlzLmxheW91dCQucGlwZShcbiAgICBtYXAoKGxheW91dDogRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnKSA9PiBbXG4gICAgICAuLi4obGF5b3V0LmRlbGV0ZVJvbGVzIHx8IFtdKSxcbiAgICAgIC4uLihsYXlvdXQuc2F2ZVJvbGVzIHx8IFtdKVxuICAgIF0pXG4gICk7XG5cbiAgcHJvdmlkZXJzJDogT2JzZXJ2YWJsZTxQcm92aWRlckRlZmluaXRpb25bXT47XG4gIHNlbGVjdGVkUHJvdmlkZXIkOiBPYnNlcnZhYmxlPFByb3ZpZGVyRGVmaW5pdGlvbj47XG4gIGNoYW5nZVByb3ZpZGVyJDogU3ViamVjdDxQcm92aWRlckRlZmluaXRpb24+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY29uZmlndXJhdGlvbiQ6IE9ic2VydmFibGU8UHJvdmlkZXJQcm9wZXJ0aWVzPjtcbiAgcHJvdmlkZXJJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgbW9kZWw6IFByb3ZpZGVyUHJvcGVydGllcztcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgIGZvcm1TdGF0ZToge1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVsb2FkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIHByaXZhdGUgdXBkYXRlZENvbmZpZ3VyYXRpb24kID0gbmV3IFN1YmplY3Q8UHJvdmlkZXJQcm9wZXJ0aWVzPigpO1xuICBwcml2YXRlIGxheW91dDogRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnO1xuICBwcml2YXRlIGJlZm9yZVNhdmVIb29rOiAoXG4gICAgbW9kZWw6IFByb3ZpZGVyUHJvcGVydGllcyxcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW11cbiAgKSA9PiBQcm9taXNlPFByb3ZpZGVyUHJvcGVydGllcz4gfCBQcm92aWRlclByb3BlcnRpZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm92aWRlckRlZmluaXRpb25zU2VydmljZTogUHJvdmlkZXJEZWZpbml0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUganNvbnNjaGVtYTogQzh5SlNPTlNjaGVtYVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgYWxsUHJvdmlkZXJzJDogT2JzZXJ2YWJsZTxQcm92aWRlckRlZmluaXRpb25bXT4gPSBmcm9tKFxuICAgICAgdGhpcy5wcm92aWRlckRlZmluaXRpb25zU2VydmljZS5saXN0KClcbiAgICApLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5kYXRhKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMucHJvdmlkZXJzJCA9IGNvbWJpbmVMYXRlc3QoYWxsUHJvdmlkZXJzJCwgdGhpcy5wcm92aWRlcklucHV0JCkucGlwZShcbiAgICAgIG1hcCgoW3Byb3ZpZGVycywgaW5wdXRdOiBbUHJvdmlkZXJEZWZpbml0aW9uW10sIHN0cmluZ10pID0+XG4gICAgICAgIGlucHV0XG4gICAgICAgICAgPyBwcm92aWRlcnMuZmlsdGVyKGVsID0+IGVsLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpbnB1dC50b0xvd2VyQ2FzZSgpKSA+PSAwKVxuICAgICAgICAgIDogcHJvdmlkZXJzXG4gICAgICApLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uJCA9IG1lcmdlKFxuICAgICAgdGhpcy51cGRhdGVkQ29uZmlndXJhdGlvbiQsXG4gICAgICB0aGlzLnJlbG9hZCQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgZnJvbSh0aGlzLnByb3ZpZGVyQ29uZmlndXJhdGlvblNlcnZpY2UuZGV0YWlsKCkpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZih7fSBhcyBhbnkpKSlcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcbiAgICAgIClcbiAgICApLnBpcGUobWFwKHRoaXMucmVtb3ZlRW5jcnlwdGVkVmFsdWVzKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFByb3ZpZGVyJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBhbGxQcm92aWRlcnMkLFxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uJCxcbiAgICAgIHRoaXMuY2hhbmdlUHJvdmlkZXIkXG4gICAgKS5waXBlKFxuICAgICAgdGFwKFxuICAgICAgICAoW18sIGNvbmZpZ3VyYXRpb24sIG5ld1Byb3ZpZGVyXTogW1xuICAgICAgICAgIFByb3ZpZGVyRGVmaW5pdGlvbltdLFxuICAgICAgICAgIFByb3ZpZGVyUHJvcGVydGllcyxcbiAgICAgICAgICBQcm92aWRlckRlZmluaXRpb25cbiAgICAgICAgXSkgPT5cbiAgICAgICAgICAodGhpcy5tb2RlbCA9IG5ld1Byb3ZpZGVyXG4gICAgICAgICAgICA/IHBpY2sodGhpcy5tb2RlbCwgJ3Ntcy5zZW5kZXJOYW1lJywgJ3Ntcy5zZW5kZXJBZGRyZXNzJylcbiAgICAgICAgICAgIDogY29uZmlndXJhdGlvbilcbiAgICAgICksXG4gICAgICBtYXAoXG4gICAgICAgIChbcHJvdmlkZXJzLCBjb25maWd1cmF0aW9uLCBuZXdQcm92aWRlcl06IFtcbiAgICAgICAgICBQcm92aWRlckRlZmluaXRpb25bXSxcbiAgICAgICAgICBQcm92aWRlclByb3BlcnRpZXMsXG4gICAgICAgICAgUHJvdmlkZXJEZWZpbml0aW9uXG4gICAgICAgIF0pID0+XG4gICAgICAgICAgbmV3UHJvdmlkZXIgfHxcbiAgICAgICAgICBmaW5kKFxuICAgICAgICAgICAgcHJvdmlkZXJzLFxuICAgICAgICAgICAgKHByb3ZpZGVyOiBQcm92aWRlckRlZmluaXRpb24pID0+IGdldChjb25maWd1cmF0aW9uLCAncHJvdmlkZXInKSA9PT0gcHJvdmlkZXIuaWRcbiAgICAgICAgICApXG4gICAgICApLFxuICAgICAgdGFwKChwcm92aWRlcjogUHJvdmlkZXJEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB0aGlzLmpzb25zY2hlbWEudG9GaWVsZENvbmZpZyhnZXQocHJvdmlkZXIsICdzY2hlbWEnKSk7XG4gICAgICAgICAgaWYgKGNvbmZpZy5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICBjb25maWcuZmllbGRHcm91cC5mb3JFYWNoKChmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgybVkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkQ29uZmlnLCAnX2tleVBhdGgnLCB7XG4gICAgICAgICAgICAgICAga2V5OiBmaWVsZENvbmZpZy5rZXksXG4gICAgICAgICAgICAgICAgcGF0aDogW2ZpZWxkQ29uZmlnLmtleV1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZmllbGRDb25maWcuZXhwcmVzc2lvblByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6ICdmb3JtU3RhdGUuZGlzYWJsZWQnXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSBbY29uZmlnXTtcbiAgICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzYXZlUHJvdmlkZXJDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG1vZGVsVG9TYXZlOiBQcm92aWRlclByb3BlcnRpZXMgPSAhIXRoaXMuYmVmb3JlU2F2ZUhvb2tcbiAgICAgID8gYXdhaXQgdGhpcy5iZWZvcmVTYXZlSG9vayh0aGlzLm1vZGVsLCB0aGlzLmZpZWxkcylcbiAgICAgIDogdGhpcy5tb2RlbDtcblxuICAgIGZvck93bihtb2RlbFRvU2F2ZSwgKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgbW9kZWxUb1NhdmVba2V5XSA9IHZhbHVlLmZpbHRlcihpdGVtID0+ICEhaXRlbSB8fCBpdGVtID09PSAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXM6IElSZXN1bHQ8UHJvdmlkZXJQcm9wZXJ0aWVzPiA9IGF3YWl0IHRoaXMucHJvdmlkZXJDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGUoXG4gICAgICAgIG1vZGVsVG9TYXZlXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VQcm92aWRlciQubmV4dChudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlZENvbmZpZ3VyYXRpb24kLm5leHQocmVzLmRhdGEpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmxheW91dC5jb25maWd1cmF0aW9uVXBkYXRlZFN1Y2Nlc3NNc2cpO1xuICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlUHJvdmlkZXJDb25maWd1cmF0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICB0aGlzLmxheW91dC5kZWxldGVDb25maWd1cmF0aW9uTW9kYWxUaXRsZSxcbiAgICAgICAgdGhpcy5sYXlvdXQuZGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsQm9keSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAge1xuICAgICAgICAgIG9rOiB0aGlzLmxheW91dC5kZWxldGVDb25maWd1cmF0aW9uTW9kYWxPa0J0bkxhYmVsLFxuICAgICAgICAgIGNhbmNlbDogdGhpcy5sYXlvdXQuZGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsQ2FuY2VsQnRuTGFiZWxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXJDb25maWd1cmF0aW9uU2VydmljZS5kZWxldGUoKTtcbiAgICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKHRoaXMubGF5b3V0LmNvbmZpZ3VyYXRpb25EZWxldGVkU3VjY2Vzc01zZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUVuY3J5cHRlZFZhbHVlcyhjb25maWd1cmF0aW9uOiBQcm92aWRlclByb3BlcnRpZXMpOiBQcm92aWRlclByb3BlcnRpZXMge1xuICAgIHJldHVybiBtYXBWYWx1ZXMoY29uZmlndXJhdGlvbiwgdmFsdWUgPT4gKHZhbHVlID09PSAnPDxFbmNyeXB0ZWQ+PicgPyB1bmRlZmluZWQgOiB2YWx1ZSkpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAobGF5b3V0JCB8IGFzeW5jKT8ucGFnZVRpdGxlIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtsYWJlbF09XCInU2V0dGluZ3MnIHwgdHJhbnNsYXRlXCJcbiAgICBbaWNvbl09XCInY29nJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtICpuZ0lmPVwiKGxheW91dCQgfCBhc3luYyk/LnBhZ2VUaXRsZSAhPSdDb25uZWN0aXZpdHknXCJcbiAgICBbbGFiZWxdPVwiJ1NNUyBwcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgIFtpY29uXT1cIidjb2cnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gKm5nSWY9XCIobGF5b3V0JCB8IGFzeW5jKT8ucGFnZVRpdGxlID09J0Nvbm5lY3Rpdml0eSdcIlxuICAgIFtsYWJlbF09XCInQ29ubmVjdGl2aXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSAqbmdJZj1cIihsYXlvdXQkIHwgYXN5bmMpPy5wYWdlVGl0bGUgPT0nQ29ubmVjdGl2aXR5J1wiXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICAgIFtsYWJlbF09XCInU0lNIHByb3ZpZGVyIHNldHRpbmdzJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBjb2wteHMtMTJcIj5cbiAgICA8Zm9ybSBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2VcIiAobmdTdWJtaXQpPVwic2F2ZVByb3ZpZGVyQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAge3sgKGxheW91dCQgfCBhc3luYyk/LmNhcmRUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgICAgIDxwICpuZ0lmPVwiISEobGF5b3V0JCB8IGFzeW5jKT8uZGVzY3JpcHRpb25cIiBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgICB7eyAobGF5b3V0JCB8IGFzeW5jKT8uZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb3ZpZGVyTmFtZVwiPnt7IChsYXlvdXQkIHwgYXN5bmMpPy5wcm92aWRlck5hbWUgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGM4eS10eXBlYWhlYWRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwZXJtaXNzaW9ucy5oYXNBbGxSb2xlcygobGF5b3V0JCB8IGFzeW5jKT8uc2F2ZVJvbGVzIHx8IFtdKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkUHJvdmlkZXIkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidkaXNwbGF5TmFtZSdcIlxuICAgICAgICAgICAgICBuYW1lPVwicHJvdmlkZXJOYW1lXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAobGF5b3V0JCB8IGFzeW5jKT8ucHJvdmlkZXJOYW1lUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwicHJvdmlkZXJJbnB1dCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2FsbG93RnJlZUVudHJpZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1saVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwcm92aWRlcnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQcm92aWRlciQubmV4dChwcm92aWRlcik7IHByb3ZpZGVySW5wdXQkLm5leHQoJycpXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIihzZWxlY3RlZFByb3ZpZGVyJCB8IGFzeW5jKSA9PT0gcHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwicHJvdmlkZXIuZGlzcGxheU5hbWUgfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJwcm92aWRlcklucHV0JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJub3RFeGlzdGluZ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKGxheW91dCQgfCBhc3luYyk/LnByb3ZpZGVyTmFtZU5vTWF0Y2hlc0hpbnQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGZvcm1seS1mb3JtXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUHJvdmlkZXIkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgPjwvZm9ybWx5LWZvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yXCIgKmM4eUlmQWxsb3dlZD1cImFsbFJvbGVzJCB8IGFzeW5jOyBhbGxvd0FueVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKmM4eUlmQWxsb3dlZD1cIihsYXlvdXQkIHwgYXN5bmMpPy5kZWxldGVSb2xlc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVQcm92aWRlckNvbmZpZ3VyYXRpb24oKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgIShjb25maWd1cmF0aW9uJCB8IGFzeW5jKT8ucHJvdmlkZXIgJiYgIShjb25maWd1cmF0aW9uJCB8IGFzeW5jKT8ucHJvdmlkZXJOYW1lXG4gICAgICAgICAgXCJcbiAgICAgICAgICB0aXRsZT1cInt7IChsYXlvdXQkIHwgYXN5bmMpPy5kZWxldGVCdG5MYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAobGF5b3V0JCB8IGFzeW5jKT8uZGVsZXRlQnRuTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqYzh5SWZBbGxvd2VkPVwiKGxheW91dCQgfCBhc3luYyk/LnNhdmVSb2xlc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgZm9ybS5wcmlzdGluZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAobGF5b3V0JCB8IGFzeW5jKT8uc2F2ZUJ0bkxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IChsYXlvdXQkIHwgYXN5bmMpPy5zYXZlQnRuTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24vcHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24vcHJvdmlkZXItY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUF3QyxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPdEQsT0FBTyxFQUFFLDRCQUE0QixF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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSVJlc3VsdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgybVkZWZpbmVIaWRkZW5Qcm9wIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBmaW5kLCBmb3JPd24sIGdldCwgbWFwVmFsdWVzLCBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMsIFN0YXR1cyB9IGZyb20gJy4uL2NvbW1vbi9pbmRleCc7XG5pbXBvcnQgeyBDOHlKU09OU2NoZW1hIH0gZnJvbSAnLi4vZHluYW1pYy1mb3Jtcy9qc29uLXNjaGVtYS9jOHktanNvbi1zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIER5bmFtaWNQcm92aWRlckNvbmZpZyxcbiAgRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnXG59IGZyb20gJy4vbW9kZWwvZHluYW1pYy1wcm92aWRlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgUHJvdmlkZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbC9wcm92aWRlci1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFByb3ZpZGVyUHJvcGVydGllcyB9IGZyb20gJy4vbW9kZWwvcHJvdmlkZXItcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQcm92aWRlckRlZmluaXRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9wcm92aWRlci1kZWZpbml0aW9ucy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNtcy1nYXRld2F5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3ZpZGVyLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlLCBQcm92aWRlckRlZmluaXRpb25zU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJDb25maWd1cmF0aW9uQ29tcG9uZW50IHtcbiAgbGF5b3V0JDogT2JzZXJ2YWJsZTxEeW5hbWljUHJvdmlkZXJMYXlvdXRDb25maWc+ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnBpcGUoXG4gICAgbWFwKChjb25maWc6IER5bmFtaWNQcm92aWRlckNvbmZpZykgPT4gY29uZmlnLmxheW91dCksXG4gICAgdGFwKChsYXlvdXQ6IER5bmFtaWNQcm92aWRlckxheW91dENvbmZpZykgPT4gKHRoaXMubGF5b3V0ID0gbGF5b3V0KSksXG4gICAgdGFwKChsYXlvdXQ6IER5bmFtaWNQcm92aWRlckxheW91dENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9ICF0aGlzLnBlcm1pc3Npb25zLmhhc0FsbFJvbGVzKGxheW91dC5zYXZlUm9sZXMgfHwgW10pO1xuICAgICAgdGhpcy5iZWZvcmVTYXZlSG9vayA9IGxheW91dC5iZWZvcmVTYXZlSG9vaztcbiAgICB9KVxuICApO1xuXG4gIGFsbFJvbGVzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPSB0aGlzLmxheW91dCQucGlwZShcbiAgICBtYXAoKGxheW91dDogRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnKSA9PiBbXG4gICAgICAuLi4obGF5b3V0LmRlbGV0ZVJvbGVzIHx8IFtdKSxcbiAgICAgIC4uLihsYXlvdXQuc2F2ZVJvbGVzIHx8IFtdKVxuICAgIF0pXG4gICk7XG5cbiAgcHJvdmlkZXJzJDogT2JzZXJ2YWJsZTxQcm92aWRlckRlZmluaXRpb25bXT47XG4gIHNlbGVjdGVkUHJvdmlkZXIkOiBPYnNlcnZhYmxlPFByb3ZpZGVyRGVmaW5pdGlvbj47XG4gIGNoYW5nZVByb3ZpZGVyJDogU3ViamVjdDxQcm92aWRlckRlZmluaXRpb24+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY29uZmlndXJhdGlvbiQ6IE9ic2VydmFibGU8UHJvdmlkZXJQcm9wZXJ0aWVzPjtcbiAgcHJvdmlkZXJJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgbW9kZWw6IFByb3ZpZGVyUHJvcGVydGllcztcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgIGZvcm1TdGF0ZToge1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVsb2FkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIHByaXZhdGUgdXBkYXRlZENvbmZpZ3VyYXRpb24kID0gbmV3IFN1YmplY3Q8UHJvdmlkZXJQcm9wZXJ0aWVzPigpO1xuICBwcml2YXRlIGxheW91dDogRHluYW1pY1Byb3ZpZGVyTGF5b3V0Q29uZmlnO1xuICBwcml2YXRlIGJlZm9yZVNhdmVIb29rOiAoXG4gICAgbW9kZWw6IFByb3ZpZGVyUHJvcGVydGllcyxcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW11cbiAgKSA9PiBQcm9taXNlPFByb3ZpZGVyUHJvcGVydGllcz4gfCBQcm92aWRlclByb3BlcnRpZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm92aWRlckRlZmluaXRpb25zU2VydmljZTogUHJvdmlkZXJEZWZpbml0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBQcm92aWRlckNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUganNvbnNjaGVtYTogQzh5SlNPTlNjaGVtYVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgYWxsUHJvdmlkZXJzJDogT2JzZXJ2YWJsZTxQcm92aWRlckRlZmluaXRpb25bXT4gPSBmcm9tKFxuICAgICAgdGhpcy5wcm92aWRlckRlZmluaXRpb25zU2VydmljZS5saXN0KClcbiAgICApLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5kYXRhKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMucHJvdmlkZXJzJCA9IGNvbWJpbmVMYXRlc3QoYWxsUHJvdmlkZXJzJCwgdGhpcy5wcm92aWRlcklucHV0JCkucGlwZShcbiAgICAgIG1hcCgoW3Byb3ZpZGVycywgaW5wdXRdOiBbUHJvdmlkZXJEZWZpbml0aW9uW10sIHN0cmluZ10pID0+XG4gICAgICAgIGlucHV0XG4gICAgICAgICAgPyBwcm92aWRlcnMuZmlsdGVyKGVsID0+IGVsLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpbnB1dC50b0xvd2VyQ2FzZSgpKSA+PSAwKVxuICAgICAgICAgIDogcHJvdmlkZXJzXG4gICAgICApLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uJCA9IG1lcmdlKFxuICAgICAgdGhpcy51cGRhdGVkQ29uZmlndXJhdGlvbiQsXG4gICAgICB0aGlzLnJlbG9hZCQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgZnJvbSh0aGlzLnByb3ZpZGVyQ29uZmlndXJhdGlvblNlcnZpY2UuZGV0YWlsKCkpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZih7fSBhcyBhbnkpKSlcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcbiAgICAgIClcbiAgICApLnBpcGUobWFwKHRoaXMucmVtb3ZlRW5jcnlwdGVkVmFsdWVzKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFByb3ZpZGVyJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBhbGxQcm92aWRlcnMkLFxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uJCxcbiAgICAgIHRoaXMuY2hhbmdlUHJvdmlkZXIkXG4gICAgKS5waXBlKFxuICAgICAgdGFwKFxuICAgICAgICAoW18sIGNvbmZpZ3VyYXRpb24sIG5ld1Byb3ZpZGVyXTogW1xuICAgICAgICAgIFByb3ZpZGVyRGVmaW5pdGlvbltdLFxuICAgICAgICAgIFByb3ZpZGVyUHJvcGVydGllcyxcbiAgICAgICAgICBQcm92aWRlckRlZmluaXRpb25cbiAgICAgICAgXSkgPT5cbiAgICAgICAgICAodGhpcy5tb2RlbCA9IG5ld1Byb3ZpZGVyXG4gICAgICAgICAgICA/IHBpY2sodGhpcy5tb2RlbCwgJ3Ntcy5zZW5kZXJOYW1lJywgJ3Ntcy5zZW5kZXJBZGRyZXNzJylcbiAgICAgICAgICAgIDogY29uZmlndXJhdGlvbilcbiAgICAgICksXG4gICAgICBtYXAoXG4gICAgICAgIChbcHJvdmlkZXJzLCBjb25maWd1cmF0aW9uLCBuZXdQcm92aWRlcl06IFtcbiAgICAgICAgICBQcm92aWRlckRlZmluaXRpb25bXSxcbiAgICAgICAgICBQcm92aWRlclByb3BlcnRpZXMsXG4gICAgICAgICAgUHJvdmlkZXJEZWZpbml0aW9uXG4gICAgICAgIF0pID0+XG4gICAgICAgICAgbmV3UHJvdmlkZXIgfHxcbiAgICAgICAgICBmaW5kKFxuICAgICAgICAgICAgcHJvdmlkZXJzLFxuICAgICAgICAgICAgKHByb3ZpZGVyOiBQcm92aWRlckRlZmluaXRpb24pID0+IGdldChjb25maWd1cmF0aW9uLCAncHJvdmlkZXInKSA9PT0gcHJvdmlkZXIuaWRcbiAgICAgICAgICApXG4gICAgICApLFxuICAgICAgdGFwKChwcm92aWRlcjogUHJvdmlkZXJEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB0aGlzLmpzb25zY2hlbWEudG9GaWVsZENvbmZpZyhnZXQocHJvdmlkZXIsICdzY2hlbWEnKSk7XG4gICAgICAgICAgaWYgKGNvbmZpZy5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICBjb25maWcuZmllbGRHcm91cC5mb3JFYWNoKChmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgybVkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkQ29uZmlnLCAnX2tleVBhdGgnLCB7XG4gICAgICAgICAgICAgICAga2V5OiBmaWVsZENvbmZpZy5rZXksXG4gICAgICAgICAgICAgICAgcGF0aDogW2ZpZWxkQ29uZmlnLmtleV1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZmllbGRDb25maWcuZXhwcmVzc2lvblByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6ICdmb3JtU3RhdGUuZGlzYWJsZWQnXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSBbY29uZmlnXTtcbiAgICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzYXZlUHJvdmlkZXJDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG1vZGVsVG9TYXZlOiBQcm92aWRlclByb3BlcnRpZXMgPSAhIXRoaXMuYmVmb3JlU2F2ZUhvb2tcbiAgICAgID8gYXdhaXQgdGhpcy5iZWZvcmVTYXZlSG9vayh0aGlzLm1vZGVsLCB0aGlzLmZpZWxkcylcbiAgICAgIDogdGhpcy5tb2RlbDtcblxuICAgIGZvck93bihtb2RlbFRvU2F2ZSwgKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgbW9kZWxUb1NhdmVba2V5XSA9IHZhbHVlXG4gICAgICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSB8fCBpdGVtID09PSAwKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbS50cmltKCkgOiBpdGVtKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbW9kZWxUb1NhdmVba2V5XSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXM6IElSZXN1bHQ8UHJvdmlkZXJQcm9wZXJ0aWVzPiA9XG4gICAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXJDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGUobW9kZWxUb1NhdmUpO1xuICAgICAgdGhpcy5jaGFuZ2VQcm92aWRlciQubmV4dChudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlZENvbmZpZ3VyYXRpb24kLm5leHQocmVzLmRhdGEpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmxheW91dC5jb25maWd1cmF0aW9uVXBkYXRlZFN1Y2Nlc3NNc2cpO1xuICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlUHJvdmlkZXJDb25maWd1cmF0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICB0aGlzLmxheW91dC5kZWxldGVDb25maWd1cmF0aW9uTW9kYWxUaXRsZSxcbiAgICAgICAgdGhpcy5sYXlvdXQuZGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsQm9keSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAge1xuICAgICAgICAgIG9rOiB0aGlzLmxheW91dC5kZWxldGVDb25maWd1cmF0aW9uTW9kYWxPa0J0bkxhYmVsLFxuICAgICAgICAgIGNhbmNlbDogdGhpcy5sYXlvdXQuZGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsQ2FuY2VsQnRuTGFiZWxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXJDb25maWd1cmF0aW9uU2VydmljZS5kZWxldGUoKTtcbiAgICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKHRoaXMubGF5b3V0LmNvbmZpZ3VyYXRpb25EZWxldGVkU3VjY2Vzc01zZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUVuY3J5cHRlZFZhbHVlcyhjb25maWd1cmF0aW9uOiBQcm92aWRlclByb3BlcnRpZXMpOiBQcm92aWRlclByb3BlcnRpZXMge1xuICAgIHJldHVybiBtYXBWYWx1ZXMoY29uZmlndXJhdGlvbiwgdmFsdWUgPT4gKHZhbHVlID09PSAnPDxFbmNyeXB0ZWQ+PicgPyB1bmRlZmluZWQgOiB2YWx1ZSkpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAobGF5b3V0JCB8IGFzeW5jKT8ucGFnZVRpdGxlIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtsYWJlbF09XCInU2V0dGluZ3MnIHwgdHJhbnNsYXRlXCJcbiAgICBbaWNvbl09XCInY29nJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtICpuZ0lmPVwiKGxheW91dCQgfCBhc3luYyk/LnBhZ2VUaXRsZSAhPSdDb25uZWN0aXZpdHknXCJcbiAgICBbbGFiZWxdPVwiJ1NNUyBwcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgIFtpY29uXT1cIidjb2cnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gKm5nSWY9XCIobGF5b3V0JCB8IGFzeW5jKT8ucGFnZVRpdGxlID09J0Nvbm5lY3Rpdml0eSdcIlxuICAgIFtsYWJlbF09XCInQ29ubmVjdGl2aXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSAqbmdJZj1cIihsYXlvdXQkIHwgYXN5bmMpPy5wYWdlVGl0bGUgPT0nQ29ubmVjdGl2aXR5J1wiXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICAgIFtsYWJlbF09XCInU0lNIHByb3ZpZGVyIHNldHRpbmdzJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBjb2wteHMtMTJcIj5cbiAgICA8Zm9ybSBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2VcIiAobmdTdWJtaXQpPVwic2F2ZVByb3ZpZGVyQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAge3sgKGxheW91dCQgfCBhc3luYyk/LmNhcmRUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgICAgIDxwICpuZ0lmPVwiISEobGF5b3V0JCB8IGFzeW5jKT8uZGVzY3JpcHRpb25cIiBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgICB7eyAobGF5b3V0JCB8IGFzeW5jKT8uZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb3ZpZGVyTmFtZVwiPnt7IChsYXlvdXQkIHwgYXN5bmMpPy5wcm92aWRlck5hbWUgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGM4eS10eXBlYWhlYWRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwZXJtaXNzaW9ucy5oYXNBbGxSb2xlcygobGF5b3V0JCB8IGFzeW5jKT8uc2F2ZVJvbGVzIHx8IFtdKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkUHJvdmlkZXIkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidkaXNwbGF5TmFtZSdcIlxuICAgICAgICAgICAgICBuYW1lPVwicHJvdmlkZXJOYW1lXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAobGF5b3V0JCB8IGFzeW5jKT8ucHJvdmlkZXJOYW1lUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwicHJvdmlkZXJJbnB1dCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2FsbG93RnJlZUVudHJpZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1saVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwcm92aWRlcnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQcm92aWRlciQubmV4dChwcm92aWRlcik7IHByb3ZpZGVySW5wdXQkLm5leHQoJycpXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIihzZWxlY3RlZFByb3ZpZGVyJCB8IGFzeW5jKSA9PT0gcHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwicHJvdmlkZXIuZGlzcGxheU5hbWUgfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJwcm92aWRlcklucHV0JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJub3RFeGlzdGluZ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKGxheW91dCQgfCBhc3luYyk/LnByb3ZpZGVyTmFtZU5vTWF0Y2hlc0hpbnQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGZvcm1seS1mb3JtXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUHJvdmlkZXIkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgPjwvZm9ybWx5LWZvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yXCIgKmM4eUlmQWxsb3dlZD1cImFsbFJvbGVzJCB8IGFzeW5jOyBhbGxvd0FueVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKmM4eUlmQWxsb3dlZD1cIihsYXlvdXQkIHwgYXN5bmMpPy5kZWxldGVSb2xlc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVQcm92aWRlckNvbmZpZ3VyYXRpb24oKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgIShjb25maWd1cmF0aW9uJCB8IGFzeW5jKT8ucHJvdmlkZXIgJiYgIShjb25maWd1cmF0aW9uJCB8IGFzeW5jKT8ucHJvdmlkZXJOYW1lXG4gICAgICAgICAgXCJcbiAgICAgICAgICB0aXRsZT1cInt7IChsYXlvdXQkIHwgYXN5bmMpPy5kZWxldGVCdG5MYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAobGF5b3V0JCB8IGFzeW5jKT8uZGVsZXRlQnRuTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqYzh5SWZBbGxvd2VkPVwiKGxheW91dCQgfCBhc3luYyk/LnNhdmVSb2xlc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgZm9ybS5wcmlzdGluZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAobGF5b3V0JCB8IGFzeW5jKT8uc2F2ZUJ0bkxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IChsYXlvdXQkIHwgYXN5bmMpPy5zYXZlQnRuTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|