@sumaris-net/ngx-components 1.21.0-beta7 → 1.21.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/bundles/sumaris-net.ngx-components.umd.js +475 -1171
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +9 -0
- package/esm2015/public_api.js +3 -8
- package/esm2015/src/app/core/account/account.js +2 -2
- package/esm2015/src/app/core/auth/form/form-auth.js +4 -2
- package/esm2015/src/app/core/form/editor.class.js +7 -1
- package/esm2015/src/app/core/form/entity-editor-modal.class.js +17 -6
- package/esm2015/src/app/core/form/entity-editor.class.js +1 -1
- package/esm2015/src/app/core/form/form.class.js +62 -33
- package/esm2015/src/app/core/graphql/graphql.service.js +5 -3
- package/esm2015/src/app/core/icon/icon.component.js +2 -5
- package/esm2015/src/app/core/menu/menu.component.js +2 -2
- package/esm2015/src/app/core/services/local-settings.service.js +2 -2
- package/esm2015/src/app/core/table/table.class.js +18 -23
- package/esm2015/src/app/shared/functions.js +1 -60
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +5 -4
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +10 -7
- package/esm2015/src/app/shared/material/chips/material.chips.js +3 -2
- package/esm2015/src/app/shared/material/chips/testing/chips.test.js +3 -2
- package/esm2015/src/app/shared/material/datetime/material.date.js +3 -2
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +3 -2
- package/esm2015/src/app/shared/observables.js +13 -7
- package/esm2015/src/app/shared/pipes/arrays.pipe.js +1 -1
- package/esm2015/src/app/shared/pipes/form.pipes.js +4 -6
- package/esm2015/src/app/shared/pipes/highlight.pipe.js +4 -4
- package/esm2015/src/app/shared/pipes/string.pipes.js +7 -18
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +13 -1
- package/esm2015/src/app/shared/services.js +61 -0
- package/esm2015/src/app/shared/types.js +1 -1
- package/esm2015/src/app/social/social.errors.js +2 -5
- package/esm2015/src/app/social/social.module.js +15 -10
- package/esm2015/src/app/social/user-event/user-event.model.js +2 -58
- package/esm2015/src/app/social/user-event/user-event.service.js +167 -293
- package/esm2015/src/app/social/user-event/user-events.table.js +12 -17
- package/esm2015/sumaris-net.ngx-components.js +6 -8
- package/fesm2015/sumaris-net.ngx-components.js +387 -970
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +3 -2
- package/public_api.d.ts +2 -7
- package/src/app/core/auth/form/form-auth.d.ts +1 -1
- package/src/app/core/form/editor.class.d.ts +14 -1
- package/src/app/core/form/entity-editor-modal.class.d.ts +1 -0
- package/src/app/core/form/entity-editor.class.d.ts +6 -2
- package/src/app/core/form/form.class.d.ts +32 -19
- package/src/app/core/icon/icon.component.d.ts +4 -4
- package/src/app/core/table/table.class.d.ts +15 -14
- package/src/app/shared/functions.d.ts +0 -9
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -2
- package/src/app/shared/material/badge/badge-icon.test.d.ts +1 -1
- package/src/app/shared/observables.d.ts +1 -0
- package/src/app/shared/pipes/form.pipes.d.ts +1 -2
- package/src/app/shared/services/memory-entity-service.class.d.ts +6 -0
- package/src/app/shared/services.d.ts +9 -0
- package/src/app/shared/types.d.ts +0 -4
- package/src/app/social/social.errors.d.ts +0 -3
- package/src/app/social/social.module.d.ts +0 -8
- package/src/app/social/user-event/user-event.model.d.ts +6 -51
- package/src/app/social/user-event/user-event.service.d.ts +51 -79
- package/src/app/social/user-event/user-events.table.d.ts +6 -6
- package/src/assets/i18n/en-US.json +2 -15
- package/src/assets/i18n/en.json +2 -15
- package/src/assets/i18n/fr.json +1 -14
- package/src/theme/_ngx-components.scss +0 -7
- package/sumaris-net.ngx-components.d.ts +5 -7
- package/sumaris-net.ngx-components.metadata.json +1 -1
- package/esm2015/src/app/social/job/job.model.js +0 -24
- package/esm2015/src/app/social/job/job.module.js +0 -25
- package/esm2015/src/app/social/job/job.service.js +0 -53
- package/esm2015/src/app/social/job/progression/job-progression.component.js +0 -192
- package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
- package/esm2015/src/app/social/message/message.module.js +0 -25
- package/esm2015/src/app/social/user-event/notification/user-event-notification.component.js +0 -92
- package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -39
- package/esm2015/src/app/social/user-event/user-event.module.js +0 -28
- package/src/app/social/job/job.model.d.ts +0 -32
- package/src/app/social/job/job.module.d.ts +0 -2
- package/src/app/social/job/job.service.d.ts +0 -23
- package/src/app/social/job/progression/job-progression.component.d.ts +0 -43
- package/src/app/social/job/progression/job-progression.list.d.ts +0 -12
- package/src/app/social/message/message.module.d.ts +0 -2
- package/src/app/social/user-event/notification/user-event-notification.component.d.ts +0 -25
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -20
- package/src/app/social/user-event/user-event.module.d.ts +0 -2
|
@@ -70,7 +70,8 @@ export class GraphqlService extends StartableService {
|
|
|
70
70
|
console.debug('[graphql] Apply token authentication to headers');
|
|
71
71
|
this.connectionParams.authToken = token;
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
// Clean auth token
|
|
74
|
+
else if (this.connectionParams.authToken) {
|
|
74
75
|
console.debug('[graphql] Remove token authentication from headers');
|
|
75
76
|
delete this.connectionParams.authToken;
|
|
76
77
|
// Clear cache
|
|
@@ -82,7 +83,8 @@ export class GraphqlService extends StartableService {
|
|
|
82
83
|
console.debug('[graphql] Apply basic authentication to headers');
|
|
83
84
|
this.connectionParams.authBasic = basic;
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
+
// Clean auth basic
|
|
87
|
+
else if (this.connectionParams.authBasic) {
|
|
86
88
|
console.debug('[graphql] Remove basic authentication from headers');
|
|
87
89
|
delete this.connectionParams.authBasic;
|
|
88
90
|
// Clear cache
|
|
@@ -729,4 +731,4 @@ GraphqlService.ctorParameters = () => [
|
|
|
729
731
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
730
732
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
731
733
|
];
|
|
732
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2dyYXBocWwvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFzQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFFTCxZQUFZLEVBQ1osVUFBVSxFQUdWLGFBQWEsRUFFYixhQUFhLEVBSWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlHLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxVQUFVLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBVyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFHN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUMsUUFBUSxFQUFZLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQXdCM0QsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQWUscUJBQXFCLENBQUMsQ0FBQztBQU1qRyxNQUFNLE9BQU8sY0FBZSxTQUFRLGdCQUFtQztJQTBCckUsWUFDVSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsT0FBdUIsRUFDdkIsT0FBZ0IsRUFDaEIsYUFBNEIsRUFDTCxXQUFXLEVBQ2EsWUFBMEI7UUFFakYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQVR4QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDTCxnQkFBVyxHQUFYLFdBQVcsQ0FBQTtRQUNhLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBNUIzRSxxQkFBZ0IsR0FHcEIsRUFBRSxDQUFDO1FBRUMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQTBCdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztRQUV6RCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0I7YUFDekQsSUFBSSxDQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDaEIsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVKLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsY0FBYzthQUNoQixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDakMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDeEI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztJQUU1RSxDQUFDO0lBNUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFvQ0QsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDekM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztZQUNwRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDdkMsY0FBYztZQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLEtBQUssRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN6QzthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUN2QyxjQUFjO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0csV0FBVyxDQUFDLFNBQWtDOztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVLLEtBQUssQ0FBcUIsSUFLL0I7O1lBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLElBQUksR0FBRyxDQUFDO1lBQ1IsSUFBSTtnQkFDRixHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBMEI7b0JBQ3JELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSyxJQUFJLENBQUMsbUJBQW1DLElBQUksU0FBUztpQkFDeEYsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDO1lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNkLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQjtZQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztRQUNsQixDQUFDO0tBQUE7SUFFRCxhQUFhLENBQXFCLElBQTBCO1FBQzFELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQU87WUFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSyxJQUFJLENBQUMsbUJBQW1DLElBQUksU0FBUztZQUN2RiwyQkFBMkIsRUFBRSxJQUFJO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBcUIsUUFBd0IsRUFBRSxJQUEwQjtRQUM1RixPQUFPLFFBQVE7YUFDWixZQUFZO2FBQ1osSUFBSSxDQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3RCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQzNHLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUU7WUFDckIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFxQixJQUEwQjtRQUN2RCxNQUFNLFFBQVEsR0FBbUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVLLE1BQU0sQ0FBcUIsSUFBOEI7O1lBRTdELGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3ZFLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxvQkFBb0IsR0FBSSxJQUFJLENBQUMsZUFBa0QsQ0FBQztvQkFDdEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7aUJBQy9HO3FCQUNJO29CQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBb0IsQ0FBQztpQkFDckQ7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixNQUFNLEdBQUcsR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUMsQ0FBQztvQkFDNUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUM1QztvQkFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ2pCO2FBQ0Y7WUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUEwQjtnQkFDNUQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUF5QjtnQkFDbEQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFhO2FBQzNCLENBQUM7aUJBQ0MsSUFBSSxDQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3RCxLQUFLLEVBQUUsQ0FHUixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQjtZQUNELE9BQU8sR0FBRyxDQUFDLElBQVMsQ0FBQztRQUN2QixDQUFDO0tBQUE7SUFFRCxTQUFTLENBQXFCLElBTTdCLEVBQUUsS0FBZ0M7UUFFakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBSTtZQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWM7WUFDdkQsV0FBVyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVM7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLGtCQUNDLE9BQU8sRUFBRSxJQUFJLElBQ1YsS0FBSyxFQUNSO2FBQ0MsSUFBSSxDQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3RCxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFO1lBQ3JCLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFxQixLQUF1QixFQUN2QixJQU1DO1FBRXhDLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUM7UUFFcEQsSUFBSTtZQUNGLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQVMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFFbkYsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDckMseUJBQXlCO2dCQUN6QixJQUFJLHFCQUFRLElBQUksQ0FBRSxDQUFDO2dCQUVuQix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFNUUsa0JBQWtCO2dCQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM3QztnQkFFRCw2QkFBNkI7Z0JBQzdCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRTtvQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO2lCQUNqRjtnQkFFRCxrQkFBa0I7Z0JBQ2xCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDakMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO3dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDaEM7eUJBQ0k7d0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQ3RHO2lCQUNGO2dCQUVELEtBQUssQ0FBQyxVQUFVLENBQUM7b0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO2FBQ0o7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDdEc7U0FDRjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osV0FBVztZQUNYLDJJQUEySTtZQUMzSSxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDL0U7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQTJCLEtBQXVCLEVBQ3ZCLElBTUM7UUFFN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMscUJBQXFCO1FBRWxFLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUM7UUFFcEQsSUFBSTtZQUNGLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQVMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFFbkYsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDckMseUJBQXlCO2dCQUN6QixJQUFJLHFCQUFRLElBQUksQ0FBRSxDQUFDO2dCQUVuQiw2QkFBNkI7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUMvRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxKLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsZUFBZTtnQkFFN0Msa0JBQWtCO2dCQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBRXpFLGtCQUFrQjtnQkFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDN0M7Z0JBRUQsNkJBQTZCO2dCQUM3QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztpQkFDakY7Z0JBRUQsc0JBQXNCO2dCQUN0QixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ2pDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRTt3QkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO3FCQUM5Qzt5QkFDSTt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDdEc7aUJBQ0Y7Z0JBRUQsaUJBQWlCO2dCQUNqQixLQUFLLENBQUMsVUFBVSxDQUFDO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN6QixJQUFJO2lCQUNMLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3RHO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLFdBQVc7WUFDWCwySUFBMkk7WUFDM0ksSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQStCLEtBQXVCLEVBQ3ZCLElBSUM7UUFFdkQsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQztRQUVwRCxJQUFJO1lBQ0YsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBUyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztZQUVuRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNyQyx5QkFBeUI7Z0JBQ3pCLElBQUkscUJBQVEsSUFBSSxDQUFFLENBQUM7Z0JBRW5CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMseUJBQXlCO2dCQUV6RCxpQ0FBaUM7Z0JBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUUvQyxzQkFBc0I7Z0JBQ3RCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDakMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO3dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDaEM7eUJBQ0k7d0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQ3RHO2lCQUNGO2dCQUVELGlCQUFpQjtnQkFDakIsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsSUFBSTtpQkFDTCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckcsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixXQUFXO1lBQ1gsMklBQTJJO1lBQzNJLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMEJBQTBCLENBQStCLEtBQXVCLEVBQ3ZCLElBSUM7UUFFeEQsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQztRQUVwRCxJQUFJO1lBQ0YsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNyQyx5QkFBeUI7Z0JBQ3pCLElBQUkscUJBQVEsSUFBSSxDQUFFLENBQUM7Z0JBRW5CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRTNJLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMseUJBQXlCO2dCQUVuRSxxQkFBcUI7Z0JBQ3JCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFFOUIsb0JBQW9CO29CQUNwQixjQUFjO3lCQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzlDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUM7aUJBRXJDO2dCQUNELG9CQUFvQjtxQkFDZjtvQkFDSCxpQkFBaUI7b0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFFOUQsZ0NBQWdDO29CQUNoQyxjQUFjO3dCQUNaLCtCQUErQjt5QkFDOUIsT0FBTyxFQUFFO3dCQUNWLHdCQUF3Qjt5QkFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxtQkFBbUI7eUJBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXBDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRTt3QkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsd0JBQXdCO3FCQUM3RTt5QkFDSTt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDbkg7b0JBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDekIsSUFBSTtxQkFDTCxDQUFDLENBQUM7b0JBRUgsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO2lCQUM5QjthQUNGO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRyxPQUFPLENBQUMsQ0FBQzthQUNWO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLFdBQVc7WUFDWCwySUFBMkk7WUFDM0ksSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQ0MsS0FBdUIsRUFDdkIsSUFLQztRQUNsQixLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO1FBRXBELElBQUk7WUFDRixJQUFJLElBQUksR0FBUSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3JDLHlCQUF5QjtnQkFDekIsSUFBSSxxQkFBUSxJQUFJLENBQUUsQ0FBQztnQkFFbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBRWpGLDhCQUE4QjtnQkFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0Y7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3hFO2dCQUVELCtCQUErQjtnQkFDL0IsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDakQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO3dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDaEM7eUJBQ0k7d0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQ3RHO2lCQUNGO2dCQUVELEtBQUssQ0FBQyxVQUFVLENBQUM7b0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxnQkFBZ0I7YUFDekI7U0FDRjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osV0FBVztZQUNYLDJJQUEySTtZQUMzSSxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUU7SUFDSCxDQUFDO0lBRUssVUFBVSxDQUFDLE1BQTBCOztZQUN6QyxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBc0IsQ0FBQztZQUN0RCxJQUFJLE1BQU0sRUFBRTtnQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUV0QyxxQkFBcUI7Z0JBQ3JCLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFFM0IsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUMxRjtRQUNILENBQUM7S0FBQTtJQUVELG1CQUFtQixDQUFDLEtBQW9CO1FBQ3RDLElBQUksQ0FBQyxZQUFZLG1DQUFPLElBQUksQ0FBQyxZQUFZLEdBQUssS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELDZCQUE2QjtJQUViLFNBQVM7O1lBRXZCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUzQixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFFM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUk7Z0JBQUUsTUFBTSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUVsRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDaEUsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBRTFCLElBQUksQ0FBQyxRQUFRLG1DQUNSLElBQUksQ0FBQyxRQUFRLEtBQ2hCLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsSUFBSTtvQkFDVixTQUFTLEVBQUUsSUFBSTtvQkFDZixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUN4QyxFQUNELGFBQWEsRUFBRSxZQUFZLEVBQzNCLEdBQUcsRUFBRSxLQUFLLEdBQ1gsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLE9BQU8sR0FBOEIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakYsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7Z0JBRXJELGlCQUFpQjtnQkFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVoRCx5QkFBeUI7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUVyRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRTt3QkFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO3FCQUNoRTtvQkFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7d0JBQ25DLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztxQkFDaEU7b0JBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUU7eUJBQzlCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBRTFDLHFEQUFxRDtvQkFDckQsU0FBUyxDQUFDLFVBQVUsaUNBQ2YsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUN0QixFQUFDLE9BQU8sRUFBQyxFQUNaLENBQUM7b0JBRUgsOENBQThDO29CQUM5QyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsWUFBWTtnQkFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRXZELFFBQVE7Z0JBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUM7b0JBQzlCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDaEMsQ0FBQyxDQUFDO2dCQUVILHdCQUF3QjtnQkFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtvQkFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO29CQUN6RCxNQUFNLFlBQVksQ0FBQzt3QkFDakIsS0FBSzt3QkFDTCxPQUFPO3dCQUNQLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPO3dCQUM3RCxRQUFRLEVBQUUsSUFBSTt3QkFDZCxLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxhQUFnQyxDQUFDO2dCQUVyQyxtREFBbUQ7Z0JBQ25ELElBQUksMEJBQTBCLEVBQUU7b0JBQzlCLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzlDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDO3dCQUNwQyxPQUFPO3dCQUNQLHFCQUFxQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7d0JBQ2xELFFBQVEsRUFBRSxJQUFJO3dCQUNkLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUMsQ0FBQztvQkFDSCw0QkFBNEI7b0JBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCO3lCQUNsRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2hCLGlEQUFpRDt3QkFDakQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFOzRCQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7NEJBQ2hFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt5QkFDbkI7d0JBQ0Qsb0JBQW9COzZCQUNmOzRCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQzs0QkFDaEUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUNsQjtvQkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNOLGFBQWEsR0FBRzt3QkFDZCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxRQUFRO3dCQUNSLFFBQVE7cUJBQ1QsQ0FBQztpQkFDSDtxQkFDSTtvQkFDSCxhQUFhLEdBQUc7d0JBQ2QsU0FBUzt3QkFDVCxRQUFRO3dCQUNSLFFBQVE7cUJBQ1QsQ0FBQztpQkFDSDtnQkFFRCxnQkFBZ0I7Z0JBQ2hCLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQztvQkFDeEIsS0FBSztvQkFDTCxJQUFJLEVBQ0YsVUFBVSxDQUFDLEtBQUs7b0JBQ2QsbUJBQW1CO29CQUNuQixtQkFBbUIsRUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFFOUIsVUFBVSxDQUFDLEtBQUs7b0JBQ2QsdUJBQXVCO29CQUN2Qix1QkFBdUIsRUFDdkIsTUFBTTtvQkFFTixpQkFBaUI7b0JBQ2pCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsU0FBUzt3QkFDVCxRQUFRO3dCQUNSLFFBQVE7cUJBQ1QsQ0FBQyxDQUNILENBQ0Y7b0JBQ0gsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7aUJBQ2hELENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDN0I7WUFFRCxxQ0FBcUM7WUFDckMsSUFBSSwwQkFBMEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtnQkFFL0QsSUFBSTtvQkFDRixNQUFNLHFCQUFxQixDQUFDO3dCQUMxQixZQUFZLEVBQUUsTUFBTTt3QkFDcEIsT0FBTzt3QkFDUCxLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDLENBQUM7aUJBQ0o7Z0JBQUMsT0FBTyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw0REFBNEQsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNoSDthQUNGO1lBRUQsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1lBRUYsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUN2RCxDQUFDO1lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVlLFFBQVE7O1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBQUE7SUFFZSxXQUFXLENBQUMsTUFBMEI7O1lBQ3BELE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBc0IsQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ3hCLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVPLGFBQWEsQ0FBSSxHQUFRLEVBQUUsWUFBa0I7UUFDbkQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sYUFBYSxDQUFJLEdBQVEsRUFBRSxZQUFrQjtRQUNuRCxJQUFJLEtBQUs7UUFDUCw2RkFBNkY7UUFDN0YsQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQ2pCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQ2hFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztlQUNqQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztlQUNwRixJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQy9ELENBQ0Y7WUFDRCxtREFBbUQ7ZUFDaEQsQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ3hGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2VBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztlQUNsQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUMzQyxHQUFHLENBQUM7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkYsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMscUJBQXFCLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUM1RyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQzNDLEtBQUssbUNBQU8sWUFBWSxLQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE9BQU8sRUFBRSxLQUFLO1lBQ2QsYUFBYSxFQUFFLGFBQWEsQ0FBQyxLQUFLO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsU0FBaUI7UUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTztnQkFDTCxJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQzthQUNuRCxDQUFDO1NBQ0g7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8seUJBQXlCLENBQUMsU0FBaUI7UUFFakQsaUNBQWlDO1FBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7UUFFRCxnQ0FBZ0M7UUFDaEMsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZO2dCQUNoQyxPQUFPLG9CQUFvQixDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDN0IsT0FBTyxpQkFBaUIsQ0FBQztZQUMzQixLQUFLLFVBQVUsQ0FBQyxxQkFBcUI7Z0JBQ25DLE9BQU8sNkJBQTZCLENBQUM7WUFDdkMsS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlO2dCQUNuQyxPQUFPLHVCQUF1QixDQUFDO1lBQ2pDLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0IsT0FBTyxtQkFBbUIsQ0FBQztZQUM3QixLQUFLLGdCQUFnQixDQUFDLGVBQWU7Z0JBQ25DLE9BQU8sdUJBQXVCLENBQUM7U0FDbEM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVE7UUFDekIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUMxQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzRSxJQUFJO2dCQUNGLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ3hCLHFGQUFxRjtxQkFDcEYsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7cUJBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNELE9BQU8sVUFBVSxFQUFFO2dCQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7UUFDRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7U0FDakY7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7O1lBcjFCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTVDUSxRQUFRO1lBMUJSLE1BQU07WUFnQ04sUUFBUTtZQWRRLGNBQWM7WUFHOUIsT0FBTztZQWdCUCxhQUFhOzRDQW1FakIsTUFBTSxTQUFDLFdBQVc7NENBQ2xCLFFBQVEsWUFBSSxNQUFNLFNBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwb2xsbywgRXh0cmFTdWJzY3JpcHRpb25PcHRpb25zLCBRdWVyeVJlZiB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFwb2xsb0NhY2hlLFxuICBBcG9sbG9DbGllbnQsXG4gIEFwb2xsb0xpbmssXG4gIEFwb2xsb1F1ZXJ5UmVzdWx0LFxuICBGZXRjaFBvbGljeSxcbiAgSW5NZW1vcnlDYWNoZSxcbiAgTXV0YXRpb25VcGRhdGVyRm4sXG4gIE5ldHdvcmtTdGF0dXMsXG4gIE9wZXJhdGlvblZhcmlhYmxlcyxcbiAgVHlwZVBvbGljaWVzLFxuICBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3lcbn0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvckNvZGVzLCBTZXJ2aWNlRXJyb3IgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25UeXBlLCBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJTb2NrZXRMaW5rIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay93cyc7XG5pbXBvcnQgeyBBcHBXZWJTb2NrZXQsIGNyZWF0ZVRyYWNrZXJMaW5rLCBpc011dGF0aW9uT3BlcmF0aW9uLCBpc1N1YnNjcmlwdGlvbk9wZXJhdGlvbiwgcmVzdG9yZVRyYWNrZWRRdWVyaWVzIH0gZnJvbSAnLi9ncmFwaHFsLnV0aWxzJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQgeyBSZXRyeUxpbmsgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9saW5rL3JldHJ5JztcbmltcG9ydCBRdWV1ZUxpbmsgZnJvbSAnYXBvbGxvLWxpbmstcXVldWUnO1xuaW1wb3J0IFNlcmlhbGl6aW5nTGluayBmcm9tICdhcG9sbG8tbGluay1zZXJpYWxpemUnO1xuaW1wb3J0IGxvZ2dlckxpbmsgZnJvbSAnYXBvbGxvLWxpbmstbG9nZ2VyJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCB0b051bWJlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgUmVzb2x2ZXJzIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEVtcHR5T2JqZWN0IH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvdHlwZXMnO1xuaW1wb3J0IHsgSHR0cExpbmssIE9wdGlvbnMgfSBmcm9tICdhcG9sbG8tYW5ndWxhci9odHRwJztcbmltcG9ydCB7IElvbmljU3RvcmFnZVdyYXBwZXIsIHBlcnNpc3RDYWNoZSwgUGVyc2lzdGVudFN0b3JhZ2UgfSBmcm9tICdhcG9sbG8zLWNhY2hlLXBlcnNpc3QnO1xuaW1wb3J0IHsgRXJyb3JQb2xpY3ksIE11dGF0aW9uQmFzZU9wdGlvbnMgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL3dhdGNoUXVlcnlPcHRpb25zJztcbmltcG9ydCB7IENhY2hlIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY2FjaGUvY29yZS90eXBlcy9DYWNoZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBhcmFtc09wdGlvbnMgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cy9kaXN0L2NsaWVudCc7XG5pbXBvcnQgeyBQcm9wZXJ0aWVzTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtpc01vYmlsZSwgaXNXaW5kb3dzfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBXYXRjaFF1ZXJ5T3B0aW9uczxWPiB7XG4gIHF1ZXJ5OiBhbnk7XG4gIHZhcmlhYmxlcz86IFY7XG4gIGVycm9yPzogU2VydmljZUVycm9yO1xuICBmZXRjaFBvbGljeT86IFdhdGNoUXVlcnlGZXRjaFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdXRhdGVRdWVyeU9wdGlvbnM8VCwgViA9IE9wZXJhdGlvblZhcmlhYmxlcz4gZXh0ZW5kcyBNdXRhdGlvbkJhc2VPcHRpb25zPFQsIFY+IHtcbiAgbXV0YXRpb246IGFueTtcbiAgdmFyaWFibGVzPzogVjtcbiAgZXJyb3I/OiBTZXJ2aWNlRXJyb3I7XG4gIGNvbnRleHQ/OiB7XG4gICAgc2VyaWFsaXphdGlvbktleT86IHN0cmluZztcbiAgICB0cmFja2VkPzogYm9vbGVhbjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICB9O1xuICBvcHRpbWlzdGljUmVzcG9uc2U/OiBUO1xuICBvZmZsaW5lUmVzcG9uc2U/OiBUIHwgKChjb250ZXh0OiBhbnkpID0+IFByb21pc2U8VD4pO1xuICB1cGRhdGU/OiBNdXRhdGlvblVwZGF0ZXJGbjxUPjtcbiAgZm9yY2VPZmZsaW5lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9HUkFQSFFMX1RZUEVfUE9MSUNJRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZVBvbGljaWVzPignZ3JhcGhxbFR5cGVQb2xpY2llcycpO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdyYXBocWxTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxBcG9sbG9DbGllbnQ8YW55Pj4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtTdGF0dXNDaGFuZ2VkJDogT2JzZXJ2YWJsZTxDb25uZWN0aW9uVHlwZT47XG5cbiAgcHJpdmF0ZSBodHRwUGFyYW1zOiBPcHRpb25zO1xuICBwcml2YXRlIHdzUGFyYW1zOiBXZWJTb2NrZXRMaW5rLkNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgY29ubmVjdGlvblBhcmFtczogQ29ubmVjdGlvblBhcmFtc09wdGlvbnMgJiB7XG4gICAgYXV0aFRva2VuPzogc3RyaW5nO1xuICAgIGF1dGhCYXNpYz86IHN0cmluZztcbiAgfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RmV0Y2hQb2xpY3k6IFdhdGNoUXVlcnlGZXRjaFBvbGljeTtcbiAgcHJpdmF0ZSBvbk5ldHdvcmtFcnJvciA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgY3VzdG9tRXJyb3JzOiBQcm9wZXJ0aWVzTWFwID0ge307XG5cbiAgZ2V0IGNsaWVudCgpOiBBcG9sbG9DbGllbnQ8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogQXBvbGxvQ2FjaGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0RmV0Y2hQb2xpY3koKTogV2F0Y2hRdWVyeUZldGNoUG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZldGNoUG9saWN5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBhcG9sbG86IEFwb2xsbyxcbiAgICBwcml2YXRlIGh0dHBMaW5rOiBIdHRwTGluayxcbiAgICBwcml2YXRlIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0dSQVBIUUxfVFlQRV9QT0xJQ0lFUykgcHJpdmF0ZSB0eXBlUG9saWNpZXM6IFR5cGVQb2xpY2llc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7IC8vIFdhaXQgbmV0d29ya1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICB0aGlzLl9kZWZhdWx0RmV0Y2hQb2xpY3kgPSBlbnZpcm9ubWVudC5hcG9sbG9GZXRjaFBvbGljeTtcblxuICAgIC8vIExpc3RlbiBuZXR3b3JrIHN0YXR1c1xuICAgIHRoaXMuX25ldHdvcmtTdGF0dXNDaGFuZ2VkJCA9IG5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICk7XG5cbiAgICAvLyBXaGVuIGdldHRpbmcgbmV0d29yayBlcnJvcjogdHJ5IHRvIHBpbmcgcGVlciwgYW5kIHRvZ2dsZSB0byBvZmZsaW5lXG4gICAgdGhpcy5vbk5ldHdvcmtFcnJvclxuICAgICAgLnBpcGUoXG4gICAgICAgIHRocm90dGxlVGltZSgzMDApLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5uZXR3b3JrLm9ubGluZSksXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMubmV0d29yay5jaGVja1BlZXJBbGl2ZSgpKSxcbiAgICAgICAgZmlsdGVyKGFsaXZlID0+ICFhbGl2ZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiB0cnVlfSkpO1xuXG4gIH1cblxuICBzZXRBdXRoVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgIGlmICh0b2tlbikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIEFwcGx5IHRva2VuIGF1dGhlbnRpY2F0aW9uIHRvIGhlYWRlcnMnKTtcbiAgICAgIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW4gPSB0b2tlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFJlbW92ZSB0b2tlbiBhdXRoZW50aWNhdGlvbiBmcm9tIGhlYWRlcnMnKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuO1xuICAgICAgLy8gQ2xlYXIgY2FjaGVcbiAgICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGhCYXNpYyhiYXNpYzogc3RyaW5nKSB7XG4gICAgaWYgKGJhc2ljKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gQXBwbHkgYmFzaWMgYXV0aGVudGljYXRpb24gdG8gaGVhZGVycycpO1xuICAgICAgdGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYyA9IGJhc2ljO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gUmVtb3ZlIGJhc2ljIGF1dGhlbnRpY2F0aW9uIGZyb20gaGVhZGVycycpO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoQmFzaWM7XG4gICAgICAvLyBDbGVhciBjYWNoZVxuICAgICAgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGFkZCBhIGZpZWxkIHJlc29sdmVyXG4gICAqICAoc2VlIGRvYzogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yZWFjdC9kYXRhL2xvY2FsLXN0YXRlLyNoYW5kbGluZy1jbGllbnQtZmllbGRzLXdpdGgtcmVzb2x2ZXJzKVxuICAgKlxuICAgKiBAcGFyYW0gcmVzb2x2ZXJzXG4gICAqL1xuICBhc3luYyBhZGRSZXNvbHZlcihyZXNvbHZlcnM6IFJlc29sdmVycyB8IFJlc29sdmVyc1tdKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLmFwb2xsby5jbGllbnQuYWRkUmVzb2x2ZXJzKHJlc29sdmVycyk7XG4gIH1cblxuICBhc3luYyBxdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IHtcbiAgICBxdWVyeTogYW55O1xuICAgIHZhcmlhYmxlcz86IFY7XG4gICAgZXJyb3I/OiBTZXJ2aWNlRXJyb3I7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnk8QXBvbGxvUXVlcnlSZXN1bHQ8VD4sIFY+KHtcbiAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzLmZldGNoUG9saWN5IHx8ICh0aGlzLl9kZWZhdWx0RmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXMgPSB0aGlzLnRvQXBvbGxvRXJyb3I8VD4oZXJyLCBvcHRzLmVycm9yKTtcbiAgICB9XG4gICAgaWYgKHJlcy5lcnJvcnMpIHtcbiAgICAgIHRocm93IHJlcy5lcnJvcnNbMF07XG4gICAgfVxuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIHdhdGNoUXVlcnlSZWY8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBXYXRjaFF1ZXJ5T3B0aW9uczxWPik6IFF1ZXJ5UmVmPFQsIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxULCBWPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0cy5mZXRjaFBvbGljeSB8fCAodGhpcy5fZGVmYXVsdEZldGNoUG9saWN5IGFzIEZldGNoUG9saWN5KSB8fCB1bmRlZmluZWQsXG4gICAgICBub3RpZnlPbk5ldHdvcmtTdGF0dXNDaGFuZ2U6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHF1ZXJ5UmVmVmFsdWVzQ2hhbmdlczxULCBWID0gRW1wdHlPYmplY3Q+KHF1ZXJ5UmVmOiBRdWVyeVJlZjxULCBWPiwgb3B0czogV2F0Y2hRdWVyeU9wdGlvbnM8Vj4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gcXVlcnlSZWZcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUubmV0d29ya1N0YXR1cyA9PT0gTmV0d29ya1N0YXR1cy5yZWFkeSB8fCB2YWx1ZS5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLmVycm9yKSxcbiAgICAgICAgbWFwKCh7ZGF0YSwgZXJyb3JzfSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgd2F0Y2hRdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IFdhdGNoUXVlcnlPcHRpb25zPFY+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcXVlcnlSZWY6IFF1ZXJ5UmVmPFQsIFY+ID0gdGhpcy53YXRjaFF1ZXJ5UmVmKG9wdHMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5UmVmVmFsdWVzQ2hhbmdlcyhxdWVyeVJlZiwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBtdXRhdGU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBNdXRhdGVRdWVyeU9wdGlvbnM8VCwgVj4pOiBQcm9taXNlPFQ+IHtcblxuICAgIC8vIElmIG9mZmxpbmUsIGNvbXB1dGUgYW4gb3B0aW1pc3RpYyByZXNwb25zZSBmb3IgdHJhY2tlZCBxdWVyaWVzXG4gICAgaWYgKChvcHRzLmZvcmNlT2ZmbGluZSB8fCB0aGlzLm5ldHdvcmsub2ZmbGluZSkgJiYgb3B0cy5vZmZsaW5lUmVzcG9uc2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5vZmZsaW5lUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cy5jb250ZXh0ID0gb3B0cy5jb250ZXh0IHx8IHt9O1xuICAgICAgICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2VGbiA9IChvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyAoKGNvbnRleHQ6IGFueSkgPT4gUHJvbWlzZTxUPikpO1xuICAgICAgICBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSA9IGF3YWl0IG9wdGltaXN0aWNSZXNwb25zZUZuKG9wdHMuY29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFtvZmZsaW5lXSBVc2luZyBhbiBvcHRpbWlzdGljIHJlc3BvbnNlOiAnLCBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0cy5vcHRpbWlzdGljUmVzcG9uc2UgPSBvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyBUO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtkYXRhOiBvcHRzLm9wdGltaXN0aWNSZXNwb25zZX07XG4gICAgICAgIGlmIChvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG8ubXV0YXRlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+LCBWPih7XG4gICAgICBtdXRhdGlvbjogb3B0cy5tdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBjb250ZXh0OiBvcHRzLmNvbnRleHQsXG4gICAgICBvcHRpbWlzdGljUmVzcG9uc2U6IG9wdHMub3B0aW1pc3RpY1Jlc3BvbnNlIGFzIGFueSxcbiAgICAgIHVwZGF0ZTogb3B0cy51cGRhdGUgYXMgYW55XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICAvLyBUbyBkZWJ1ZywgaWYgbmVlZDpcbiAgICAgICAgLy90YXAoKHJlcykgPT4gKCFyZXMpICYmIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSBVbmtub3duIGVycm9yIGR1cmluZyBtdXRhdGlvbi4gQ2hlY2sgZXJyb3JzIGluIGNvbnNvbGUgKG1heSBiZSBhbiBpbnZhbGlkIGdlbmVyYXRlZCBjYWNoZSBpZCA/KScpKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMuZXJyb3JzKSkge1xuICAgICAgdGhyb3cgcmVzLmVycm9yc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5kYXRhIGFzIFQ7XG4gIH1cblxuICBzdWJzY3JpYmU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICB2YXJpYWJsZXM6IFY7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgICBlcnJvclBvbGljeT86IEVycm9yUG9saWN5O1xuICAgIGVycm9yPzogU2VydmljZUVycm9yO1xuICB9LCBleHRyYT86IEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLnN1YnNjcmliZTxUPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgJ25ldHdvcmstb25seScsXG4gICAgICBlcnJvclBvbGljeTogb3B0cyAmJiBvcHRzLmVycm9yUG9saWN5IHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXNcbiAgICB9LCB7XG4gICAgICB1c2Vab25lOiB0cnVlLFxuICAgICAgLi4uZXh0cmFcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5vbkFwb2xsb0Vycm9yPFQ+KGVycm9yLCBvcHRzLmVycm9yKSksXG4gICAgICAgIG1hcCgoe2RhdGEsIGVycm9yc30pID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGluc2VydEludG9RdWVyeUNhY2hlPFQsIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0czogQ2FjaGUuUmVhZFF1ZXJ5T3B0aW9uczxWLCBhbnk+ICYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGbj86IChkMTogVCwgZDI6IFQpID0+IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuXG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhID0gY2FjaGUucmVhZFF1ZXJ5PGFueSwgVj4oe3F1ZXJ5OiBvcHRzLnF1ZXJ5LCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgLy8gQXBwZW5kIHRvIHJlc3VsdCBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCB7Li4ub3B0cy5kYXRhfV07XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0b3RhbFxuICAgICAgICBpZiAoaXNOb3ROaWwob3B0cy50b3RhbEZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNhY2hlOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hbnlUb1F1ZXJ5Q2FjaGU8VCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxzRm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Rm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG5cbiAgICBpZiAoIW9wdHMuZGF0YSB8fCAhb3B0cy5kYXRhLmxlbmd0aCkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIHByb2Nlc3NcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIC8vIEtlZXAgb25seSBub3QgZXhpc3RpbmcgcmVzXG4gICAgICAgIGNvbnN0IGVxdWFsc0ZuID0gb3B0cy5lcXVhbHNGbiB8fCAoKGQxLCBkMikgPT4gZDFbJ2lkJ10gPT09IGQyWydpZCddICYmIGQxWydlbnRpdHlOYW1lJ10gPT09IGQyWydlbnRpdHlOYW1lJ10pO1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IG9wdHMuZGF0YS5maWx0ZXIoaW5wdXRWYWx1ZSA9PiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLmZpbmRJbmRleChleGlzdGluZ1ZhbHVlID0+IGVxdWFsc0ZuKGlucHV0VmFsdWUsIGV4aXN0aW5nVmFsdWUpKSA9PT0gLTEpO1xuXG4gICAgICAgIGlmICghbmV3SXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIE5vIG5ldyB2YWx1ZVxuXG4gICAgICAgIC8vIEFwcGVuZCB0byBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCAuLi5uZXdJdGVtc107XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdG90YWxcbiAgICAgICAgaWYgKGlzTm90TmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdICs9IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIHRvIGNhY2hlXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2FjaGU6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIGNhY2hlLCBhbmQgcmV0dXJuIGlmIHJlbW92ZWQgb3Igbm90XG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZDxWID0gRW1wdHlPYmplY3QsIElEID0gbnVtYmVyPihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IElEOyAvLyBEbyBOT1QgdXNlICdpZCcsIGFzIGFscmVhZHkgdXNlZCBieSB0aGUgQXBvbGxvIEFQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtWydpZCddID09PSBvcHRzLmlkcyk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTsgLy8gU2tpcCAobm90aGluZyByZW1vdmVkKVxuXG4gICAgICAgIC8vIENvcHksIHRoZW4gcmVtb3ZlIGRlbGV0ZWQgaXRlbVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuICAgICAgICBjb25zdCBkZWxldGVkSXRlbSA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgY2FjaGUuZXZpY3Qoe2lkOiBjYWNoZS5pZGVudGlmeShkZWxldGVkSXRlbSl9KTtcblxuICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIHRvdGFsXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy50b3RhbEZpZWxkTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JpdGUgdG8gY2FjaGVcbiAgICAgICAgY2FjaGUud3JpdGVRdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlcyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSByZW1vdmluZyBmcm9tIGNhY2hlOiAnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaWRzIGZyb20gY2FjaGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVkXG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZHM8ViA9IEVtcHR5T2JqZWN0LCBJRCA9IG51bWJlcj4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkczogSURbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IG51bWJlciB7XG5cbiAgICBjYWNoZSA9IGNhY2hlIHx8IHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgICBvcHRzLmFycmF5RmllbGROYW1lID0gb3B0cy5hcnJheUZpZWxkTmFtZSB8fCAnZGF0YSc7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEluZGV4ZXMgPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnJlZHVjZSgocmVzLCBpdGVtLCBpbmRleCkgPT4gb3B0cy5pZHMuaW5jbHVkZXMoaXRlbVsnaWQnXSkgPyByZXMuY29uY2F0KGluZGV4KSA6IHJlcywgW10pO1xuXG4gICAgICAgIGlmIChkZWxldGVkSW5kZXhlcy5sZW5ndGggPD0gMCkgcmV0dXJuIDA7IC8vIFNraXAgKG5vdGhpbmcgcmVtb3ZlZClcblxuICAgICAgICAvLyBRdWVyeSBoYXMgTk8gdG90YWxcbiAgICAgICAgaWYgKGlzTmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG5cbiAgICAgICAgICAvLyBFdmljdCBlYWNoIG9iamVjdFxuICAgICAgICAgIGRlbGV0ZWRJbmRleGVzXG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV1baW5kZXhdKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGNhY2hlLmlkZW50aWZ5KGl0ZW0pKVxuICAgICAgICAgICAgLmZvckVhY2goaWQgPT4gY2FjaGUuZXZpY3Qoe2lkfSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVlcnkgaGFzIGEgdG90YWxcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXlcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIGZyb20gYXJyYXksIHRoZW4gZXZpY3RcbiAgICAgICAgICBkZWxldGVkSW5kZXhlc1xuICAgICAgICAgICAgLy8gUmV2ZXJzZTogdG8ga2VlcCB2YWxpZCBpbmRleFxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGFycmF5XG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXSlcbiAgICAgICAgICAgIC8vIEV2aWN0IGZyb20gY2FjaGVcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBjYWNoZS5pZGVudGlmeShpdGVtKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGlkID0+IGNhY2hlLmV2aWN0KHtpZH0pKTtcblxuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSBkZWxldGVkSW5kZXhlcy5sZW5ndGg7IC8vIFJlbW92ZSBkZWxldGlvbiBjb3VudFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgdGhlIHRvdGFsIGluIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZWRJbmRleGVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy5hcnJheUZpZWxkTmFtZSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgcmVtb3ZpbmcgZnJvbSBjYWNoZTogJywgZXJyKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRvUXVlcnlDYWNoZTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+LFxuICAgIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBUO1xuICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHNGbj86IChkMTogVCwgZDI6IFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZXF1YWxzRm4gPSBvcHRzLmVxdWFsc0ZuIHx8ICgoZDEsIGQyKSA9PiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGlmIGV4aXN0cywgb3IgaW5zZXJ0XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgodiA9PiBlcXVhbHNGbihvcHRzLmRhdGEsIHYpKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNsaWNlKCkuc3BsaWNlKGluZGV4LCAxLCBvcHRzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBbIC4uLmRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0sIG9wdHMuZGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnQgdG90YWwgKGlmIGNoYW5nZWQpXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBPSzogc3RvcCBoZXJlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSB1cGRhdGluZyBjYWNoZTogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKGNsaWVudD86IEFwb2xsb0NsaWVudDxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY2xpZW50ID0gKGNsaWVudCB8fCB0aGlzLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gQ2xlYW5pbmcgY2FjaGUuLi4gJyk7XG4gICAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBDbGVhcmluZyB0aGUgY2FjaGVcbiAgICAgIGF3YWl0IGNsaWVudC5jYWNoZS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtncmFwaHFsXSBDbGVhbmluZyBjYWNoZSBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQ3VzdG9tRXJyb3IoZXJyb3I6IFByb3BlcnRpZXNNYXApIHtcbiAgICB0aGlzLmN1c3RvbUVycm9ycyA9IHsuLi50aGlzLmN1c3RvbUVycm9ycywgLi4uZXJyb3J9O1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QXBvbGxvQ2xpZW50PGFueT4+IHtcblxuICAgIGF3YWl0IHRoaXMubmV0d29yay5yZWFkeSgpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RhcnRpbmcgZ3JhcGhxbC4uLicpO1xuICAgIGNvbnN0IG1vYmlsZSA9IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgY29uc3QgZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMgPSAhbW9iaWxlO1xuXG4gICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgIGlmICghcGVlcikgdGhyb3cgRXJyb3IoJ1tncmFwaHFsXSBNaXNzaW5nIHBlZXIuIFVuYWJsZSB0byBzdGFydCBncmFwaHFsIHNlcnZpY2UnKTtcblxuICAgIGNvbnN0IHVyaSA9IHBlZXIudXJsICsgJy9ncmFwaHFsJztcbiAgICBjb25zdCB3c1VyaSA9IHVyaS5yZXBsYWNlKC9eaHR0cChzKT86LywgJ3dzJDE6JykgKyAnL3dlYnNvY2tldCc7XG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gQmFzZSB1cmk6ICcgKyB1cmkpO1xuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFN1YnNjcmlwdGlvbiB1cmk6ICcgKyB3c1VyaSk7XG5cbiAgICB0aGlzLmh0dHBQYXJhbXMgPSB0aGlzLmh0dHBQYXJhbXMgfHwge307XG4gICAgdGhpcy5odHRwUGFyYW1zLnVyaSA9IHVyaTtcblxuICAgIHRoaXMud3NQYXJhbXMgPSB7XG4gICAgICAuLi50aGlzLndzUGFyYW1zLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsYXp5OiB0cnVlLFxuICAgICAgICByZWNvbm5lY3Q6IHRydWUsXG4gICAgICAgIGNvbm5lY3Rpb25QYXJhbXM6IHRoaXMuY29ubmVjdGlvblBhcmFtc1xuICAgICAgfSxcbiAgICAgIHdlYlNvY2tldEltcGw6IEFwcFdlYlNvY2tldCxcbiAgICAgIHVyaTogd3NVcmlcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgc3RvcmFnZSBjb25maWd1cmF0aW9uXG4gICAgY29uc3Qgc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2U8c3RyaW5nPiA9IG5ldyBJb25pY1N0b3JhZ2VXcmFwcGVyKHRoaXMuc3RvcmFnZSk7XG5cbiAgICBsZXQgY2xpZW50ID0gdGhpcy5hcG9sbG8uY2xpZW50O1xuICAgIGlmICghY2xpZW50KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbYXBvbGxvXSBDcmVhdGluZyBHcmFwaFFMIGNsaWVudC4uLicpO1xuXG4gICAgICAvLyBXZWJzb2NrZXQgbGlua1xuICAgICAgY29uc3Qgd3NMaW5rID0gbmV3IFdlYlNvY2tldExpbmsodGhpcy53c1BhcmFtcyk7XG5cbiAgICAgIC8vIFJldHJ5IHdoZW4gZmFpbGVkIGxpbmtcbiAgICAgIGNvbnN0IHJldHJ5TGluayA9IG5ldyBSZXRyeUxpbmsoKTtcbiAgICAgIGNvbnN0IGF1dGhMaW5rID0gbmV3IEFwb2xsb0xpbmsoKG9wZXJhdGlvbiwgZm9yd2FyZCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW4pIHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uLnB1c2goYHRva2VuICR7dGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhUb2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYykge1xuICAgICAgICAgIGF1dGhvcml6YXRpb24ucHVzaChgQmFzaWMgJHt0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgICAgIC5hcHBlbmQoJ0F1dGhvcml6YXRpb24nLCBhdXRob3JpemF0aW9uKTtcblxuICAgICAgICAvLyBVc2UgdGhlIHNldENvbnRleHQgbWV0aG9kIHRvIHNldCB0aGUgSFRUUCBoZWFkZXJzLlxuICAgICAgICBvcGVyYXRpb24uc2V0Q29udGV4dCh7XG4gICAgICAgICAgLi4ub3BlcmF0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICAuLi57aGVhZGVyc31cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgbmV4dCBsaW5rIGluIHRoZSBtaWRkbGV3YXJlIGNoYWluLlxuICAgICAgICByZXR1cm4gZm9yd2FyZChvcGVyYXRpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEh0dHAgbGlua1xuICAgICAgY29uc3QgaHR0cExpbmsgPSB0aGlzLmh0dHBMaW5rLmNyZWF0ZSh0aGlzLmh0dHBQYXJhbXMpO1xuXG4gICAgICAvLyBDYWNoZVxuICAgICAgY29uc3QgY2FjaGUgPSBuZXcgSW5NZW1vcnlDYWNoZSh7XG4gICAgICAgIHR5cGVQb2xpY2llczogdGhpcy50eXBlUG9saWNpZXNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY2FjaGUgcGVyc2lzdGVuY2VcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gU3RhcnRpbmcgcGVyc2lzdGVuY2UgY2FjaGUuLi4nKTtcbiAgICAgICAgYXdhaXQgcGVyc2lzdENhY2hlKHtcbiAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIHRyaWdnZXI6IHRoaXMucGxhdGZvcm0uaXMoJ2FuZHJvaWQnKSA/ICdiYWNrZ3JvdW5kJyA6ICd3cml0ZScsXG4gICAgICAgICAgZGVib3VuY2U6IDEwMDAsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtdXRhdGlvbkxpbmtzOiBBcnJheTxBcG9sbG9MaW5rPjtcblxuICAgICAgLy8gQWRkIHF1ZXVlIHRvIHN0b3JlIHRyYWNrZWQgcXVlcmllcywgd2hlbiBvZmZsaW5lXG4gICAgICBpZiAoZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXppbmdMaW5rID0gbmV3IFNlcmlhbGl6aW5nTGluaygpO1xuICAgICAgICBjb25zdCB0cmFja2VyTGluayA9IGNyZWF0ZVRyYWNrZXJMaW5rKHtcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIG9uTmV0d29ya1N0YXR1c0NoYW5nZTogdGhpcy5fbmV0d29ya1N0YXR1c0NoYW5nZWQkLFxuICAgICAgICAgIGRlYm91bmNlOiAxMDAwLFxuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBDcmVhdGluZyBhIG11dGF0aW9uIHF1ZXVlXG4gICAgICAgIGNvbnN0IHF1ZXVlTGluayA9IG5ldyBRdWV1ZUxpbmsoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrU3RhdHVzQ2hhbmdlZCRcbiAgICAgICAgICAuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvZmZsaW5lOiBzdGFydCBidWZmZXJpbmcgaW50byBxdWV1ZVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvZmZsaW5lIG1vZGU6IGVuYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvbmxpbmVcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvbmxpbmUgbW9kZTogZGlzYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICBtdXRhdGlvbkxpbmtzID0gW1xuICAgICAgICAgIGxvZ2dlckxpbmssXG4gICAgICAgICAgcXVldWVMaW5rLFxuICAgICAgICAgIHRyYWNrZXJMaW5rLFxuICAgICAgICAgIHF1ZXVlTGluayxcbiAgICAgICAgICBzZXJpYWxpemluZ0xpbmssXG4gICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbXV0YXRpb25MaW5rcyA9IFtcbiAgICAgICAgICByZXRyeUxpbmssXG4gICAgICAgICAgYXV0aExpbmssXG4gICAgICAgICAgaHR0cExpbmtcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIEFwb2xsb1xuICAgICAgY2xpZW50ID0gbmV3IEFwb2xsb0NsaWVudCh7XG4gICAgICAgIGNhY2hlLFxuICAgICAgICBsaW5rOlxuICAgICAgICAgIEFwb2xsb0xpbmsuc3BsaXQoXG4gICAgICAgICAgICAvLyBIYW5kbGUgbXV0YXRpb25zXG4gICAgICAgICAgICBpc011dGF0aW9uT3BlcmF0aW9uLFxuICAgICAgICAgICAgQXBvbGxvTGluay5mcm9tKG11dGF0aW9uTGlua3MpLFxuXG4gICAgICAgICAgICBBcG9sbG9MaW5rLnNwbGl0KFxuICAgICAgICAgICAgICAvLyBIYW5kbGUgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICBpc1N1YnNjcmlwdGlvbk9wZXJhdGlvbixcbiAgICAgICAgICAgICAgd3NMaW5rLFxuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBxdWVyaWVzXG4gICAgICAgICAgICAgIEFwb2xsb0xpbmsuZnJvbShbXG4gICAgICAgICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgY29ubmVjdFRvRGV2VG9vbHM6ICF0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFwb2xsby5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuXG4gICAgLy8gRW5hYmxlIHRyYWNrZWQgcXVlcmllcyBwZXJzaXN0ZW5jZVxuICAgIGlmIChlbmFibGVUcmFja011dGF0aW9uUXVlcmllcyAmJiB0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXN0b3JlVHJhY2tlZFF1ZXJpZXMoe1xuICAgICAgICAgIGFwb2xsb0NsaWVudDogY2xpZW50LFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEZhaWxlZCB0byByZXN0b3JlIHRyYWNrZWQgcXVlcmllcyBmcm9tIHN0b3JhZ2U6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIGZvciBuZXR3b3JrIHJlc3RhcnRcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5uZXR3b3JrLm9uKCdzdGFydCcsICgpID0+IHRoaXMucmVzdGFydCgpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNsZWFyIGNhY2hlIHJlcXVlc3QsIGZyb20gbmV0d29ya1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm5ldHdvcmsub24oJ3Jlc2V0Q2FjaGUnLCAoKSA9PiB0aGlzLmNsZWFyQ2FjaGUoKSlcbiAgICApO1xuXG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RhcnRpbmcgZ3JhcGhxbCBbT0tdJyk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBTdG9wcGluZyBncmFwaHFsIHNlcnZpY2UuLi4nKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0Q2xpZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzZXRDbGllbnQoY2xpZW50PzogQXBvbGxvQ2xpZW50PGFueT4pIHtcbiAgICBjbGllbnQgPSAoY2xpZW50IHx8IHRoaXMuYXBvbGxvLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFJlc2V0dGluZyBBcG9sbG8gY2xpZW50Li4uJyk7XG4gICAgY2xpZW50LnN0b3AoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBjbGllbnQuY2xlYXJTdG9yZSgpLFxuICAgICAgdGhpcy5jbGVhckNhY2hlKGNsaWVudClcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgb25BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogT2JzZXJ2YWJsZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiBvZih0aGlzLnRvQXBvbGxvRXJyb3IoZXJyLCBkZWZhdWx0RXJyb3IpKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogQXBvbGxvUXVlcnlSZXN1bHQ8VD4ge1xuICAgIGxldCBlcnJvciA9XG4gICAgICAvLyBJZiBuZXR3b3JrIGVycm9yOiB0cnkgdG8gY29udmVydCB0byBBcHAgKHJlYWQgYXMgSlNPTiksIG9yIGNyZWF0ZSBhbiBVTktOT1dOX05FVFdPUktfRVJST1JcbiAgICAgIChlcnIubmV0d29ya0Vycm9yICYmIChcbiAgICAgICAgICAoZXJyLm5ldHdvcmtFcnJvci5lcnJvciAmJiB0aGlzLnRvQXBwRXJyb3IoZXJyLm5ldHdvcmtFcnJvci5lcnJvcikpXG4gICAgICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5uZXR3b3JrRXJyb3IpXG4gICAgICAgICAgfHwgKGVyci5uZXR3b3JrRXJyb3IuZXJyb3IgJiYgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnIubmV0d29ya0Vycm9yLmVycm9yLnN0YXR1cykpXG4gICAgICAgICAgfHwgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUilcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLy8gSWYgZ3JhcGhRTDogdHJ5IHRvIGNvbnZlcnQgdGhlIGZpcnN0IGVycm9yIGZvdW5kXG4gICAgICB8fCAoZXJyLmdyYXBoUUxFcnJvcnMgJiYgZXJyLmdyYXBoUUxFcnJvcnMubGVuZ3RoICYmIHRoaXMudG9BcHBFcnJvcihlcnIuZ3JhcGhRTEVycm9yc1swXSkpXG4gICAgICB8fCB0aGlzLnRvQXBwRXJyb3IoZXJyKVxuICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5vcmlnaW5hbEVycm9yKVxuICAgICAgfHwgKGVyci5ncmFwaFFMRXJyb3JzICYmIGVyci5ncmFwaFFMRXJyb3JzWzBdKVxuICAgICAgfHwgZXJyO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSAnICsgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpLCBlcnJvci5zdGFjayB8fCAnJyk7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09IEVycm9yQ29kZXMuVU5LTk9XTl9ORVRXT1JLX0VSUk9SICYmIGVyci5uZXR3b3JrRXJyb3IgJiYgZXJyLm5ldHdvcmtFcnJvci5tZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZ3JhcGhxbF0gb3JpZ2luYWwgZXJyb3I6ICcgKyBlcnIubmV0d29ya0Vycm9yLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5vbk5ldHdvcmtFcnJvci5uZXh0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKCghZXJyb3IgfHwgIWVycm9yLmNvZGUpICYmIGRlZmF1bHRFcnJvcikge1xuICAgICAgZXJyb3IgPSB7Li4uZGVmYXVsdEVycm9yLCBkZXRhaWxzOiBlcnJvciwgc3RhY2s6IGVyci5zdGFja307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgZXJyb3JzOiBbZXJyb3JdLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBuZXR3b3JrU3RhdHVzOiBOZXR3b3JrU3RhdHVzLmVycm9yXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXBwRXJyb3JCeUNvZGUoZXJyb3JDb2RlOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZXJyb3JDb2RlLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0STE4bkVycm9yTWVzc2FnZUJ5Q29kZShlcnJvckNvZGU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICAvLyBsb29rIGluIHJlZ2lzdGVyZWQgZXJyb3IgY29kZXNcbiAgICBjb25zdCBjdXN0b21FcnJvck1lc3NhZ2UgPSB0aGlzLmN1c3RvbUVycm9yc1tlcnJvckNvZGVdO1xuICAgIGlmIChjdXN0b21FcnJvck1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBjdXN0b21FcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCwgc3dpdGNoIG9uIGVycm9yIGNvZGVcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRDpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTkFVVEhPUklaRUQnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkZPUkJJRERFTjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5GT1JCSURERU4nO1xuICAgICAgY2FzZSBFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTktOT1dOX05FVFdPUktfRVJST1InO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURTpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5CQURfVVBEQVRFX0RBVEUnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkRBVEFfTE9DS0VEOlxuICAgICAgICByZXR1cm4gJ0VSUk9SLkRBVEFfTE9DS0VEJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5CQURfQVBQX1ZFUlNJT046XG4gICAgICAgIHJldHVybiAnRVJST1IuQkFEX0FQUF9WRVJTSU9OJztcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0FwcEVycm9yKGVycjogYW55KTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZXJyb3IgPSBlcnI7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnRyaW0oKS5pbmRleE9mKCd7XCJjb2RlXCI6JykgPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShtZXNzYWdlXG4gICAgICAgICAgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBiZWZvcmUgcGFyc2luZyAoZS5nLiBTUUwgZXJyb3JzIGZyb20gYW4gT3JhY2xlIGRhdGFiYXNlKVxuICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnICcpXG4gICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgZXJyb3IgYXMgSlNPTjogJywgcGFyc2VFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnJvci5jb2RlKSB8fCBlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbn1cbiJdfQ==
|
|
734
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2dyYXBocWwvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFzQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFFTCxZQUFZLEVBQ1osVUFBVSxFQUdWLGFBQWEsRUFFYixhQUFhLEVBSWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlHLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxVQUFVLE1B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QkFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM5RDtTQUNGO1FBQ0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO1NBQ2pGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7OztZQXoxQkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUE1Q1EsUUFBUTtZQTFCUixNQUFNO1lBZ0NOLFFBQVE7WUFkUSxjQUFjO1lBRzlCLE9BQU87WUFnQlAsYUFBYTs0Q0FtRWpCLE1BQU0sU0FBQyxXQUFXOzRDQUNsQixRQUFRLFlBQUksTUFBTSxTQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcG9sbG8sIEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucywgUXVlcnlSZWYgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge1xuICBBcG9sbG9DYWNoZSxcbiAgQXBvbGxvQ2xpZW50LFxuICBBcG9sbG9MaW5rLFxuICBBcG9sbG9RdWVyeVJlc3VsdCxcbiAgRmV0Y2hQb2xpY3ksXG4gIEluTWVtb3J5Q2FjaGUsXG4gIE11dGF0aW9uVXBkYXRlckZuLFxuICBOZXR3b3JrU3RhdHVzLFxuICBPcGVyYXRpb25WYXJpYWJsZXMsXG4gIFR5cGVQb2xpY2llcyxcbiAgV2F0Y2hRdWVyeUZldGNoUG9saWN5XG59IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2RlcywgU2VydmljZUVycm9yIH0gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uVHlwZSwgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViU29ja2V0TGluayB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvd3MnO1xuaW1wb3J0IHsgQXBwV2ViU29ja2V0LCBjcmVhdGVUcmFja2VyTGluaywgaXNNdXRhdGlvbk9wZXJhdGlvbiwgaXNTdWJzY3JpcHRpb25PcGVyYXRpb24sIHJlc3RvcmVUcmFja2VkUXVlcmllcyB9IGZyb20gJy4vZ3JhcGhxbC51dGlscyc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UnO1xuaW1wb3J0IHsgUmV0cnlMaW5rIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9yZXRyeSc7XG5pbXBvcnQgUXVldWVMaW5rIGZyb20gJ2Fwb2xsby1saW5rLXF1ZXVlJztcbmltcG9ydCBTZXJpYWxpemluZ0xpbmsgZnJvbSAnYXBvbGxvLWxpbmstc2VyaWFsaXplJztcbmltcG9ydCBsb2dnZXJMaW5rIGZyb20gJ2Fwb2xsby1saW5rLWxvZ2dlcic7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEVudGl0eVV0aWxzLCBJRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFJlc29sdmVycyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBFbXB0eU9iamVjdCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL3R5cGVzJztcbmltcG9ydCB7IEh0dHBMaW5rLCBPcHRpb25zIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBJb25pY1N0b3JhZ2VXcmFwcGVyLCBwZXJzaXN0Q2FjaGUsIFBlcnNpc3RlbnRTdG9yYWdlIH0gZnJvbSAnYXBvbGxvMy1jYWNoZS1wZXJzaXN0JztcbmltcG9ydCB7IEVycm9yUG9saWN5LCBNdXRhdGlvbkJhc2VPcHRpb25zIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZS93YXRjaFF1ZXJ5T3B0aW9ucyc7XG5pbXBvcnQgeyBDYWNoZSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NhY2hlL2NvcmUvdHlwZXMvQ2FjaGUnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgQ3J5cHRvU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25QYXJhbXNPcHRpb25zIH0gZnJvbSAnc3Vic2NyaXB0aW9ucy10cmFuc3BvcnQtd3MvZGlzdC9jbGllbnQnO1xuaW1wb3J0IHsgUHJvcGVydGllc01hcCB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNNb2JpbGUsIGlzV2luZG93c30gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hRdWVyeU9wdGlvbnM8Vj4ge1xuICBxdWVyeTogYW55O1xuICB2YXJpYWJsZXM/OiBWO1xuICBlcnJvcj86IFNlcnZpY2VFcnJvcjtcbiAgZmV0Y2hQb2xpY3k/OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3k7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YXRlUXVlcnlPcHRpb25zPFQsIFYgPSBPcGVyYXRpb25WYXJpYWJsZXM+IGV4dGVuZHMgTXV0YXRpb25CYXNlT3B0aW9uczxULCBWPiB7XG4gIG11dGF0aW9uOiBhbnk7XG4gIHZhcmlhYmxlcz86IFY7XG4gIGVycm9yPzogU2VydmljZUVycm9yO1xuICBjb250ZXh0Pzoge1xuICAgIHNlcmlhbGl6YXRpb25LZXk/OiBzdHJpbmc7XG4gICAgdHJhY2tlZD86IGJvb2xlYW47XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgfTtcbiAgb3B0aW1pc3RpY1Jlc3BvbnNlPzogVDtcbiAgb2ZmbGluZVJlc3BvbnNlPzogVCB8ICgoY29udGV4dDogYW55KSA9PiBQcm9taXNlPFQ+KTtcbiAgdXBkYXRlPzogTXV0YXRpb25VcGRhdGVyRm48VD47XG4gIGZvcmNlT2ZmbGluZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfR1JBUEhRTF9UWVBFX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPFR5cGVQb2xpY2llcz4oJ2dyYXBocWxUeXBlUG9saWNpZXMnKTtcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHcmFwaHFsU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8QXBvbGxvQ2xpZW50PGFueT4+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrU3RhdHVzQ2hhbmdlZCQ6IE9ic2VydmFibGU8Q29ubmVjdGlvblR5cGU+O1xuXG4gIHByaXZhdGUgaHR0cFBhcmFtczogT3B0aW9ucztcbiAgcHJpdmF0ZSB3c1BhcmFtczogV2ViU29ja2V0TGluay5Db25maWd1cmF0aW9uO1xuICBwcml2YXRlIGNvbm5lY3Rpb25QYXJhbXM6IENvbm5lY3Rpb25QYXJhbXNPcHRpb25zICYge1xuICAgIGF1dGhUb2tlbj86IHN0cmluZztcbiAgICBhdXRoQmFzaWM/OiBzdHJpbmc7XG4gIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZldGNoUG9saWN5OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3k7XG4gIHByaXZhdGUgb25OZXR3b3JrRXJyb3IgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIGN1c3RvbUVycm9yczogUHJvcGVydGllc01hcCA9IHt9O1xuXG4gIGdldCBjbGllbnQoKTogQXBvbGxvQ2xpZW50PGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IGNhY2hlKCk6IEFwb2xsb0NhY2hlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEZldGNoUG9saWN5KCk6IFdhdGNoUXVlcnlGZXRjaFBvbGljeSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGZXRjaFBvbGljeTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgYXBvbGxvOiBBcG9sbG8sXG4gICAgcHJpdmF0ZSBodHRwTGluazogSHR0cExpbmssXG4gICAgcHJpdmF0ZSBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9HUkFQSFFMX1RZUEVfUE9MSUNJRVMpIHByaXZhdGUgdHlwZVBvbGljaWVzOiBUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pOyAvLyBXYWl0IG5ldHdvcmtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fZGVmYXVsdEZldGNoUG9saWN5ID0gZW52aXJvbm1lbnQuYXBvbGxvRmV0Y2hQb2xpY3k7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBzdGF0dXNcbiAgICB0aGlzLl9uZXR3b3JrU3RhdHVzQ2hhbmdlZCQgPSBuZXR3b3JrLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApO1xuXG4gICAgLy8gV2hlbiBnZXR0aW5nIG5ldHdvcmsgZXJyb3I6IHRyeSB0byBwaW5nIHBlZXIsIGFuZCB0b2dnbGUgdG8gb2ZmbGluZVxuICAgIHRoaXMub25OZXR3b3JrRXJyb3JcbiAgICAgIC5waXBlKFxuICAgICAgICB0aHJvdHRsZVRpbWUoMzAwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMubmV0d29yay5vbmxpbmUpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLm5ldHdvcmsuY2hlY2tQZWVyQWxpdmUoKSksXG4gICAgICAgIGZpbHRlcihhbGl2ZSA9PiAhYWxpdmUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmV0d29yay5zZXRGb3JjZU9mZmxpbmUodHJ1ZSwge3Nob3dUb2FzdDogdHJ1ZX0pKTtcblxuICB9XG5cbiAgc2V0QXV0aFRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tncmFwaHFsXSBBcHBseSB0b2tlbiBhdXRoZW50aWNhdGlvbiB0byBoZWFkZXJzJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIC8vIENsZWFuIGF1dGggdG9rZW5cbiAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gUmVtb3ZlIHRva2VuIGF1dGhlbnRpY2F0aW9uIGZyb20gaGVhZGVycycpO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW47XG4gICAgICAvLyBDbGVhciBjYWNoZVxuICAgICAgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXV0aEJhc2ljKGJhc2ljOiBzdHJpbmcpIHtcbiAgICBpZiAoYmFzaWMpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tncmFwaHFsXSBBcHBseSBiYXNpYyBhdXRoZW50aWNhdGlvbiB0byBoZWFkZXJzJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljID0gYmFzaWM7XG4gICAgfVxuICAgIC8vIENsZWFuIGF1dGggYmFzaWNcbiAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gUmVtb3ZlIGJhc2ljIGF1dGhlbnRpY2F0aW9uIGZyb20gaGVhZGVycycpO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoQmFzaWM7XG4gICAgICAvLyBDbGVhciBjYWNoZVxuICAgICAgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGFkZCBhIGZpZWxkIHJlc29sdmVyXG4gICAqICAoc2VlIGRvYzogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yZWFjdC9kYXRhL2xvY2FsLXN0YXRlLyNoYW5kbGluZy1jbGllbnQtZmllbGRzLXdpdGgtcmVzb2x2ZXJzKVxuICAgKlxuICAgKiBAcGFyYW0gcmVzb2x2ZXJzXG4gICAqL1xuICBhc3luYyBhZGRSZXNvbHZlcihyZXNvbHZlcnM6IFJlc29sdmVycyB8IFJlc29sdmVyc1tdKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLmFwb2xsby5jbGllbnQuYWRkUmVzb2x2ZXJzKHJlc29sdmVycyk7XG4gIH1cblxuICBhc3luYyBxdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IHtcbiAgICBxdWVyeTogYW55O1xuICAgIHZhcmlhYmxlcz86IFY7XG4gICAgZXJyb3I/OiBTZXJ2aWNlRXJyb3I7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnk8QXBvbGxvUXVlcnlSZXN1bHQ8VD4sIFY+KHtcbiAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzLmZldGNoUG9saWN5IHx8ICh0aGlzLl9kZWZhdWx0RmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXMgPSB0aGlzLnRvQXBvbGxvRXJyb3I8VD4oZXJyLCBvcHRzLmVycm9yKTtcbiAgICB9XG4gICAgaWYgKHJlcy5lcnJvcnMpIHtcbiAgICAgIHRocm93IHJlcy5lcnJvcnNbMF07XG4gICAgfVxuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIHdhdGNoUXVlcnlSZWY8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBXYXRjaFF1ZXJ5T3B0aW9uczxWPik6IFF1ZXJ5UmVmPFQsIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxULCBWPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0cy5mZXRjaFBvbGljeSB8fCAodGhpcy5fZGVmYXVsdEZldGNoUG9saWN5IGFzIEZldGNoUG9saWN5KSB8fCB1bmRlZmluZWQsXG4gICAgICBub3RpZnlPbk5ldHdvcmtTdGF0dXNDaGFuZ2U6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHF1ZXJ5UmVmVmFsdWVzQ2hhbmdlczxULCBWID0gRW1wdHlPYmplY3Q+KHF1ZXJ5UmVmOiBRdWVyeVJlZjxULCBWPiwgb3B0czogV2F0Y2hRdWVyeU9wdGlvbnM8Vj4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gcXVlcnlSZWZcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUubmV0d29ya1N0YXR1cyA9PT0gTmV0d29ya1N0YXR1cy5yZWFkeSB8fCB2YWx1ZS5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLmVycm9yKSxcbiAgICAgICAgbWFwKCh7ZGF0YSwgZXJyb3JzfSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgd2F0Y2hRdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IFdhdGNoUXVlcnlPcHRpb25zPFY+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcXVlcnlSZWY6IFF1ZXJ5UmVmPFQsIFY+ID0gdGhpcy53YXRjaFF1ZXJ5UmVmKG9wdHMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5UmVmVmFsdWVzQ2hhbmdlcyhxdWVyeVJlZiwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBtdXRhdGU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBNdXRhdGVRdWVyeU9wdGlvbnM8VCwgVj4pOiBQcm9taXNlPFQ+IHtcblxuICAgIC8vIElmIG9mZmxpbmUsIGNvbXB1dGUgYW4gb3B0aW1pc3RpYyByZXNwb25zZSBmb3IgdHJhY2tlZCBxdWVyaWVzXG4gICAgaWYgKChvcHRzLmZvcmNlT2ZmbGluZSB8fCB0aGlzLm5ldHdvcmsub2ZmbGluZSkgJiYgb3B0cy5vZmZsaW5lUmVzcG9uc2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5vZmZsaW5lUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cy5jb250ZXh0ID0gb3B0cy5jb250ZXh0IHx8IHt9O1xuICAgICAgICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2VGbiA9IChvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyAoKGNvbnRleHQ6IGFueSkgPT4gUHJvbWlzZTxUPikpO1xuICAgICAgICBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSA9IGF3YWl0IG9wdGltaXN0aWNSZXNwb25zZUZuKG9wdHMuY29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFtvZmZsaW5lXSBVc2luZyBhbiBvcHRpbWlzdGljIHJlc3BvbnNlOiAnLCBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0cy5vcHRpbWlzdGljUmVzcG9uc2UgPSBvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyBUO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtkYXRhOiBvcHRzLm9wdGltaXN0aWNSZXNwb25zZX07XG4gICAgICAgIGlmIChvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG8ubXV0YXRlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+LCBWPih7XG4gICAgICBtdXRhdGlvbjogb3B0cy5tdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBjb250ZXh0OiBvcHRzLmNvbnRleHQsXG4gICAgICBvcHRpbWlzdGljUmVzcG9uc2U6IG9wdHMub3B0aW1pc3RpY1Jlc3BvbnNlIGFzIGFueSxcbiAgICAgIHVwZGF0ZTogb3B0cy51cGRhdGUgYXMgYW55XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICAvLyBUbyBkZWJ1ZywgaWYgbmVlZDpcbiAgICAgICAgLy90YXAoKHJlcykgPT4gKCFyZXMpICYmIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSBVbmtub3duIGVycm9yIGR1cmluZyBtdXRhdGlvbi4gQ2hlY2sgZXJyb3JzIGluIGNvbnNvbGUgKG1heSBiZSBhbiBpbnZhbGlkIGdlbmVyYXRlZCBjYWNoZSBpZCA/KScpKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMuZXJyb3JzKSkge1xuICAgICAgdGhyb3cgcmVzLmVycm9yc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5kYXRhIGFzIFQ7XG4gIH1cblxuICBzdWJzY3JpYmU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICB2YXJpYWJsZXM6IFY7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgICBlcnJvclBvbGljeT86IEVycm9yUG9saWN5O1xuICAgIGVycm9yPzogU2VydmljZUVycm9yO1xuICB9LCBleHRyYT86IEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLnN1YnNjcmliZTxUPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgJ25ldHdvcmstb25seScsXG4gICAgICBlcnJvclBvbGljeTogb3B0cyAmJiBvcHRzLmVycm9yUG9saWN5IHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXNcbiAgICB9LCB7XG4gICAgICB1c2Vab25lOiB0cnVlLFxuICAgICAgLi4uZXh0cmFcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5vbkFwb2xsb0Vycm9yPFQ+KGVycm9yLCBvcHRzLmVycm9yKSksXG4gICAgICAgIG1hcCgoe2RhdGEsIGVycm9yc30pID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGluc2VydEludG9RdWVyeUNhY2hlPFQsIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0czogQ2FjaGUuUmVhZFF1ZXJ5T3B0aW9uczxWLCBhbnk+ICYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGbj86IChkMTogVCwgZDI6IFQpID0+IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuXG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhID0gY2FjaGUucmVhZFF1ZXJ5PGFueSwgVj4oe3F1ZXJ5OiBvcHRzLnF1ZXJ5LCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgLy8gQXBwZW5kIHRvIHJlc3VsdCBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCB7Li4ub3B0cy5kYXRhfV07XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0b3RhbFxuICAgICAgICBpZiAoaXNOb3ROaWwob3B0cy50b3RhbEZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNhY2hlOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hbnlUb1F1ZXJ5Q2FjaGU8VCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxzRm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Rm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG5cbiAgICBpZiAoIW9wdHMuZGF0YSB8fCAhb3B0cy5kYXRhLmxlbmd0aCkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIHByb2Nlc3NcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIC8vIEtlZXAgb25seSBub3QgZXhpc3RpbmcgcmVzXG4gICAgICAgIGNvbnN0IGVxdWFsc0ZuID0gb3B0cy5lcXVhbHNGbiB8fCAoKGQxLCBkMikgPT4gZDFbJ2lkJ10gPT09IGQyWydpZCddICYmIGQxWydlbnRpdHlOYW1lJ10gPT09IGQyWydlbnRpdHlOYW1lJ10pO1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IG9wdHMuZGF0YS5maWx0ZXIoaW5wdXRWYWx1ZSA9PiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLmZpbmRJbmRleChleGlzdGluZ1ZhbHVlID0+IGVxdWFsc0ZuKGlucHV0VmFsdWUsIGV4aXN0aW5nVmFsdWUpKSA9PT0gLTEpO1xuXG4gICAgICAgIGlmICghbmV3SXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIE5vIG5ldyB2YWx1ZVxuXG4gICAgICAgIC8vIEFwcGVuZCB0byBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCAuLi5uZXdJdGVtc107XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdG90YWxcbiAgICAgICAgaWYgKGlzTm90TmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdICs9IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIHRvIGNhY2hlXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2FjaGU6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIGNhY2hlLCBhbmQgcmV0dXJuIGlmIHJlbW92ZWQgb3Igbm90XG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZDxWID0gRW1wdHlPYmplY3QsIElEID0gbnVtYmVyPihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IElEOyAvLyBEbyBOT1QgdXNlICdpZCcsIGFzIGFscmVhZHkgdXNlZCBieSB0aGUgQXBvbGxvIEFQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtWydpZCddID09PSBvcHRzLmlkcyk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTsgLy8gU2tpcCAobm90aGluZyByZW1vdmVkKVxuXG4gICAgICAgIC8vIENvcHksIHRoZW4gcmVtb3ZlIGRlbGV0ZWQgaXRlbVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuICAgICAgICBjb25zdCBkZWxldGVkSXRlbSA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgY2FjaGUuZXZpY3Qoe2lkOiBjYWNoZS5pZGVudGlmeShkZWxldGVkSXRlbSl9KTtcblxuICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIHRvdGFsXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy50b3RhbEZpZWxkTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JpdGUgdG8gY2FjaGVcbiAgICAgICAgY2FjaGUud3JpdGVRdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlcyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSByZW1vdmluZyBmcm9tIGNhY2hlOiAnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaWRzIGZyb20gY2FjaGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVkXG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZHM8ViA9IEVtcHR5T2JqZWN0LCBJRCA9IG51bWJlcj4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkczogSURbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IG51bWJlciB7XG5cbiAgICBjYWNoZSA9IGNhY2hlIHx8IHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgICBvcHRzLmFycmF5RmllbGROYW1lID0gb3B0cy5hcnJheUZpZWxkTmFtZSB8fCAnZGF0YSc7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEluZGV4ZXMgPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnJlZHVjZSgocmVzLCBpdGVtLCBpbmRleCkgPT4gb3B0cy5pZHMuaW5jbHVkZXMoaXRlbVsnaWQnXSkgPyByZXMuY29uY2F0KGluZGV4KSA6IHJlcywgW10pO1xuXG4gICAgICAgIGlmIChkZWxldGVkSW5kZXhlcy5sZW5ndGggPD0gMCkgcmV0dXJuIDA7IC8vIFNraXAgKG5vdGhpbmcgcmVtb3ZlZClcblxuICAgICAgICAvLyBRdWVyeSBoYXMgTk8gdG90YWxcbiAgICAgICAgaWYgKGlzTmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG5cbiAgICAgICAgICAvLyBFdmljdCBlYWNoIG9iamVjdFxuICAgICAgICAgIGRlbGV0ZWRJbmRleGVzXG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV1baW5kZXhdKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGNhY2hlLmlkZW50aWZ5KGl0ZW0pKVxuICAgICAgICAgICAgLmZvckVhY2goaWQgPT4gY2FjaGUuZXZpY3Qoe2lkfSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVlcnkgaGFzIGEgdG90YWxcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXlcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIGZyb20gYXJyYXksIHRoZW4gZXZpY3RcbiAgICAgICAgICBkZWxldGVkSW5kZXhlc1xuICAgICAgICAgICAgLy8gUmV2ZXJzZTogdG8ga2VlcCB2YWxpZCBpbmRleFxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGFycmF5XG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXSlcbiAgICAgICAgICAgIC8vIEV2aWN0IGZyb20gY2FjaGVcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBjYWNoZS5pZGVudGlmeShpdGVtKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGlkID0+IGNhY2hlLmV2aWN0KHtpZH0pKTtcblxuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSBkZWxldGVkSW5kZXhlcy5sZW5ndGg7IC8vIFJlbW92ZSBkZWxldGlvbiBjb3VudFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgdGhlIHRvdGFsIGluIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZWRJbmRleGVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy5hcnJheUZpZWxkTmFtZSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgcmVtb3ZpbmcgZnJvbSBjYWNoZTogJywgZXJyKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRvUXVlcnlDYWNoZTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+LFxuICAgIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBUO1xuICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHNGbj86IChkMTogVCwgZDI6IFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZXF1YWxzRm4gPSBvcHRzLmVxdWFsc0ZuIHx8ICgoZDEsIGQyKSA9PiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGlmIGV4aXN0cywgb3IgaW5zZXJ0XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgodiA9PiBlcXVhbHNGbihvcHRzLmRhdGEsIHYpKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNsaWNlKCkuc3BsaWNlKGluZGV4LCAxLCBvcHRzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBbIC4uLmRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0sIG9wdHMuZGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnQgdG90YWwgKGlmIGNoYW5nZWQpXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBPSzogc3RvcCBoZXJlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSB1cGRhdGluZyBjYWNoZTogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKGNsaWVudD86IEFwb2xsb0NsaWVudDxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY2xpZW50ID0gKGNsaWVudCB8fCB0aGlzLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gQ2xlYW5pbmcgY2FjaGUuLi4gJyk7XG4gICAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBDbGVhcmluZyB0aGUgY2FjaGVcbiAgICAgIGF3YWl0IGNsaWVudC5jYWNoZS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtncmFwaHFsXSBDbGVhbmluZyBjYWNoZSBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQ3VzdG9tRXJyb3IoZXJyb3I6IFByb3BlcnRpZXNNYXApIHtcbiAgICB0aGlzLmN1c3RvbUVycm9ycyA9IHsuLi50aGlzLmN1c3RvbUVycm9ycywgLi4uZXJyb3J9O1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QXBvbGxvQ2xpZW50PGFueT4+IHtcblxuICAgIGF3YWl0IHRoaXMubmV0d29yay5yZWFkeSgpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RhcnRpbmcgZ3JhcGhxbC4uLicpO1xuICAgIGNvbnN0IG1vYmlsZSA9IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgY29uc3QgZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMgPSAhbW9iaWxlO1xuXG4gICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgIGlmICghcGVlcikgdGhyb3cgRXJyb3IoJ1tncmFwaHFsXSBNaXNzaW5nIHBlZXIuIFVuYWJsZSB0byBzdGFydCBncmFwaHFsIHNlcnZpY2UnKTtcblxuICAgIGNvbnN0IHVyaSA9IHBlZXIudXJsICsgJy9ncmFwaHFsJztcbiAgICBjb25zdCB3c1VyaSA9IHVyaS5yZXBsYWNlKC9eaHR0cChzKT86LywgJ3dzJDE6JykgKyAnL3dlYnNvY2tldCc7XG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gQmFzZSB1cmk6ICcgKyB1cmkpO1xuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFN1YnNjcmlwdGlvbiB1cmk6ICcgKyB3c1VyaSk7XG5cbiAgICB0aGlzLmh0dHBQYXJhbXMgPSB0aGlzLmh0dHBQYXJhbXMgfHwge307XG4gICAgdGhpcy5odHRwUGFyYW1zLnVyaSA9IHVyaTtcblxuICAgIHRoaXMud3NQYXJhbXMgPSB7XG4gICAgICAuLi50aGlzLndzUGFyYW1zLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsYXp5OiB0cnVlLFxuICAgICAgICByZWNvbm5lY3Q6IHRydWUsXG4gICAgICAgIGNvbm5lY3Rpb25QYXJhbXM6IHRoaXMuY29ubmVjdGlvblBhcmFtc1xuICAgICAgfSxcbiAgICAgIHdlYlNvY2tldEltcGw6IEFwcFdlYlNvY2tldCxcbiAgICAgIHVyaTogd3NVcmlcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgc3RvcmFnZSBjb25maWd1cmF0aW9uXG4gICAgY29uc3Qgc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2U8c3RyaW5nPiA9IG5ldyBJb25pY1N0b3JhZ2VXcmFwcGVyKHRoaXMuc3RvcmFnZSk7XG5cbiAgICBsZXQgY2xpZW50ID0gdGhpcy5hcG9sbG8uY2xpZW50O1xuICAgIGlmICghY2xpZW50KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbYXBvbGxvXSBDcmVhdGluZyBHcmFwaFFMIGNsaWVudC4uLicpO1xuXG4gICAgICAvLyBXZWJzb2NrZXQgbGlua1xuICAgICAgY29uc3Qgd3NMaW5rID0gbmV3IFdlYlNvY2tldExpbmsodGhpcy53c1BhcmFtcyk7XG5cbiAgICAgIC8vIFJldHJ5IHdoZW4gZmFpbGVkIGxpbmtcbiAgICAgIGNvbnN0IHJldHJ5TGluayA9IG5ldyBSZXRyeUxpbmsoKTtcbiAgICAgIGNvbnN0IGF1dGhMaW5rID0gbmV3IEFwb2xsb0xpbmsoKG9wZXJhdGlvbiwgZm9yd2FyZCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW4pIHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uLnB1c2goYHRva2VuICR7dGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhUb2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYykge1xuICAgICAgICAgIGF1dGhvcml6YXRpb24ucHVzaChgQmFzaWMgJHt0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgICAgIC5hcHBlbmQoJ0F1dGhvcml6YXRpb24nLCBhdXRob3JpemF0aW9uKTtcblxuICAgICAgICAvLyBVc2UgdGhlIHNldENvbnRleHQgbWV0aG9kIHRvIHNldCB0aGUgSFRUUCBoZWFkZXJzLlxuICAgICAgICBvcGVyYXRpb24uc2V0Q29udGV4dCh7XG4gICAgICAgICAgLi4ub3BlcmF0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICAuLi57aGVhZGVyc31cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgbmV4dCBsaW5rIGluIHRoZSBtaWRkbGV3YXJlIGNoYWluLlxuICAgICAgICByZXR1cm4gZm9yd2FyZChvcGVyYXRpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEh0dHAgbGlua1xuICAgICAgY29uc3QgaHR0cExpbmsgPSB0aGlzLmh0dHBMaW5rLmNyZWF0ZSh0aGlzLmh0dHBQYXJhbXMpO1xuXG4gICAgICAvLyBDYWNoZVxuICAgICAgY29uc3QgY2FjaGUgPSBuZXcgSW5NZW1vcnlDYWNoZSh7XG4gICAgICAgIHR5cGVQb2xpY2llczogdGhpcy50eXBlUG9saWNpZXNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY2FjaGUgcGVyc2lzdGVuY2VcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gU3RhcnRpbmcgcGVyc2lzdGVuY2UgY2FjaGUuLi4nKTtcbiAgICAgICAgYXdhaXQgcGVyc2lzdENhY2hlKHtcbiAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIHRyaWdnZXI6IHRoaXMucGxhdGZvcm0uaXMoJ2FuZHJvaWQnKSA/ICdiYWNrZ3JvdW5kJyA6ICd3cml0ZScsXG4gICAgICAgICAgZGVib3VuY2U6IDEwMDAsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtdXRhdGlvbkxpbmtzOiBBcnJheTxBcG9sbG9MaW5rPjtcblxuICAgICAgLy8gQWRkIHF1ZXVlIHRvIHN0b3JlIHRyYWNrZWQgcXVlcmllcywgd2hlbiBvZmZsaW5lXG4gICAgICBpZiAoZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXppbmdMaW5rID0gbmV3IFNlcmlhbGl6aW5nTGluaygpO1xuICAgICAgICBjb25zdCB0cmFja2VyTGluayA9IGNyZWF0ZVRyYWNrZXJMaW5rKHtcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIG9uTmV0d29ya1N0YXR1c0NoYW5nZTogdGhpcy5fbmV0d29ya1N0YXR1c0NoYW5nZWQkLFxuICAgICAgICAgIGRlYm91bmNlOiAxMDAwLFxuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBDcmVhdGluZyBhIG11dGF0aW9uIHF1ZXVlXG4gICAgICAgIGNvbnN0IHF1ZXVlTGluayA9IG5ldyBRdWV1ZUxpbmsoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrU3RhdHVzQ2hhbmdlZCRcbiAgICAgICAgICAuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvZmZsaW5lOiBzdGFydCBidWZmZXJpbmcgaW50byBxdWV1ZVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvZmZsaW5lIG1vZGU6IGVuYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvbmxpbmVcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvbmxpbmUgbW9kZTogZGlzYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICBtdXRhdGlvbkxpbmtzID0gW1xuICAgICAgICAgIGxvZ2dlckxpbmssXG4gICAgICAgICAgcXVldWVMaW5rLFxuICAgICAgICAgIHRyYWNrZXJMaW5rLFxuICAgICAgICAgIHF1ZXVlTGluayxcbiAgICAgICAgICBzZXJpYWxpemluZ0xpbmssXG4gICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbXV0YXRpb25MaW5rcyA9IFtcbiAgICAgICAgICByZXRyeUxpbmssXG4gICAgICAgICAgYXV0aExpbmssXG4gICAgICAgICAgaHR0cExpbmtcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIEFwb2xsb1xuICAgICAgY2xpZW50ID0gbmV3IEFwb2xsb0NsaWVudCh7XG4gICAgICAgIGNhY2hlLFxuICAgICAgICBsaW5rOlxuICAgICAgICAgIEFwb2xsb0xpbmsuc3BsaXQoXG4gICAgICAgICAgICAvLyBIYW5kbGUgbXV0YXRpb25zXG4gICAgICAgICAgICBpc011dGF0aW9uT3BlcmF0aW9uLFxuICAgICAgICAgICAgQXBvbGxvTGluay5mcm9tKG11dGF0aW9uTGlua3MpLFxuXG4gICAgICAgICAgICBBcG9sbG9MaW5rLnNwbGl0KFxuICAgICAgICAgICAgICAvLyBIYW5kbGUgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICBpc1N1YnNjcmlwdGlvbk9wZXJhdGlvbixcbiAgICAgICAgICAgICAgd3NMaW5rLFxuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBxdWVyaWVzXG4gICAgICAgICAgICAgIEFwb2xsb0xpbmsuZnJvbShbXG4gICAgICAgICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgY29ubmVjdFRvRGV2VG9vbHM6ICF0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFwb2xsby5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuXG4gICAgLy8gRW5hYmxlIHRyYWNrZWQgcXVlcmllcyBwZXJzaXN0ZW5jZVxuICAgIGlmIChlbmFibGVUcmFja011dGF0aW9uUXVlcmllcyAmJiB0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXN0b3JlVHJhY2tlZFF1ZXJpZXMoe1xuICAgICAgICAgIGFwb2xsb0NsaWVudDogY2xpZW50LFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEZhaWxlZCB0byByZXN0b3JlIHRyYWNrZWQgcXVlcmllcyBmcm9tIHN0b3JhZ2U6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIGZvciBuZXR3b3JrIHJlc3RhcnRcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5uZXR3b3JrLm9uKCdzdGFydCcsICgpID0+IHRoaXMucmVzdGFydCgpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNsZWFyIGNhY2hlIHJlcXVlc3QsIGZyb20gbmV0d29ya1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm5ldHdvcmsub24oJ3Jlc2V0Q2FjaGUnLCAoKSA9PiB0aGlzLmNsZWFyQ2FjaGUoKSlcbiAgICApO1xuXG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RhcnRpbmcgZ3JhcGhxbCBbT0tdJyk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBTdG9wcGluZyBncmFwaHFsIHNlcnZpY2UuLi4nKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0Q2xpZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzZXRDbGllbnQoY2xpZW50PzogQXBvbGxvQ2xpZW50PGFueT4pIHtcbiAgICBjbGllbnQgPSAoY2xpZW50IHx8IHRoaXMuYXBvbGxvLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFJlc2V0dGluZyBBcG9sbG8gY2xpZW50Li4uJyk7XG4gICAgY2xpZW50LnN0b3AoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBjbGllbnQuY2xlYXJTdG9yZSgpLFxuICAgICAgdGhpcy5jbGVhckNhY2hlKGNsaWVudClcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgb25BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogT2JzZXJ2YWJsZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiBvZih0aGlzLnRvQXBvbGxvRXJyb3IoZXJyLCBkZWZhdWx0RXJyb3IpKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogQXBvbGxvUXVlcnlSZXN1bHQ8VD4ge1xuICAgIGxldCBlcnJvciA9XG4gICAgICAvLyBJZiBuZXR3b3JrIGVycm9yOiB0cnkgdG8gY29udmVydCB0byBBcHAgKHJlYWQgYXMgSlNPTiksIG9yIGNyZWF0ZSBhbiBVTktOT1dOX05FVFdPUktfRVJST1JcbiAgICAgIChlcnIubmV0d29ya0Vycm9yICYmIChcbiAgICAgICAgICAoZXJyLm5ldHdvcmtFcnJvci5lcnJvciAmJiB0aGlzLnRvQXBwRXJyb3IoZXJyLm5ldHdvcmtFcnJvci5lcnJvcikpXG4gICAgICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5uZXR3b3JrRXJyb3IpXG4gICAgICAgICAgfHwgKGVyci5uZXR3b3JrRXJyb3IuZXJyb3IgJiYgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnIubmV0d29ya0Vycm9yLmVycm9yLnN0YXR1cykpXG4gICAgICAgICAgfHwgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUilcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLy8gSWYgZ3JhcGhRTDogdHJ5IHRvIGNvbnZlcnQgdGhlIGZpcnN0IGVycm9yIGZvdW5kXG4gICAgICB8fCAoZXJyLmdyYXBoUUxFcnJvcnMgJiYgZXJyLmdyYXBoUUxFcnJvcnMubGVuZ3RoICYmIHRoaXMudG9BcHBFcnJvcihlcnIuZ3JhcGhRTEVycm9yc1swXSkpXG4gICAgICB8fCB0aGlzLnRvQXBwRXJyb3IoZXJyKVxuICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5vcmlnaW5hbEVycm9yKVxuICAgICAgfHwgKGVyci5ncmFwaFFMRXJyb3JzICYmIGVyci5ncmFwaFFMRXJyb3JzWzBdKVxuICAgICAgfHwgZXJyO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSAnICsgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpLCBlcnJvci5zdGFjayB8fCAnJyk7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09IEVycm9yQ29kZXMuVU5LTk9XTl9ORVRXT1JLX0VSUk9SICYmIGVyci5uZXR3b3JrRXJyb3IgJiYgZXJyLm5ldHdvcmtFcnJvci5tZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZ3JhcGhxbF0gb3JpZ2luYWwgZXJyb3I6ICcgKyBlcnIubmV0d29ya0Vycm9yLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5vbk5ldHdvcmtFcnJvci5uZXh0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKCghZXJyb3IgfHwgIWVycm9yLmNvZGUpICYmIGRlZmF1bHRFcnJvcikge1xuICAgICAgZXJyb3IgPSB7Li4uZGVmYXVsdEVycm9yLCBkZXRhaWxzOiBlcnJvciwgc3RhY2s6IGVyci5zdGFja307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgZXJyb3JzOiBbZXJyb3JdLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBuZXR3b3JrU3RhdHVzOiBOZXR3b3JrU3RhdHVzLmVycm9yXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXBwRXJyb3JCeUNvZGUoZXJyb3JDb2RlOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZXJyb3JDb2RlLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0STE4bkVycm9yTWVzc2FnZUJ5Q29kZShlcnJvckNvZGU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICAvLyBsb29rIGluIHJlZ2lzdGVyZWQgZXJyb3IgY29kZXNcbiAgICBjb25zdCBjdXN0b21FcnJvck1lc3NhZ2UgPSB0aGlzLmN1c3RvbUVycm9yc1tlcnJvckNvZGVdO1xuICAgIGlmIChjdXN0b21FcnJvck1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBjdXN0b21FcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCwgc3dpdGNoIG9uIGVycm9yIGNvZGVcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRDpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTkFVVEhPUklaRUQnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkZPUkJJRERFTjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5GT1JCSURERU4nO1xuICAgICAgY2FzZSBFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTktOT1dOX05FVFdPUktfRVJST1InO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURTpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5CQURfVVBEQVRFX0RBVEUnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkRBVEFfTE9DS0VEOlxuICAgICAgICByZXR1cm4gJ0VSUk9SLkRBVEFfTE9DS0VEJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5CQURfQVBQX1ZFUlNJT046XG4gICAgICAgIHJldHVybiAnRVJST1IuQkFEX0FQUF9WRVJTSU9OJztcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0FwcEVycm9yKGVycjogYW55KTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZXJyb3IgPSBlcnI7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnRyaW0oKS5pbmRleE9mKCd7XCJjb2RlXCI6JykgPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShtZXNzYWdlXG4gICAgICAgICAgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBiZWZvcmUgcGFyc2luZyAoZS5nLiBTUUwgZXJyb3JzIGZyb20gYW4gT3JhY2xlIGRhdGFiYXNlKVxuICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnICcpXG4gICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgZXJyb3IgYXMgSlNPTjogJywgcGFyc2VFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnJvci5jb2RlKSB8fCBlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -10,14 +10,13 @@ export class AppIconComponent {
|
|
|
10
10
|
this.icon = value.icon;
|
|
11
11
|
this.matIcon = value.matIcon;
|
|
12
12
|
this.matSvgIcon = value.matSvgIcon;
|
|
13
|
-
this.color = value.color;
|
|
14
13
|
}
|
|
15
14
|
;
|
|
16
15
|
}
|
|
17
16
|
AppIconComponent.decorators = [
|
|
18
17
|
{ type: Component, args: [{
|
|
19
18
|
selector: 'app-icon',
|
|
20
|
-
template: "<ion-icon *ngIf=\"icon; else matIconTemplate\" slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n
|
|
19
|
+
template: "<ion-icon *ngIf=\"icon; else matIconTemplate\" slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-'+color+')'\">{{matIcon}}</mat-icon>\n</ng-template>\n\n"
|
|
21
20
|
},] }
|
|
22
21
|
];
|
|
23
22
|
AppIconComponent.propDecorators = {
|
|
@@ -25,8 +24,6 @@ AppIconComponent.propDecorators = {
|
|
|
25
24
|
matIcon: [{ type: Input }],
|
|
26
25
|
matSvgIcon: [{ type: Input }],
|
|
27
26
|
color: [{ type: Input }],
|
|
28
|
-
height: [{ type: Input }],
|
|
29
|
-
width: [{ type: Input }],
|
|
30
27
|
ref: [{ type: Input }]
|
|
31
28
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaWNvbi9pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVMvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBTVcsU0FBSSxHQUFXLElBQUksQ0FBQztRQUNwQixZQUFPLEdBQVcsSUFBSSxDQUFDO1FBQ3ZCLGVBQVUsR0FBVyxJQUFJLENBQUM7UUFDMUIsVUFBSyxHQUFvQyxJQUFJLENBQUM7SUFPekQsQ0FBQztJQUxDLElBQWEsR0FBRyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUFBLENBQUM7OztZQWZILFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsZ1VBQW9DO2FBQ3JDOzs7bUJBR0UsS0FBSztzQkFDTCxLQUFLO3lCQUNMLEtBQUs7b0JBQ0wsS0FBSztrQkFFTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SWNvblJlZn0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7UHJlZGVmaW5lZENvbG9yc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaWNvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pY29uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHBJY29uQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBpY29uOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBtYXRJY29uOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBtYXRTdmdJY29uOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBjb2xvcjogUHJlZGVmaW5lZENvbG9ycyB8IFRoZW1lUGFsZXR0ZSA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHJlZih2YWx1ZTogSWNvblJlZikge1xuICAgIHRoaXMuaWNvbiA9IHZhbHVlLmljb247XG4gICAgdGhpcy5tYXRJY29uID0gdmFsdWUubWF0SWNvbjtcbiAgICB0aGlzLm1hdFN2Z0ljb24gPSB2YWx1ZS5tYXRTdmdJY29uO1xuICB9O1xufVxuIl19
|
|
@@ -293,7 +293,7 @@ export class MenuComponent {
|
|
|
293
293
|
MenuComponent.decorators = [
|
|
294
294
|
{ type: Component, args: [{
|
|
295
295
|
selector: 'app-menu',
|
|
296
|
-
template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" contentId=\"menu-content\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px;\"/>\n <span *ngIf=\"!logo\" width=\"108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n\n
|
|
296
|
+
template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" contentId=\"menu-content\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px;\"/>\n <span *ngIf=\"!logo\" width=\"108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ion-menu-toggle auto-hide=\"false\"\n [class.flex-spacer]=\"item.cssClass == 'flex-spacer'\"\n *ngFor=\"let item of $items | async\">\n\n <!-- link -->\n <ion-item *ngIf=\"!loading && item.path\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/')}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"!loading && item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!loading && !item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n </ion-menu-toggle>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '«' : '»'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n",
|
|
297
297
|
animations: [fadeInAnimation],
|
|
298
298
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
299
299
|
styles: ["ion-menu{--ion-item-background:transparent;--ion-item-divider-background:transparent;--ion-item-icon-color:var(--ion-color-primary-tint);--ion-item-text-color:var(--ion-color-primary-tint);--ion-item-background-selected:var(--ion-color-secondary100);--ion-item-text-color-selected:var(--ion-color-primary);--ion-item-icon-color-selected:var(--ion-color-primary);--ion-item-text-color-disable:var(--ion-color-medium);--ion-item-icon-color-disable:var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:50%;background-color:var(--ion-color-secondary);border:1px solid var(--ion-color-primary);overflow:hidden!important;font-size:var(--avatar-size,60px)!important;line-height:var(--avatar-size,60px);height:var(--avatar-size,60px)!important;width:var(--avatar-size,60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size,60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top:188px}ion-menu ion-content.no-profile-header{--offset-top:79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color:var(--ion-color-primary-tint);--ion-item-text-color:var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color:var(--ion-color-secondary-tint);--ion-item-text-color:var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color:var(--ion-color-tertiary-tint);--ion-item-text-color:var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color:var(--ion-color-danger-tint);--ion-item-text-color:var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color:var(--ion-color-medium-shade);--ion-item-text-color:var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color:var(--ion-color-dark-tint);--ion-item-text-color:var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item ion-icon,ion-menu ion-content ion-list ion-item mat-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-label,ion-menu ion-content ion-list ion-item ion-text{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover:var(--ion-item-background-selected)!important}ion-menu ion-content ion-list ion-item.selected ion-icon,ion-menu ion-content ion-list ion-item.selected mat-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-label,ion-menu ion-content ion-list ion-item.selected ion-text{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover:var(--ion-item-background-selected)!important;--ion-item-icon-color-selected:var(--ion-item-icon-color)!important;--ion-item-text-color-selected:var(--ion-item-text-color)!important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width:40px}@media screen and (max-width:767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width:768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size,80px)!important;line-height:var(--avatar-size,80px);height:var(--avatar-size,80px)!important;width:var(--avatar-size,80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size,80px)}}"]
|
|
@@ -323,4 +323,4 @@ MenuComponent.propDecorators = {
|
|
|
323
323
|
appVersion: [{ type: Input }],
|
|
324
324
|
splitPane: [{ type: ViewChild, args: ['splitPane', { static: true },] }]
|
|
325
325
|
};
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xKLE9BQU8sRUFBRSxlQUFlLEVBQWdCLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFxQixNQUFNLGdCQUFn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O3lCQUNMLEtBQUs7d0JBRUwsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBJb25TcGxpdFBhbmUsIE1lbnVDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFib3V0TW9kYWwgfSBmcm9tICcuLi9hYm91dC9tb2RhbC1hYm91dCc7XG5cbmltcG9ydCB7IGZhZGVJbkFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhhbW1lclN3aXBlRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvZ2VzdHVyZS9oYW1tZXIudXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBERUZBVUxUX01FTlVfU0hPV19XSEVOLCBNZW51U2VydmljZSwgU3BsaXRQYW5lU2hvd1doZW4gfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUl0ZW1zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcblxuZXhwb3J0IGNvbnN0IEFQUF9NRU5VX0lURU1TID0gbmV3IEluamVjdGlvblRva2VuPE1lbnVJdGVtW10+KCdtZW51SXRlbXMnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJ21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb25dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9jb25maWc6IENvbmZpZ3VyYXRpb247XG5cbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgaXNMb2dpbiA9IGZhbHNlO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBhY2NvdW50QXZhdGFyOiBzdHJpbmc7XG4gIGFjY291bnRFbWFpbDogc3RyaW5nO1xuXG4gICRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4odW5kZWZpbmVkKTtcblxuICBASW5wdXQoKSBpZCA9ICdtZW51JztcbiAgQElucHV0KCkgbWVudUlkID0gJ2xlZnQnO1xuICBASW5wdXQoKSBzaWRlID0gJ2xlZnQnO1xuICBASW5wdXQoKSBjb250ZW50SWQgPSAnbWVudS1jb250ZW50JztcbiAgQElucHV0KCkgbG9nbzogU3RyaW5nO1xuICBASW5wdXQoKSBhcHBOYW1lOiBTdHJpbmc7XG4gIEBJbnB1dCgpIGFwcFZlcnNpb246IFN0cmluZyA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcblxuICBAVmlld0NoaWxkKCdzcGxpdFBhbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGxpdFBhbmU6IElvblNwbGl0UGFuZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHByb3RlY3RlZCBpdGVtczogTWVudUl0ZW1bXVxuICApIHtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuKTtcblxuICAgIC8vIFdhaXQgcGxhdGZvcm0gc3RhcnRlZFxuICAgIGF3YWl0IHRoaXMucGxhdGZvcm1TZXJ2aWNlLnJlYWR5KCk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gbWVudSBzZXJ2aWNlIGV2ZW50XG4gICAgdGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKHZhbHVlKSk7XG4gICAgdGhpcy5tZW51U2VydmljZS5lbmFibGVkXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5lbmFibGUodmFsdWUpKTtcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLm9wZW5lZFxuICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBldmVudHNcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdmFsdWUgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKSk7XG5cbiAgICAvLyBVcGRhdGUgY29tcG9uZW50IHdoZW4gcmVmcmVzaCBpcyBuZWVkICg9bG9naW4gZXZlbnRzIG9yIGNvbmZpZyBjaGFuZ2VkKVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBtZXJnZShcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLFxuICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXRcbiAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgLy8gV2FpdCBhY2NvdW50IHNlcnZpY2UgcmVhZHkgKGNhbiBiZSByZXN0YXJ0ZWQpXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCkpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICApLFxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoY29uZmlnID0+IHRoaXMuX2NvbmZpZyA9IGNvbmZpZyksXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCkpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGxvZ2luID0+IHtcbiAgICAgICAgICBpZiAobG9naW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dpbih0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uTG9nb3V0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgb25Mb2dpbihhY2NvdW50OiBBY2NvdW50KSB7XG4gICAgY29uc29sZS5pbmZvKCdbbWVudV0gVXBkYXRlIChsb2dpbiknKTtcbiAgICB0aGlzLmFjY291bnRBdmF0YXIgPSBhY2NvdW50LmF2YXRhcjtcbiAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudC5kaXNwbGF5TmFtZTtcbiAgICB0aGlzLmFjY291bnRFbWFpbCA9IGFjY291bnQuZW1haWw7XG4gICAgdGhpcy5pc0xvZ2luID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hNZW51SXRlbXMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgYXN5bmMgb25Mb2dvdXQoc2tpcFJlZGlyZWN0PzogYm9vbGVhbikge1xuICAgIGlmICghc2tpcFJlZGlyZWN0KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gTG9nb3V0Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFVwZGF0ZSAobG9nb3V0KScpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjY291bnRBdmF0YXIgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gbnVsbDtcbiAgICB0aGlzLmFjY291bnROYW1lID0gbnVsbDtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hNZW51SXRlbXMoKTtcblxuICAgIC8vIFdhaXQgdGhlIGVuZCBvZiBmYWRlb3V0LCB0byByZXNldCB0aGUgYWNjb3VudFxuICAgIGlmICghc2tpcFJlZGlyZWN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dCgpIHtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRScsXG4gICAgICAnQVVUSC5MT0dPVVQuQ09ORklSTV9NRVNTQUdFJyxcbiAgICAgICdDT01NT04uQlROX0NBTkNFTCcsXG4gICAgICAnQVVUSC5MT0dPVVQuQlROX0NPTkZJUk0nXG4gICAgXSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnXSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9NRVNTQUdFJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0FOQ0VMJ10sXG4gICAgICAgICAgcm9sZTogJ2NhbmNlbCcsXG4gICAgICAgICAgY3NzQ2xhc3M6ICdzZWNvbmRhcnknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PlxuICAgICAgICAgICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7cmVwbGFjZVVybDogdHJ1ZSAvKiB3aWxsIGNsZWFyIHJvdXRlciBoaXN0b3J5ICovfSlcbiAgICAgICAgICAgICwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIGVuYWJsZSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNFbmFibGVkKHRoaXMubWVudUlkKTtcbiAgICBpZiAoZW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5lbmFibGUodmFsdWUsIHRoaXMubWVudUlkKTtcbiAgICAgIGlmICghdmFsdWUpIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBvcGVuIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBPcGVuaW5nIG1lbnUnKTtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5vcGVuKHRoaXMubWVudUlkKTtcbiAgICAgIC8vIFByb3BhZ2UgdG8gc2VydmljZVxuICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzT3BlbmVkKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIGNsb3NlIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENsb3NpbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmNsb3NlKHRoaXMubWVudUlkKTtcbiAgICAgIC8vIFByb3BhZ2UgdG8gc2VydmljZVxuICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzQ2xvc2VkKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFib3V0TW9kYWwoZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe2NvbXBvbmVudDogQWJvdXRNb2RhbH0pO1xuICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBzZXRTcGxpdFBhbmVXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBzcGxpdFBhbmUgd2hlbi4uLicpO1xuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFNldCBzcGxpdFBhbmUgd2hlbiB0byAnICsgdmFsdWUpO1xuICAgICAgdGhpcy5zcGxpdFBhbmUud2hlbiA9IHZhbHVlO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbWVudSBzZXJ2aWNlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubWVudVNlcnZpY2Uuc2V0U3BsaXRQYW5lU2hvd1doZW4odmFsdWUpLCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVNob3coZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAodGhpcy5zcGxpdFBhbmUud2hlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFNwbGl0UGFuZVdoZW4oREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFNwbGl0UGFuZVdoZW4oZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBldmVudDogVUlFdmVudCkge1xuICAgIHRoaXMuY2xvc2UoKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fib3V0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuQWJvdXRNb2RhbChldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGFjdGlvbjogJyArIGFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgb25Td2lwZVJpZ2h0KGV2ZW50OiBIYW1tZXJTd2lwZUV2ZW50KSB7XG4gICAgLy8gU2tpcCwgaWYgbm90IGEgdmFsaWQgc3dpcGUgZXZlbnRcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnBvaW50ZXJUeXBlICE9PSAndG91Y2gnIHx8IGV2ZW50LnZlbG9jaXR5IDwgMC40KSB7XG4gICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2lsbCBvcGVuIHRoZSBsZWZ0IG1lbnUsIHNvIGNhbmNlbGxlZCB0aGlzIHN3aXBlIGV2ZW50XG4gICAgY29uc3Qgc3RhcnRYID0gIGV2ZW50LmNlbnRlci54IC0gZXZlbnQuZGlzdGFuY2U7XG4gICAgaWYgKHN0YXJ0WCA8PSA1MCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDYW5jZWwgc3dpcGUgcmlnaHQsIGJlY2F1c2UgbmVhciB0aGUgbGVmdCBtZW51IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IGNvbnRpbnVlXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBSZWNlaXZlZCBzd2lwZSByaWdodCB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCByZWZyZXNoTWVudUl0ZW1zKCkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW21lbnVdIFJlZnJlc2hpbmcgbWVudSBpdGVtcy4uLicpO1xuXG4gICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtcyB8fCBbXTtcblxuICAgIC8vIEluc2VydCBtZW51IGl0ZW1zLCBmcm9tIHRoZSBjb25maWdcbiAgICBjb25zdCBjb25maWdWYWx1ZTogc3RyaW5nID0gdGhpcy5fY29uZmlnICYmIHRoaXMuX2NvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29uZmlnVmFsdWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdJdGVtcyA9IEpTT04ucGFyc2UoY29uZmlnVmFsdWUpO1xuICAgICAgICBpdGVtcyA9IChjb25maWdJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5hZnRlcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgaW5kZXgrMSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KGl0ZW0pXG4gICAgICAgICAgICAgICAgLmNvbmNhdChyZXMuc2xpY2UoaW5kZXgrMSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBpdGVtcylcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbbWVudV0gSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uICcke0NPUkVfQ09ORklHX09QVElPTlMuTUVOVV9JVEVNUy5rZXl9Jy4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgbWVudSBpdGVtYCwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRzID0geyBpc0xvZ2luOiB0aGlzLmlzTG9naW4sIGRlYnVnOiB0aGlzLl9kZWJ1ZyB9O1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtc1xuICAgICAgLmZpbHRlcihpdGVtID0+IE1lbnVJdGVtcy5jaGVja0lmVmlzaWJsZShpdGVtLCB0aGlzLmFjY291bnRTZXJ2aWNlLCB0aGlzLl9jb25maWcsIG9wdHMpKVxuICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoaXRlbS50aXRsZVByb3BlcnR5KSAmJiB0aGlzLl9jb25maWcpIHtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2NvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHRpdGxlKSByZXR1cm4geyAuLi5pdGVtLCB0aXRsZX07IC8vIENyZWF0ZSBhIGNvcHksIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGl0ZW0udGl0bGVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4kaXRlbXMubmV4dChmaWx0ZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG5cbiJdfQ==
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBQyxlQUFlLEVBQWdCLGNBQWMsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHdkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFvQixNQUFNLGdCQUFn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O3lCQUNMLEtBQUs7d0JBRUwsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyLCBJb25TcGxpdFBhbmUsIE1lbnVDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FjY291bnR9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7QWJvdXRNb2RhbH0gZnJvbSAnLi4vYWJvdXQvbW9kYWwtYWJvdXQnO1xuXG5pbXBvcnQge2ZhZGVJbkFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aXNOb3ROaWxPckJsYW5rfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0hhbW1lclN3aXBlRXZlbnR9IGZyb20gJy4uLy4uL3NoYXJlZC9nZXN0dXJlL2hhbW1lci51dGlscyc7XG5pbXBvcnQge1BsYXRmb3JtU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtERUZBVUxUX01FTlVfU0hPV19XSEVOLCBNZW51U2VydmljZSwgU3BsaXRQYW5lU2hvd1doZW59IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7TWVudUl0ZW0sIE1lbnVJdGVtc30gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuXG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudUl0ZW1bXT4oJ21lbnVJdGVtcycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2NvbmZpZzogQ29uZmlndXJhdGlvbjtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBpc0xvZ2luID0gZmFsc2U7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIGFjY291bnRBdmF0YXI6IHN0cmluZztcbiAgYWNjb3VudEVtYWlsOiBzdHJpbmc7XG5cbiAgJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPih1bmRlZmluZWQpO1xuXG4gIEBJbnB1dCgpIGlkID0gJ21lbnUnO1xuICBASW5wdXQoKSBtZW51SWQgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIHNpZGUgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJZCA9ICdtZW51LWNvbnRlbnQnO1xuICBASW5wdXQoKSBsb2dvOiBTdHJpbmc7XG4gIEBJbnB1dCgpIGFwcE5hbWU6IFN0cmluZztcbiAgQElucHV0KCkgYXBwVmVyc2lvbjogU3RyaW5nID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0UGFuZScsIHsgc3RhdGljOiB0cnVlIH0pIHNwbGl0UGFuZTogSW9uU3BsaXRQYW5lO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybVNlcnZpY2U6IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgbWVudTogTWVudUNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTUVOVV9JVEVNUykgcHJvdGVjdGVkIGl0ZW1zOiBNZW51SXRlbVtdXG4gICkge1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5zcGxpdFBhbmUud2hlbiA9IGF3YWl0IGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLm1lbnVTZXJ2aWNlLnNwbGl0UGFuZVdoZW4pO1xuXG4gICAgLy8gV2FpdCBwbGF0Zm9ybSBzdGFydGVkXG4gICAgYXdhaXQgdGhpcy5wbGF0Zm9ybVNlcnZpY2UucmVhZHkoKTtcblxuICAgIC8vIExpc3RlbiB0byBtZW51IHNlcnZpY2UgZXZlbnRcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLnNwbGl0UGFuZVdoZW5cbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLnNldFNwbGl0UGFuZVdoZW4odmFsdWUpKTtcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLmVuYWJsZWRcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZSh2YWx1ZSkpO1xuICAgIHRoaXMubWVudVNlcnZpY2Uub3BlbmVkXG4gICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGV2ZW50c1xuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB2YWx1ZSA/IHRoaXMub3BlbigpIDogdGhpcy5jbG9zZSgpKTtcblxuICAgIC8vIFVwZGF0ZSBjb21wb25lbnQgd2hlbiByZWZyZXNoIGlzIG5lZWQgKD1sb2dpbiBldmVudHMgb3IgY29uZmlnIGNoYW5nZWQpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ291dFxuICAgICAgICApXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAvLyBXYWl0IGFjY291bnQgc2VydmljZSByZWFkeSAoY2FuIGJlIHJlc3RhcnRlZClcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICksXG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWdcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRhcChjb25maWcgPT4gdGhpcy5fY29uZmlnID0gY29uZmlnKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUobG9naW4gPT4ge1xuICAgICAgICAgIGlmIChsb2dpbikge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ2luKHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gIH1cblxuICBhc3luYyBvbkxvZ2luKGFjY291bnQ6IEFjY291bnQpIHtcbiAgICBjb25zb2xlLmluZm8oJ1ttZW51XSBVcGRhdGUgKGxvZ2luKScpO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IGFjY291bnQuYXZhdGFyO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gYWNjb3VudC5lbWFpbDtcbiAgICB0aGlzLmlzTG9naW4gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaE1lbnVJdGVtcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ291dChza2lwUmVkaXJlY3Q/OiBib29sZWFuKSB7XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBMb2dvdXQnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gVXBkYXRlIChsb2dvdXQpJyk7XG4gICAgfVxuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IG51bGw7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBudWxsO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaE1lbnVJdGVtcygpO1xuXG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIGZhZGVvdXQsIHRvIHJlc2V0IHRoZSBhY2NvdW50XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KFtcbiAgICAgICdBVVRILkxPR09VVC5DT05GSVJNX1RJVExFJyxcbiAgICAgICdBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnLFxuICAgICAgJ0NPTU1PTi5CVE5fQ0FOQ0VMJyxcbiAgICAgICdBVVRILkxPR09VVC5CVE5fQ09ORklSTSdcbiAgICBdKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRSddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DQU5DRUwnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQlROX0NPTkZJUk0nXSxcbiAgICAgICAgICBjc3NDbGFzczogJ2lvbi1jb2xvci1wcmltYXJ5JyxcbiAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmxvZ291dCgpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+XG4gICAgICAgICAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHtyZXBsYWNlVXJsOiB0cnVlIC8qIHdpbGwgY2xlYXIgcm91dGVyIGhpc3RvcnkgKi99KVxuICAgICAgICAgICAgLCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgZW5hYmxlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IGF3YWl0IHRoaXMubWVudS5pc0VuYWJsZWQodGhpcy5tZW51SWQpO1xuICAgIGlmIChlbmFibGVkICE9PSB2YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmVuYWJsZSh2YWx1ZSwgdGhpcy5tZW51SWQpO1xuICAgICAgaWYgKCF2YWx1ZSkgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIG9wZW4gZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIE9wZW5pbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51Lm9wZW4odGhpcy5tZW51SWQpO1xuICAgICAgLy8gUHJvcGFnZSB0byBzZXJ2aWNlXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNPcGVuZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgY2xvc2UgZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2xvc2luZyBtZW51Jyk7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUuY2xvc2UodGhpcy5tZW51SWQpO1xuICAgICAgLy8gUHJvcGFnZSB0byBzZXJ2aWNlXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNDbG9zZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBvcGVuQWJvdXRNb2RhbChldmVudD86IFVJRXZlbnQpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7Y29tcG9uZW50OiBBYm91dE1vZGFsfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHNldFNwbGl0UGFuZVdoZW4odmFsdWU6IFNwbGl0UGFuZVNob3dXaGVuKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIHNwbGl0UGFuZSB3aGVuLi4uJyk7XG4gICAgaWYgKHRoaXMuc3BsaXRQYW5lLndoZW4gIT09IHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gU2V0IHNwbGl0UGFuZSB3aGVuIHRvICcgKyB2YWx1ZSk7XG4gICAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gdmFsdWU7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBtZW51IHNlcnZpY2VcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51U2VydmljZS5zZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZSksIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU3BsaXRQYW5lU2hvdyhldmVudD86IFVJRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9BY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWJvdXQnOlxuICAgICAgICBhd2FpdCB0aGlzLm9wZW5BYm91dE1vZGFsKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gYWN0aW9uOiAnICsgYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvblN3aXBlUmlnaHQoZXZlbnQ6IEhhbW1lclN3aXBlRXZlbnQpIHtcbiAgICAvLyBTa2lwLCBpZiBub3QgYSB2YWxpZCBzd2lwZSBldmVudFxuICAgIGlmICghZXZlbnQgfHwgZXZlbnQucG9pbnRlclR5cGUgIT09ICd0b3VjaCcgfHwgZXZlbnQudmVsb2NpdHkgPCAwLjQpIHtcbiAgICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXaWxsIG9wZW4gdGhlIGxlZnQgbWVudSwgc28gY2FuY2VsbGVkIHRoaXMgc3dpcGUgZXZlbnRcbiAgICBjb25zdCBzdGFydFggPSAgZXZlbnQuY2VudGVyLnggLSBldmVudC5kaXN0YW5jZTtcbiAgICBpZiAoc3RhcnRYIDw9IDUwKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENhbmNlbCBzd2lwZSByaWdodCwgYmVjYXVzZSBuZWFyIHRoZSBsZWZ0IG1lbnUge3g6IFwiICsgc3RhcnRYICsgXCIsIHZlbG9jaXR5OiBcIiArIGV2ZW50LnZlbG9jaXR5ICsgXCJ9XCIpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPSzogY29udGludWVcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIFJlY2VpdmVkIHN3aXBlIHJpZ2h0IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hNZW51SXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWVudV0gUmVmcmVzaGluZyBtZW51IGl0ZW1zLi4uJyk7XG5cbiAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zIHx8IFtdO1xuXG4gICAgLy8gSW5zZXJ0IG1lbnUgaXRlbXMsIGZyb20gdGhlIGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl9jb25maWcgJiYgdGhpcy5fY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuTUVOVV9JVEVNUyk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhjb25maWdWYWx1ZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0l0ZW1zID0gSlNPTi5wYXJzZShjb25maWdWYWx1ZSk7XG4gICAgICAgIGl0ZW1zID0gKGNvbmZpZ0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgoaSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCBpbmRleCsxKVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCsxKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW0uYmVmb3JlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgoaSA9PiBpLnRpdGxlID09PSBpdGVtLmJlZm9yZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoaXRlbSk7XG4gICAgICAgIH0sIGl0ZW1zKVxuICAgICAgfVxuICAgICAgY2F0Y2goZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFttZW51XSBJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gJyR7Q09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TLmtleX0nLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBtZW51IGl0ZW1gLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IGlzTG9naW46IHRoaXMuaXNMb2dpbiwgZGVidWc6IHRoaXMuX2RlYnVnIH07XG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gTWVudUl0ZW1zLmNoZWNrSWZWaXNpYmxlKGl0ZW0sIHRoaXMuYWNjb3VudFNlcnZpY2UsIHRoaXMuX2NvbmZpZywgb3B0cykpXG4gICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIHRoaXMuX2NvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7IC4uLml0ZW0sIHRpdGxlfTsgLy8gQ3JlYXRlIGEgY29weSwgdG8ga2VlcCB0aGUgb3JpZ2luYWwgaXRlbS50aXRsZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiRpdGVtcy5uZXh0KGZpbHRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGVjdENoYW5nZXMoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cblxuIl19
|