@sumaris-net/ngx-components 2.4.3 → 2.4.4

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.
@@ -331,8 +331,16 @@ export class PlatformService extends StartableService {
331
331
  }
332
332
  });
333
333
  this.settings.onChange.subscribe(data => {
334
- if (data && data.locale && data.locale !== this.translate.currentLang) {
335
- this.translate.use(data.locale);
334
+ if (data) {
335
+ if (data.locale) {
336
+ if (data.locale !== this.translate.currentLang) {
337
+ this.translate.use(data.locale);
338
+ }
339
+ }
340
+ else {
341
+ // Hotfix from ludovic.pecquot@e-is.pro (14/11/2021) - See 1.20.42
342
+ this.translate.use(this.environment.defaultLocale);
343
+ }
336
344
  }
337
345
  });
338
346
  // Use account's settings, (like locale), when account inheritance enabled
@@ -474,4 +482,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
474
482
  }] }, { type: i13.Downloader, decorators: [{
475
483
  type: Optional
476
484
  }] }]; } });
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVUzRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUYsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUduRSxPQUFPLEVBQUMsSUFBSSxFQUFjLEVBQUUsRUFBZ0IsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBOEIsc0JBQXNCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENB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bH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZX0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7UGxhdGZvcm1zfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7QXVkaW9Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7UGxhdGZvcm0gYXMgQ2RrUGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7aXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdGllc1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS9lbnRpdGllcy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNraXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4vY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7TW9tZW50RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7RG93bmxvYWRlciwgRG93bmxvYWRSZXF1ZXN0LCBOb3RpZmljYXRpb25WaXNpYmlsaXR5fSBmcm9tICdAaW9uaWMtbmF0aXZlL2Rvd25sb2FkZXIvbmd4JztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNNb2JpbGUsIGlzV2luZG93c30gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtGaWxlc1V0aWxzLCBNaW1lVHlwZXN9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHtVcmlVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJpLnV0aWxzJztcbmltcG9ydCB7U3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJztcbmltcG9ydCB7U3RhdHVzQmFyfSBmcm9tICdAY2FwYWNpdG9yL3N0YXR1cy1iYXInO1xuaW1wb3J0IHtCcm93c2VyLCBPcGVuT3B0aW9uc30gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7S2V5Ym9hcmR9IGZyb20gJ0BjYXBhY2l0b3Iva2V5Ym9hcmQnO1xuaW1wb3J0IHtDYXBhY2l0b3JQbHVnaW5zfSBmcm9tICcuLi8uLi9zaGFyZWQvY2FwYWNpdG9yL3BsdWdpbnMnO1xuaW1wb3J0IHtsb2NhbGUgYXMgbW9tZW50TG9jYWxlfSBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgY29uc3QgQW5kcm9pZE9zRW52aXJvbm1lbnQgPSBPYmplY3QuZnJlZXplKHtcbiAgRElSRUNUT1JZX0RPV05MT0FEUzogJ0Rvd25sb2FkJyxcbiAgRElSRUNUT1JZX0RPV05MT0FEU19PTEQ6ICdEb3dubG9hZHMnLCAvLyBPbGQgbmFtZSwgZm9yIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAvLyBUT0RPOiBmaW5kIHZhbHVlIGZvciB0aGlzLiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvb3MvRW52aXJvbm1lbnQjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoamF2YS5pby5GaWxlKVxuICAvLyBESVJFQ1RPUllfTVVTSUMsXG4gIC8vIERJUkVDVE9SWV9QT0RDQVNUUyxcbiAgLy8gRElSRUNUT1JZX1JJTkdUT05FUyxcbiAgLy8gRElSRUNUT1JZX0FMQVJNUyxcbiAgLy8gRElSRUNUT1JZX05PVElGSUNBVElPTlMsXG4gIC8vIERJUkVDVE9SWV9QSUNUVVJFUyxcbiAgLy8gRElSRUNUT1JZX01PVklFUyxcbiAgLy8gRElSRUNUT1JZX0RDSU0sXG4gIC8vIERJUkVDVE9SWV9ET0NVTUVOVFMsXG4gIC8vIERJUkVDVE9SWV9BVURJT0JPT0tTLFxufSk7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY2FwYWNpdG9yOiBib29sZWFuO1xuICBwcml2YXRlIF9hbmRyb2lkOiBib29sZWFuO1xuICBwcml2YXRlIF9pb3M6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rvd25sb2FkaW5nSm9iczogTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjaGVja0FwcFZlcnNpb25UaW1lcjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW9uaWNQbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdWRpb1Byb3ZpZGVyOiBBdWRpb1Byb3ZpZGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRvd25sb2FkZXI6IERvd25sb2FkZXJcbiAgKSB7XG4gICAgc3VwZXIoaW9uaWNQbGF0Zm9ybSk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGxhdGZvcm1OYW1lKSB7XG4gICAgICBjYXNlICdtb2JpbGUnOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICAgIGNhc2UgJ21vYmlsZXdlYic6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKSAmJiAhaXNXaW5kb3dzKHdpbmRvdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMuaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWNpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvcmRvdmE7XG4gIH1cblxuICBpc0FuZHJvaWRDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbmRyb2lkICYmIHRoaXMuX2NvcmRvdmEgfHwgZmFsc2U7XG4gIH1cblxuICBpc0lPU0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lvcyAmJiB0aGlzLl9jb3Jkb3ZhIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIEFwcCAoYW5kIE5PVCBhIG1vYmlsZSB3ZWIpXG4gICAqL1xuICBpc0FwcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkgfHwgdGhpcy5pc0lPU0NvcmRvdmEoKTtcbiAgfVxuXG4gIGlzV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0FwcCgpO1xuICB9XG5cbiAgaXNNb2JpbGVXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlICYmIHRoaXMuaXNXZWIoKTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGVyICYmIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpO1xuICB9XG5cbiAgZ2V0IGNhbk9wZW5GaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTsgLy8gVE9ETzogZml4bWUgdXNpbmcgQGNhcGFjaXRvci9maWxlc3lzdGVtID9cbiAgfVxuXG4gIHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS53aWR0aCgpO1xuICB9XG5cbiAgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuaXMoJ21vYmlsZScpO1xuICAgICAgdGhpcy5fY29yZG92YSA9IHRoaXMuaXMoJ2NvcmRvdmEnKTtcbiAgICAgIHRoaXMuX2NhcGFjaXRvciA9IHRoaXMuaXMoJ2NhcGFjaXRvcicpO1xuICAgICAgdGhpcy5fYW5kcm9pZCA9IHRoaXMuaXMoJ2FuZHJvaWQnKTtcbiAgICAgIHRoaXMuX2lvcyA9IHRoaXMuaXMoJ2lvcycpO1xuXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gRGV0ZWN0ZWQge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCBjb3Jkb3ZhOiAke3RoaXMuX2NvcmRvdmF9LCBjYXBhY2l0b3I6ICR7dGhpcy5fY2FwYWNpdG9yfSwgYW5kcm9pZDogJHt0aGlzLl9hbmRyb2lkfSwgaW9zOiAke3RoaXMuX2lvc31gKTtcblxuICAgICAgLy8gQ29uZmlndXJlIENTUyBjbGFzc1xuICAgICAgdGhpcy5jb25maWd1cmVHbG9iYWxDc3NDbGFzcyh0aGlzLl9tb2JpbGUpO1xuXG4gICAgICAvLyBDb25maWd1cmUgQ2FwYWNpdG9yIHBsdWdpbnNcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucygpO1xuXG4gICAgICAvLyBDb25maWd1cmUgdHJhbnNsYXRpb25cbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlVHJhbnNsYXRlKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBjYWNoZVxuICAgICAgdGhpcy5jb25maWd1cmVDYWNoZSgpO1xuXG4gICAgICAvLyBTdGFydCByb290IHNlcnZpY2VzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuZW50aXRpZXNTdG9yYWdlLnJlYWR5KCksXG4gICAgICAgIHRoaXMuc2V0dGluZ3MucmVhZHkoKSxcbiAgICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5yZWFkeSgpLFxuICAgICAgICB0aGlzLmF1ZGlvUHJvdmlkZXIucmVhZHkoKVxuICAgICAgXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlYiBhcHAgaGFzIHVwZGF0ZSwgYW5kIHJlbG9hZCBwYWdlIGlmIG5lZWRcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBWZXJzaW9uKHtjYW5SZWxvYWQ6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNhY2hlIGNvbmZpZ3VyYXRpb24gd2hlbiBuZXR3b3JrIGNoYW5nZWRcbiAgICAgIHRoaXMubmV0d29ya1NlcnZpY2Uub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIEFscmVhZHkgZG9uZSBvbmNlLCBzbyB3ZSBza2lwIHRoZSBmaXJzdCBldmVudFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodHlwZSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpO1xuXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0gW09LXSB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCB3ZWI6ICR7dGhpcy5pc1dlYigpfSwgZG93bmxvYWRlcjogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhdXRoZW50aWNhdGlvbiB0eXBlXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChjb25maWcgPT4gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfVE9LRU5fVFlQRSkgYXMgQXV0aFRva2VuVHlwZSksXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW5UeXBlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCB0b2tlbiB0eXBlIHske3Rva2VuVHlwZX19YCk7XG4gICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS50b2tlblR5cGUgPSB0b2tlblR5cGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBIaWRlIHRoZSBzcGxhc2hzY3JlZW4gKGlmIG1vYmlsZSkgLSBhZnRlciAxcyAtIGFuZCBwbGF5IHN0YXJ0IHNvdW5kXG4gICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZFxuICAgICAgICAgIHRoaXMuYXVkaW9Qcm92aWRlci5wbGF5U3RhcnR1cFNvdW5kKCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBuZXcgdmVyc2lvbiwgZXZlcnkgMSBtaW5cbiAgICAgIGNvbnN0IGNoZWNrSW50ZXJ2YWxNcyA9ICh0aGlzLmVudmlyb25tZW50LmNoZWNrQXBwVmVyc2lvbkludGVydmFsSW5TZWNvbmRzIHx8IDApICogMTAwMDtcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIGNoZWNrSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lciA9IHRpbWVyKGNoZWNrSW50ZXJ2YWxNcywgY2hlY2tJbnRlcnZhbE1zKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB0aGlzLmNoZWNrQXBwVmVyc2lvbih7c2lsZW50OiB0cnVlLCBjYW5SZWxvYWQ6IGZhbHNlIC8qZG8gTk9UIGF1dG8gcmVsb2FkLCB3aGVuIGFwcCBpcyBzdGFydGVkKi99KSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE1hbmFnZSBzdGFydHVwIGVycm9yXG4gICAgICByZXR1cm4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPcGVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBPcGVuaW5nIGxpbms6ICR7dXJsfWApO1xuICAgIGlmICh0aGlzLl9tb2JpbGUgJiYgdGhpcy5fY2FwYWNpdG9yKSB7XG4gICAgICBhd2FpdCBCcm93c2VyLm9wZW4oe3VybCwgLi4ub3B0c30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgb3B0cz8ud2luZG93TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG93bmxvYWRpbmdKb2IodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHVyaSk7XG4gIH1cblxuICBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4pOiBPYnNlcnZhYmxlPHN0cmluZ3x1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwncmVxdWVzdFxcJyBvciBcXCdyZXF1ZXN0LnVyaVxcJycpO1xuXG4gICAgaWYgKHRoaXMuY2FuRG93bmxvYWQpIHtcblxuICAgICAgLy8gQ2hlY2sgaWYgbm90IGFscmVhZHkgZG93bmxvYWRpbmcgZmlsZVxuICAgICAgbGV0IGpvYiQgPSB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHJlcXVlc3QudXJpKTtcbiAgICAgIGlmIChqb2IkKSByZXR1cm4gam9iJDtcblxuICAgICAgLy8gQ29tcHV0ZSBzdWJQYXRoIChmaW5hbCBmaWxlbmFtZSlcbiAgICAgIGxldCBzdWJQYXRoID0gcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXI/LnN1YlBhdGhcbiAgICAgICAgfHwgcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0Rpcj8uc3ViUGF0aFxuICAgICAgICB8fCByZXF1ZXN0LmZpbGVuYW1lIHx8IFVyaVV0aWxzLmdldEZpbGVuYW1lKHJlcXVlc3QudXJpKVxuICAgICAgICB8fCByZXF1ZXN0LnRpdGxlIHx8ICdkb3dubG9hZCc7XG5cbiAgICAgIHN1YlBhdGggPSBzdWJQYXRoLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBkaXJUeXBlOiBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTLFxuICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0YXJ0IGRvd25sb2FkXG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIERvd25sb2FkaW5nLCB1c2luZyByZXF1ZXN0OiAnICsgSlNPTi5zdHJpbmdpZnkoZG93bmxvYWRSZXF1ZXN0KSk7XG4gICAgICBqb2IkID0gZnJvbSh0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0KSk7XG5cbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgcmVxdWVzdCB1cmlcbiAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5zZXQoZG93bmxvYWRSZXF1ZXN0LnVyaSwgam9iJCk7XG4gICAgICByZXR1cm4gam9iJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAobG9jYXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIEZpbGUgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYXQ6JyArIGxvY2F0aW9uKTtcbiAgICAgICAgICAgIC8vIEZvcmdldCBqb2JcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycikpO1xuICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZGVsZXRlKGRvd25sb2FkUmVxdWVzdC51cmkpO1xuXG4gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGFub3RoZXIgbG9jYXRpb24gLSBpc3N1ZSBpbiBvbGRlciBBbmRyb2lkIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIuZGlyVHlwZSA9IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFNfT0xEO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZChkb3dubG9hZFJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlR2xvYmFsQ3NzQ2xhc3MobW9iaWxlOiBib29sZWFuLCB3aW46IGFueSA9IHdpbmRvdykge1xuICAgIGlmIChtb2JpbGUpIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuXG4gICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICBpZiAoIW1vYmlsZSAmJiAod2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwbHQtbW9iaWxlJylcbiAgICAgIHx8IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygncGx0LW1vYmlsZXdlYicpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIEZvcmNlIGNsYXNzIGxpc3QgdG86IDxodG1sIGNsYXNzPVwicGx0LWRlc2t0b3BcIj4uIFdvcmthcm91bmQgZm9yIFdpbmRvd3MgdG91Y2ggc2NyZWVuLicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwbHQtbW9iaWxlJywncGx0LW1vYmlsZXdlYicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwbHQtZGVza3RvcCcpO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHBsdWdpbiA9IENhcGFjaXRvclBsdWdpbnMuU3RhdHVzQmFyO1xuICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7b3ZlcmxheTogZmFsc2V9KTtcblxuICAgICAgLy8gSGlkZSBhY2Nlc3NvcnkgYmFyIChpT1Mgb25seSlcbiAgICAgIGlmICh0aGlzLmlzKCdpb3MnKSkge1xuICAgICAgICBwbHVnaW4gPSBDYXBhY2l0b3JQbHVnaW5zLktleWJvYXJkO1xuICAgICAgICBhd2FpdCBLZXlib2FyZC5zZXRBY2Nlc3NvcnlCYXJWaXNpYmxlKHtpc1Zpc2libGU6IGZhbHNlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3BsYXRmb3JtXSBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbn0gcGx1Z2luOiAke2Vyci5tZXNzYWdlfHxlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICB9XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyBjb25maWd1cmVUcmFuc2xhdGUoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGkxOG4gLi4uJyk7XG5cbiAgICAvLyB0aGlzIGxhbmd1YWdlIHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSB0cmFuc2xhdGlvbiBpc24ndCBmb3VuZCBpbiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG5cbiAgICAgICAgLy8gZm9yY2UgJ2VuJyBhcyAnZW5fR0InXG4gICAgICAgIGlmIChldmVudC5sYW5nID09PSAnZW4nKSB7XG4gICAgICAgICAgZXZlbnQubGFuZyA9ICdlbl9HQic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25maWcgbW9tZW50IGxpYlxuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vbWVudExvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBldmVudC5sYW5nICsgJ30nKTtcbiAgICAgICAgfVxuICAgICAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbW9tZW50TG9jYWxlKCdlbicpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBVbmtub3duIGxvY2FsZSBmb3IgbW9tZW50IGxpYi4gVXNpbmcgZGVmYXVsdCBbZW5dJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKG1vbWVudExvY2FsZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2Uuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sb2NhbGUgJiYgZGF0YS5sb2NhbGUgIT09IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShkYXRhLmxvY2FsZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIHNldHRpbmdzLCAobGlrZSBsb2NhbGUpLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZFxuICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbi5zdWJzY3JpYmUoYWNjb3VudCA9PiB7XG4gICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncyAmJiB0aGlzLnNldHRpbmdzLnNldHRpbmdzLmFjY291bnRJbmhlcml0YW5jZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50U2V0dGluZ3MgPSBhY2NvdW50LnNldHRpbmdzLmFzTG9jYWxTZXR0aW5ncygpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KGFjY291bnRTZXR0aW5ncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2FjaGUob25saW5lPzogYm9vbGVhbikge1xuICAgIG9ubGluZSA9IHRvQm9vbGVhbihvbmxpbmUsIHRoaXMuY2FjaGUuaXNPbmxpbmUoKSk7XG4gICAgY29uc3QgY2FjaGVUVEwgPSBvbmxpbmUgPyAzNjAwIC8qIDFoICovIDogMzYwMCAqIDI0ICogMzA7IC8qIDEgbW9udGggKi9cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ29uZmlndXJpbmcgY2FjaGUgW09LXSB7b25saW5lOiAke29ubGluZX0sIHRpbWVUb0xpdmU6ICR7Y2FjaGVUVEwgLyAzNjAwfWgsIG9mZmxpbmVJbnZhbGlkYXRlOiBmYWxzZX1gKTtcbiAgICB0aGlzLmNhY2hlLnNldERlZmF1bHRUVEwoY2FjaGVUVEwpO1xuICAgIHRoaXMuY2FjaGUuc2V0T2ZmbGluZUludmFsaWRhdGUoZmFsc2UpOyAvLyBEbyBub3QgaW52YWxpZGF0ZSBjYWNoZSB3aGVuIG9mZmxpbmVcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja0FwcFZlcnNpb24ob3B0cz86IHtjYW5SZWxvYWQ/OiBib29sZWFuOyBzaWxlbnQ/OiBib29sZWFufSkge1xuICAgIGlmICh0aGlzLm5ldHdvcmtTZXJ2aWNlLm9mZmxpbmUgfHwgIXRoaXMuaXNXZWIoKSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBzaWxlbnQgPSBvcHRzPy5zaWxlbnQgPT09IHRydWU7XG4gICAgY29uc3QgcHJvZHVjdGlvbiA9IHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBjb25zdCBjYW5BdXRvUmVsb2FkID0gIW9wdHMgfHwgb3B0cy5jYW5SZWxvYWQgIT09IGZhbHNlO1xuXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24uLi4nKTtcblxuICAgIGNvbnN0IGFjdHVhbFZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb247XG4gICAgaWYgKGlzTmlsT3JCbGFuayhhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBNaXNzaW5nIHJlcXVpcmVkIHZhbHVlIGZvciBcXCdlbnZpcm9ubWVudC52ZXJzaW9uXFwnLiBDYW5ub3QgY2hlY2sgcmVtb3RlIGFwcCB2ZXJzaW9uLicpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIGNvbnN0IHJlbW90ZVZlcnNpb24gPSBhd2FpdCB0aGlzLm5ldHdvcmtTZXJ2aWNlLmdldEFwcFZlcnNpb24oKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHJlbW90ZVZlcnNpb24pKSB7XG4gICAgICBpZiAocHJvZHVjdGlvbiAmJiAhc2lsZW50KSBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIENhbm5vdCBsb2FkIHJlbW90ZSBhcHAgdmVyc2lvbi4gU2tpcHBpbmcgdmVyc2lvbiBjaGVjaycpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZShyZW1vdGVWZXJzaW9uLCBhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24gW09LXSB7cmVtb3RlOiAnJHtyZW1vdGVWZXJzaW9ufScsIGFjdHVhbDogJyR7YWN0dWFsVmVyc2lvbn0nfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG5ld2VyIHZlcnNpb24gZXhpc3RzXG4gICAgbGV0IHJlbG9hZFBhdGggPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1smXT92ZXJzaW9uPVswLTkuXSsvZ2ksICcnKTsgLy8gUmVtb3ZlIG9sZCB2ZXJzaW9uIGluIHF1ZXJ5IHBhcmFtc1xuICAgIHJlbG9hZFBhdGggKz0gKHJlbG9hZFBhdGguaW5kZXhPZignPycpID09PSAtMSkgPyAnPycgOiAnJic7IC8vIEFkZCBxdWVyeSBwYXJhbSBzZXBhcmF0b3JcbiAgICByZWxvYWRQYXRoICs9ICd2ZXJzaW9uPScgKyByZW1vdGVWZXJzaW9uOyAvLyBBZGQgdmVyc2lvbiAodG8gYXZvaWQgYSByZWxvYWQgaW5maW5pdGUgbG9vcClcblxuICAgIC8vIEFscmVhZHkgdHJ5IHRvIHJlbG9hZCwgYnV0IHZlcnNpb24gc3RpbGwgYmFkXG4gICAgaWYgKHJlbG9hZFBhdGggPT09IGxvY2F0aW9uLmhyZWYpIHtcbiAgICAgIGlmIChjYW5BdXRvUmVsb2FkKSBjb25zb2xlLmVycm9yKGBbcGxhdGZvcm1dIFJlbG9hZGVkIHBhZ2UgZmFpbGVkLCBiZWNhdXNlIHZlcnNpb24gc3RpbGwgbWlzbWF0Y2ghIFBsZWFzZSBjaGVjayB2ZXJzaW9uLmFwcHVwIGZpbGUgKGV4cGVjdGVkIGFwcCB2ZXJzaW9uOiAke2FjdHVhbFZlcnNpb259KWApO1xuICAgICAgLy8gU3RvcCB0aW1lciwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtwbGF0Zm9ybV0gTW9yZSByZWNlbnQgdmVyc2lvbiBkZXRlY3RlZCAocmVtb3RlOiAke3JlbW90ZVZlcnNpb259LCBhY3R1YWw6ICR7YWN0dWFsVmVyc2lvbn1gKTtcblxuICAgIC8vIEF1dG8gcmVsb2FkXG4gICAgaWYgKGNhbkF1dG9SZWxvYWQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBXaWxsIHJlbG9hZGluZyBhdCAnICsgcmVsb2FkUGF0aCk7XG4gICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgIC8vIEFwcCBzdG9wXG4gICAgfVxuICAgIC8vIEFzayB1c2VyIHRvIHJlbG9hZFxuICAgIGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnQ09ORklSTS5SRUxPQURfQVBQJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge3ZlcnNpb246IHJlbW90ZVZlcnNpb24sIG5hbWU6IHRoaXMuZW52aXJvbm1lbnQubmFtZX0sXG4gICAgICAgIHR5cGU6ICdpbmZvJywgZHVyYXRpb246IC0xLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgLy8gUmVsb2FkIGJ1dHRvblxuICAgICAgICAgIHt0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uQlROX1JFTE9BRCcpLFxuICAgICAgICAgICAgc2lkZTogJ2VuZCcsXG4gICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF19KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPEhUTUxJb25Ub2FzdEVsZW1lbnQ+IHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgb25XaWxsUHJlc2VudDogKHQpID0+IHJlc29sdmUodClcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblN0YXJ0dXBFcnJvcihlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEZhaWxlZCBzdGFydGluZyB0aGUgcGxhdGZvcm0hICcgKyBKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICBsZXQgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgY29uc3QgZGV0YWlsc01lc3NhZ2UgPSBlcnIgJiYgKGVyci5kZXRhaWxzICYmIGVyci5kZXRhaWxzLm1lc3NhZ2UgfHwgZXJyLmRldGFpbHMpO1xuICAgIC8vIFNldCBzcGVjaWZpYyBlcnJvciB3aGVuIEZpcmVmb3ggaXMgaW4gcHJpdmF0ZSBtb2RlIG9yIGhpc3RvcnkgbmV2ZXIgcmVtZW1iZXJlZCAoc2VlIE1hbnRpcyBJZnJlbWVyICM1NjQ0MSlcbiAgICBpZiAoZXJyLmNvZGUgPT09IDExICYmIHRoaXMuY2RrUGxhdGZvcm0uRklSRUZPWCkge1xuICAgICAgbWVzc2FnZSA9ICdFUlJPUi5GSVJFRk9YX05PX1NUT1JBR0UnO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2xhdGUpIHtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSkge1xuICAgICAgICBtZXNzYWdlICs9IGAge2NvZGU6ICR7ZXJyLmNvZGV9fWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBGYXRhbCBlcnJvcjogUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlxcblxcbntjb2RlOiAke2VyciAmJiBlcnIuY29kZSB8fCAnbnVsbCd9LCBtZXNzYWdlOiBcIiR7bWVzc2FnZX1cIn1gO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2FzdENvbnRyb2xsZXIpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGA8YnIvPjxzbWFsbD4ke2RldGFpbHNNZXNzYWdlfTwvc21hbGw+YDtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh3aW5kb3cpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG57Y2F1c2U6IFwiJHtkZXRhaWxzTWVzc2FnZX1cIn1gO1xuICAgICAgfVxuICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5kZXRhaWxzKSBjb25zb2xlLmVycm9yKCdjYXVzZScsIGVyci5kZXRhaWxzKTtcbiAgICB9XG4gIH1cbn1cblxuIl19
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVUzRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUYsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUduRSxPQUFPLEVBQUMsSUFBSSxFQUFjLEVBQUUsRUFBZ0IsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBOEIsc0JBQXNCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWMsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFDLE1BQU0sSUFBSSxZQUFZLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUU5QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hELG1CQUFtQixFQUFFLFVBQVU7SUFDL0IsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLHNDQUFzQztJQUM1RSxzSUFBc0k7SUFDdEksbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQixzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsd0JBQXdCO0NBQ3pCLENBQUMsQ0FBQztBQUdILE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQVVuRCxZQUNVLGFBQXVCLEVBQ3ZCLFdBQXdCLEVBQ3hCLGVBQWdDLEVBQ2hDLFNBQTJCLEVBQzNCLFdBQThCLEVBQzlCLGNBQThCLEVBQzlCLGVBQWdDLEVBQ2hDLFFBQThCLEVBQzlCLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLEtBQW1CLEVBQ25CLGFBQTRCLEVBQ0wsV0FBVyxFQUN0QixVQUFzQjtRQUUxQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFoQmIsa0JBQWEsR0FBYixhQUFhLENBQVU7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNMLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFsQnBDLHFCQUFnQixHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBc0JwRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxFQUFFLENBQUMsWUFBdUI7UUFDeEIsUUFBUSxZQUFZLEVBQUU7WUFDcEIsS0FBSyxRQUFRO2dCQUNYLHVFQUF1RTtnQkFDdkUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsS0FBSyxXQUFXO2dCQUNkLHVFQUF1RTtnQkFDdkUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRTtnQkFDRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sS0FBSyxDQUFDLENBQUMsNENBQTRDO0lBQzVELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFUyxLQUFLLENBQUMsU0FBUztRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVoRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUzQixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxjQUFjLElBQUksQ0FBQyxRQUFRLGdCQUFnQixJQUFJLENBQUMsVUFBVSxjQUFjLElBQUksQ0FBQyxRQUFRLFVBQVUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFckssc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFM0MsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFdkMsd0JBQXdCO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFaEMsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV0QixzQkFBc0I7WUFDdEIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO2dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTthQUMzQixDQUFDLENBQUM7WUFFSCx1REFBdUQ7WUFDdkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQy9DO1lBRUQsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCO2lCQUN2QyxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDthQUN6RDtpQkFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRTNELE9BQU8sQ0FBQyxJQUFJLENBQUMsOENBQThDLElBQUksQ0FBQyxPQUFPLGdCQUFnQixJQUFJLENBQUMsVUFBVSxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxXQUFXLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFM0wsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtpQkFDdEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFrQixDQUFDLEVBQ3hGLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDdkIsb0JBQW9CLEVBQUUsQ0FDdkI7aUJBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFFTCxzRUFBc0U7WUFDdEUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixVQUFVLENBQUMsS0FBSyxJQUFHLEVBQUU7b0JBQ25CLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUUxQixxQkFBcUI7b0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxvQ0FBb0M7WUFDcEMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4RixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQztxQkFDaEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQywyQ0FBMkMsRUFBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNWLHVCQUF1QjtZQUN2QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFXLEVBQUUsSUFBa0I7UUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1NBQ3BDO2FBQ0k7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFxRTtRQUM1RSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFFakcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBRXBCLHdDQUF3QztZQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFJLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFdEIsbUNBQW1DO1lBQ25DLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxPQUFPO21CQUN4RCxPQUFPLENBQUMsNkJBQTZCLEVBQUUsT0FBTzttQkFDOUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7bUJBQ3JELE9BQU8sQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDO1lBRWpDLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUM3QixnQkFBZ0I7aUJBQ2YsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV4QixrQ0FBa0M7WUFDbEMsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6RixPQUFPLElBQUksTUFBTSxDQUFDO2FBQ25CO1lBRUQsTUFBTSxlQUFlLEdBQW9CO2dCQUN2QyxvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxzQkFBc0I7Z0JBQ3JFLEdBQUcsT0FBTztnQkFDVixRQUFRLEVBQUUsU0FBUztnQkFDbkIsOEJBQThCLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCO29CQUNwRSxDQUFDLENBQUM7d0JBQ0EsT0FBTyxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQjt3QkFDakQsR0FBRyxPQUFPLENBQUMsOEJBQThCO3dCQUN6QyxPQUFPO3FCQUNSO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLDZCQUE2QixFQUFFLE9BQU8sQ0FBQyw2QkFBNkI7b0JBQ2xFLENBQUMsQ0FBQzt3QkFDQSxPQUFPLEVBQUUsb0JBQW9CLENBQUMsbUJBQW1CO3dCQUNqRCxHQUFHLE9BQU8sQ0FBQyw2QkFBNkI7d0JBQ3hDLE9BQU87cUJBQ1I7b0JBQ0QsQ0FBQyxDQUFDLFNBQVM7YUFDZCxDQUFDO1lBRUYsaUJBQWlCO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUV2RCw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELE9BQU8sSUFBSTtpQkFDUixJQUFJLENBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZFLGFBQWE7Z0JBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0UscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbEQsK0RBQStEO2dCQUMvRCxJQUFJLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLEtBQUssb0JBQW9CLENBQUMsbUJBQW1CLEVBQUU7b0JBQ3hHLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLENBQUMsdUJBQXVCLENBQUM7b0JBQ3RHLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDdkM7Z0JBQ0QsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0w7UUFFRCwyREFBMkQ7UUFDM0QsbUpBQW1KO2FBQzlJO1lBQ0gsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCw2QkFBNkI7SUFFbkIsdUJBQXVCLENBQUMsTUFBZSxFQUFFLE1BQVcsTUFBTTtRQUNsRSxJQUFJLE1BQU07WUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBRXBDLHNGQUFzRjtRQUN0RixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7ZUFDekUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQ3ZFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0dBQWtHLENBQUMsQ0FBQztZQUNqSCxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBQyxlQUFlLENBQUMsQ0FBQztZQUM1RSxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNEO0lBRUgsQ0FBQztJQUVTLEtBQUssQ0FBQyx5QkFBeUI7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxDQUFDLE9BQU87UUFFckMsT0FBTyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBRTVELElBQUksTUFBYyxDQUFDO1FBQ25CLElBQUk7WUFDRixNQUFNLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFFckQsZ0NBQWdDO1lBQ2hDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDbkMsTUFBTSxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBQ0QsT0FBTSxHQUFHLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQU8sSUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6STtJQUNILENBQUM7SUFHUyxLQUFLLENBQUMsa0JBQWtCO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVoRCxrR0FBa0c7UUFDbEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU5RCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBRXZCLHdCQUF3QjtnQkFDeEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDdkIsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7aUJBQ3RCO2dCQUVELG9CQUFvQjtnQkFDcEIsSUFBSTtvQkFDRixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQzdEO2dCQUNDLDJCQUEyQjtnQkFDN0IsT0FBTyxHQUFHLEVBQUU7b0JBQ1YsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7aUJBQzlFO2dCQUVELHNCQUFzQjtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7d0JBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDakM7aUJBQ0Y7cUJBQ0k7b0JBQ0gsa0VBQWtFO29CQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNwRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakUsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxjQUFjLENBQUMsTUFBZ0I7UUFDdkMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQ3ZFLE9BQU8sQ0FBQyxJQUFJLENBQUMsOENBQThDLE1BQU0saUJBQWlCLFFBQVEsR0FBRyxJQUFJLDhCQUE4QixDQUFDLENBQUM7UUFDakksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztJQUNqRixDQUFDO0lBRVMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUE4QztRQUM1RSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBRWpFLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRXZFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQy9DLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUdBQWlHLENBQUMsQ0FBQztZQUNqSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyx1QkFBdUI7WUFDakUsT0FBTyxDQUFDLE9BQU87U0FDaEI7UUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEUsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxVQUFVLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztZQUM5RyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyx1QkFBdUI7WUFDakUsT0FBTztTQUNSO1FBRUQsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxhQUFhLGVBQWUsYUFBYSxJQUFJLENBQUMsQ0FBQztZQUNsSSxPQUFPO1NBQ1I7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7UUFDMUcsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRCQUE0QjtRQUN4RixVQUFVLElBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLGdEQUFnRDtRQUUxRiwrQ0FBK0M7UUFDL0MsSUFBSSxVQUFVLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtZQUNoQyxJQUFJLGFBQWE7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywySEFBMkgsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUM5SyxxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLE9BQU87U0FDUjtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELGFBQWEsYUFBYSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRTVHLGNBQWM7UUFDZCxJQUFJLGFBQWEsRUFBRTtZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQzNELFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQzNCLFdBQVc7U0FDWjtRQUNELHFCQUFxQjthQUNoQjtZQUNILE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsT0FBTyxFQUFFLG9CQUFvQjtnQkFDN0IsYUFBYSxFQUFFLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUM7Z0JBQ3BFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxFQUFFO29CQUNQLGdCQUFnQjtvQkFDaEIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7d0JBQ2hELElBQUksRUFBRSxLQUFLO3dCQUNYLE9BQU8sRUFBRSxHQUFHLEVBQUU7NEJBQ1osUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7NEJBQzNCLE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUM7cUJBQ0Y7aUJBQ0Y7YUFBQyxDQUFDLENBQUM7U0FDUDtJQUNILENBQUM7SUFFUyxTQUFTLENBQUMsSUFBc0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1RSxHQUFHLElBQUk7WUFDUCxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHO1FBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUN4QyxNQUFNLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRiw2R0FBNkc7UUFDN0csSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUMvQyxPQUFPLEdBQUcsMEJBQTBCLENBQUM7U0FDdEM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsT0FBTyxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO2FBQ25DO1NBQ0Y7YUFDSTtZQUNILE9BQU8sR0FBRyw2REFBNkQsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTSxlQUFlLE9BQU8sSUFBSSxDQUFDO1NBQzVIO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksY0FBYyxFQUFFO2dCQUNsQixPQUFPLElBQUksZUFBZSxjQUFjLFVBQVUsQ0FBQzthQUNwRDtZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDWixlQUFlLEVBQUUsSUFBSTtnQkFDckIsT0FBTzthQUNSLENBQUMsQ0FBQztTQUNKO2FBQ0ksSUFBSSxNQUFNLEVBQUU7WUFDZixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLGdCQUFnQixjQUFjLElBQUksQ0FBQzthQUMvQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkI7YUFDSTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQzs7NkdBbmZVLGVBQWUsd1pBd0JoQixXQUFXO2lIQXhCVixlQUFlLGNBREgsTUFBTTs0RkFDbEIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQXlCM0IsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZX0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7UGxhdGZvcm1zfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7QXVkaW9Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7UGxhdGZvcm0gYXMgQ2RrUGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7aXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdGllc1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS9lbnRpdGllcy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNraXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4vY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7TW9tZW50RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7RG93bmxvYWRlciwgRG93bmxvYWRSZXF1ZXN0LCBOb3RpZmljYXRpb25WaXNpYmlsaXR5fSBmcm9tICdAaW9uaWMtbmF0aXZlL2Rvd25sb2FkZXIvbmd4JztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNNb2JpbGUsIGlzV2luZG93c30gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtGaWxlc1V0aWxzLCBNaW1lVHlwZXN9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHtVcmlVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJpLnV0aWxzJztcbmltcG9ydCB7U3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJztcbmltcG9ydCB7U3RhdHVzQmFyfSBmcm9tICdAY2FwYWNpdG9yL3N0YXR1cy1iYXInO1xuaW1wb3J0IHtCcm93c2VyLCBPcGVuT3B0aW9uc30gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7S2V5Ym9hcmR9IGZyb20gJ0BjYXBhY2l0b3Iva2V5Ym9hcmQnO1xuaW1wb3J0IHtDYXBhY2l0b3JQbHVnaW5zfSBmcm9tICcuLi8uLi9zaGFyZWQvY2FwYWNpdG9yL3BsdWdpbnMnO1xuaW1wb3J0IHtsb2NhbGUgYXMgbW9tZW50TG9jYWxlfSBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgY29uc3QgQW5kcm9pZE9zRW52aXJvbm1lbnQgPSBPYmplY3QuZnJlZXplKHtcbiAgRElSRUNUT1JZX0RPV05MT0FEUzogJ0Rvd25sb2FkJyxcbiAgRElSRUNUT1JZX0RPV05MT0FEU19PTEQ6ICdEb3dubG9hZHMnLCAvLyBPbGQgbmFtZSwgZm9yIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAvLyBUT0RPOiBmaW5kIHZhbHVlIGZvciB0aGlzLiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvb3MvRW52aXJvbm1lbnQjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoamF2YS5pby5GaWxlKVxuICAvLyBESVJFQ1RPUllfTVVTSUMsXG4gIC8vIERJUkVDVE9SWV9QT0RDQVNUUyxcbiAgLy8gRElSRUNUT1JZX1JJTkdUT05FUyxcbiAgLy8gRElSRUNUT1JZX0FMQVJNUyxcbiAgLy8gRElSRUNUT1JZX05PVElGSUNBVElPTlMsXG4gIC8vIERJUkVDVE9SWV9QSUNUVVJFUyxcbiAgLy8gRElSRUNUT1JZX01PVklFUyxcbiAgLy8gRElSRUNUT1JZX0RDSU0sXG4gIC8vIERJUkVDVE9SWV9ET0NVTUVOVFMsXG4gIC8vIERJUkVDVE9SWV9BVURJT0JPT0tTLFxufSk7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY2FwYWNpdG9yOiBib29sZWFuO1xuICBwcml2YXRlIF9hbmRyb2lkOiBib29sZWFuO1xuICBwcml2YXRlIF9pb3M6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rvd25sb2FkaW5nSm9iczogTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjaGVja0FwcFZlcnNpb25UaW1lcjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW9uaWNQbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdWRpb1Byb3ZpZGVyOiBBdWRpb1Byb3ZpZGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRvd25sb2FkZXI6IERvd25sb2FkZXJcbiAgKSB7XG4gICAgc3VwZXIoaW9uaWNQbGF0Zm9ybSk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGxhdGZvcm1OYW1lKSB7XG4gICAgICBjYXNlICdtb2JpbGUnOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICAgIGNhc2UgJ21vYmlsZXdlYic6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKSAmJiAhaXNXaW5kb3dzKHdpbmRvdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMuaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWNpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvcmRvdmE7XG4gIH1cblxuICBpc0FuZHJvaWRDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbmRyb2lkICYmIHRoaXMuX2NvcmRvdmEgfHwgZmFsc2U7XG4gIH1cblxuICBpc0lPU0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lvcyAmJiB0aGlzLl9jb3Jkb3ZhIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIEFwcCAoYW5kIE5PVCBhIG1vYmlsZSB3ZWIpXG4gICAqL1xuICBpc0FwcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkgfHwgdGhpcy5pc0lPU0NvcmRvdmEoKTtcbiAgfVxuXG4gIGlzV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0FwcCgpO1xuICB9XG5cbiAgaXNNb2JpbGVXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlICYmIHRoaXMuaXNXZWIoKTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGVyICYmIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpO1xuICB9XG5cbiAgZ2V0IGNhbk9wZW5GaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTsgLy8gVE9ETzogZml4bWUgdXNpbmcgQGNhcGFjaXRvci9maWxlc3lzdGVtID9cbiAgfVxuXG4gIHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS53aWR0aCgpO1xuICB9XG5cbiAgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuaXMoJ21vYmlsZScpO1xuICAgICAgdGhpcy5fY29yZG92YSA9IHRoaXMuaXMoJ2NvcmRvdmEnKTtcbiAgICAgIHRoaXMuX2NhcGFjaXRvciA9IHRoaXMuaXMoJ2NhcGFjaXRvcicpO1xuICAgICAgdGhpcy5fYW5kcm9pZCA9IHRoaXMuaXMoJ2FuZHJvaWQnKTtcbiAgICAgIHRoaXMuX2lvcyA9IHRoaXMuaXMoJ2lvcycpO1xuXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gRGV0ZWN0ZWQge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCBjb3Jkb3ZhOiAke3RoaXMuX2NvcmRvdmF9LCBjYXBhY2l0b3I6ICR7dGhpcy5fY2FwYWNpdG9yfSwgYW5kcm9pZDogJHt0aGlzLl9hbmRyb2lkfSwgaW9zOiAke3RoaXMuX2lvc31gKTtcblxuICAgICAgLy8gQ29uZmlndXJlIENTUyBjbGFzc1xuICAgICAgdGhpcy5jb25maWd1cmVHbG9iYWxDc3NDbGFzcyh0aGlzLl9tb2JpbGUpO1xuXG4gICAgICAvLyBDb25maWd1cmUgQ2FwYWNpdG9yIHBsdWdpbnNcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucygpO1xuXG4gICAgICAvLyBDb25maWd1cmUgdHJhbnNsYXRpb25cbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlVHJhbnNsYXRlKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBjYWNoZVxuICAgICAgdGhpcy5jb25maWd1cmVDYWNoZSgpO1xuXG4gICAgICAvLyBTdGFydCByb290IHNlcnZpY2VzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuZW50aXRpZXNTdG9yYWdlLnJlYWR5KCksXG4gICAgICAgIHRoaXMuc2V0dGluZ3MucmVhZHkoKSxcbiAgICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5yZWFkeSgpLFxuICAgICAgICB0aGlzLmF1ZGlvUHJvdmlkZXIucmVhZHkoKVxuICAgICAgXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlYiBhcHAgaGFzIHVwZGF0ZSwgYW5kIHJlbG9hZCBwYWdlIGlmIG5lZWRcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBWZXJzaW9uKHtjYW5SZWxvYWQ6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNhY2hlIGNvbmZpZ3VyYXRpb24gd2hlbiBuZXR3b3JrIGNoYW5nZWRcbiAgICAgIHRoaXMubmV0d29ya1NlcnZpY2Uub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIEFscmVhZHkgZG9uZSBvbmNlLCBzbyB3ZSBza2lwIHRoZSBmaXJzdCBldmVudFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodHlwZSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpO1xuXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0gW09LXSB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCB3ZWI6ICR7dGhpcy5pc1dlYigpfSwgZG93bmxvYWRlcjogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhdXRoZW50aWNhdGlvbiB0eXBlXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChjb25maWcgPT4gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfVE9LRU5fVFlQRSkgYXMgQXV0aFRva2VuVHlwZSksXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW5UeXBlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCB0b2tlbiB0eXBlIHske3Rva2VuVHlwZX19YCk7XG4gICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS50b2tlblR5cGUgPSB0b2tlblR5cGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBIaWRlIHRoZSBzcGxhc2hzY3JlZW4gKGlmIG1vYmlsZSkgLSBhZnRlciAxcyAtIGFuZCBwbGF5IHN0YXJ0IHNvdW5kXG4gICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZFxuICAgICAgICAgIHRoaXMuYXVkaW9Qcm92aWRlci5wbGF5U3RhcnR1cFNvdW5kKCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBuZXcgdmVyc2lvbiwgZXZlcnkgMSBtaW5cbiAgICAgIGNvbnN0IGNoZWNrSW50ZXJ2YWxNcyA9ICh0aGlzLmVudmlyb25tZW50LmNoZWNrQXBwVmVyc2lvbkludGVydmFsSW5TZWNvbmRzIHx8IDApICogMTAwMDtcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIGNoZWNrSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lciA9IHRpbWVyKGNoZWNrSW50ZXJ2YWxNcywgY2hlY2tJbnRlcnZhbE1zKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB0aGlzLmNoZWNrQXBwVmVyc2lvbih7c2lsZW50OiB0cnVlLCBjYW5SZWxvYWQ6IGZhbHNlIC8qZG8gTk9UIGF1dG8gcmVsb2FkLCB3aGVuIGFwcCBpcyBzdGFydGVkKi99KSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE1hbmFnZSBzdGFydHVwIGVycm9yXG4gICAgICByZXR1cm4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPcGVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBPcGVuaW5nIGxpbms6ICR7dXJsfWApO1xuICAgIGlmICh0aGlzLl9tb2JpbGUgJiYgdGhpcy5fY2FwYWNpdG9yKSB7XG4gICAgICBhd2FpdCBCcm93c2VyLm9wZW4oe3VybCwgLi4ub3B0c30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgb3B0cz8ud2luZG93TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG93bmxvYWRpbmdKb2IodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHVyaSk7XG4gIH1cblxuICBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4pOiBPYnNlcnZhYmxlPHN0cmluZ3x1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwncmVxdWVzdFxcJyBvciBcXCdyZXF1ZXN0LnVyaVxcJycpO1xuXG4gICAgaWYgKHRoaXMuY2FuRG93bmxvYWQpIHtcblxuICAgICAgLy8gQ2hlY2sgaWYgbm90IGFscmVhZHkgZG93bmxvYWRpbmcgZmlsZVxuICAgICAgbGV0IGpvYiQgPSB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHJlcXVlc3QudXJpKTtcbiAgICAgIGlmIChqb2IkKSByZXR1cm4gam9iJDtcblxuICAgICAgLy8gQ29tcHV0ZSBzdWJQYXRoIChmaW5hbCBmaWxlbmFtZSlcbiAgICAgIGxldCBzdWJQYXRoID0gcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXI/LnN1YlBhdGhcbiAgICAgICAgfHwgcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0Rpcj8uc3ViUGF0aFxuICAgICAgICB8fCByZXF1ZXN0LmZpbGVuYW1lIHx8IFVyaVV0aWxzLmdldEZpbGVuYW1lKHJlcXVlc3QudXJpKVxuICAgICAgICB8fCByZXF1ZXN0LnRpdGxlIHx8ICdkb3dubG9hZCc7XG5cbiAgICAgIHN1YlBhdGggPSBzdWJQYXRoLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBkaXJUeXBlOiBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTLFxuICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0YXJ0IGRvd25sb2FkXG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIERvd25sb2FkaW5nLCB1c2luZyByZXF1ZXN0OiAnICsgSlNPTi5zdHJpbmdpZnkoZG93bmxvYWRSZXF1ZXN0KSk7XG4gICAgICBqb2IkID0gZnJvbSh0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0KSk7XG5cbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgcmVxdWVzdCB1cmlcbiAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5zZXQoZG93bmxvYWRSZXF1ZXN0LnVyaSwgam9iJCk7XG4gICAgICByZXR1cm4gam9iJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAobG9jYXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIEZpbGUgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYXQ6JyArIGxvY2F0aW9uKTtcbiAgICAgICAgICAgIC8vIEZvcmdldCBqb2JcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycikpO1xuICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZGVsZXRlKGRvd25sb2FkUmVxdWVzdC51cmkpO1xuXG4gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGFub3RoZXIgbG9jYXRpb24gLSBpc3N1ZSBpbiBvbGRlciBBbmRyb2lkIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIuZGlyVHlwZSA9IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFNfT0xEO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZChkb3dubG9hZFJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlR2xvYmFsQ3NzQ2xhc3MobW9iaWxlOiBib29sZWFuLCB3aW46IGFueSA9IHdpbmRvdykge1xuICAgIGlmIChtb2JpbGUpIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuXG4gICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICBpZiAoIW1vYmlsZSAmJiAod2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwbHQtbW9iaWxlJylcbiAgICAgIHx8IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygncGx0LW1vYmlsZXdlYicpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIEZvcmNlIGNsYXNzIGxpc3QgdG86IDxodG1sIGNsYXNzPVwicGx0LWRlc2t0b3BcIj4uIFdvcmthcm91bmQgZm9yIFdpbmRvd3MgdG91Y2ggc2NyZWVuLicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwbHQtbW9iaWxlJywncGx0LW1vYmlsZXdlYicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwbHQtZGVza3RvcCcpO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHBsdWdpbiA9IENhcGFjaXRvclBsdWdpbnMuU3RhdHVzQmFyO1xuICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7b3ZlcmxheTogZmFsc2V9KTtcblxuICAgICAgLy8gSGlkZSBhY2Nlc3NvcnkgYmFyIChpT1Mgb25seSlcbiAgICAgIGlmICh0aGlzLmlzKCdpb3MnKSkge1xuICAgICAgICBwbHVnaW4gPSBDYXBhY2l0b3JQbHVnaW5zLktleWJvYXJkO1xuICAgICAgICBhd2FpdCBLZXlib2FyZC5zZXRBY2Nlc3NvcnlCYXJWaXNpYmxlKHtpc1Zpc2libGU6IGZhbHNlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3BsYXRmb3JtXSBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbn0gcGx1Z2luOiAke2Vyci5tZXNzYWdlfHxlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICB9XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyBjb25maWd1cmVUcmFuc2xhdGUoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGkxOG4gLi4uJyk7XG5cbiAgICAvLyB0aGlzIGxhbmd1YWdlIHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSB0cmFuc2xhdGlvbiBpc24ndCBmb3VuZCBpbiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG5cbiAgICAgICAgLy8gZm9yY2UgJ2VuJyBhcyAnZW5fR0InXG4gICAgICAgIGlmIChldmVudC5sYW5nID09PSAnZW4nKSB7XG4gICAgICAgICAgZXZlbnQubGFuZyA9ICdlbl9HQic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25maWcgbW9tZW50IGxpYlxuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vbWVudExvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBldmVudC5sYW5nICsgJ30nKTtcbiAgICAgICAgfVxuICAgICAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbW9tZW50TG9jYWxlKCdlbicpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBVbmtub3duIGxvY2FsZSBmb3IgbW9tZW50IGxpYi4gVXNpbmcgZGVmYXVsdCBbZW5dJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKG1vbWVudExvY2FsZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2Uuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEubG9jYWxlKSB7XG4gICAgICAgICAgaWYgKGRhdGEubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGRhdGEubG9jYWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gSG90Zml4IGZyb20gbHVkb3ZpYy5wZWNxdW90QGUtaXMucHJvICgxNC8xMS8yMDIxKSAtIFNlZSAxLjIwLjQyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVzZSBhY2NvdW50J3Mgc2V0dGluZ3MsIChsaWtlIGxvY2FsZSksIHdoZW4gYWNjb3VudCBpbmhlcml0YW5jZSBlbmFibGVkXG4gICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhY2NvdW50ID0+IHtcbiAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MuYXNMb2NhbFNldHRpbmdzKCk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MuYXBwbHkoYWNjb3VudFNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDYWNoZShvbmxpbmU/OiBib29sZWFuKSB7XG4gICAgb25saW5lID0gdG9Cb29sZWFuKG9ubGluZSwgdGhpcy5jYWNoZS5pc09ubGluZSgpKTtcbiAgICBjb25zdCBjYWNoZVRUTCA9IG9ubGluZSA/IDM2MDAgLyogMWggKi8gOiAzNjAwICogMjQgKiAzMDsgLyogMSBtb250aCAqL1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDb25maWd1cmluZyBjYWNoZSBbT0tdIHtvbmxpbmU6ICR7b25saW5lfSwgdGltZVRvTGl2ZTogJHtjYWNoZVRUTCAvIDM2MDB9aCwgb2ZmbGluZUludmFsaWRhdGU6IGZhbHNlfWApO1xuICAgIHRoaXMuY2FjaGUuc2V0RGVmYXVsdFRUTChjYWNoZVRUTCk7XG4gICAgdGhpcy5jYWNoZS5zZXRPZmZsaW5lSW52YWxpZGF0ZShmYWxzZSk7IC8vIERvIG5vdCBpbnZhbGlkYXRlIGNhY2hlIHdoZW4gb2ZmbGluZVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrQXBwVmVyc2lvbihvcHRzPzoge2NhblJlbG9hZD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKHRoaXMubmV0d29ya1NlcnZpY2Uub2ZmbGluZSB8fCAhdGhpcy5pc1dlYigpKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnN0IHNpbGVudCA9IG9wdHM/LnNpbGVudCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGNvbnN0IGNhbkF1dG9SZWxvYWQgPSAhb3B0cyB8fCBvcHRzLmNhblJlbG9hZCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbi4uLicpO1xuXG4gICAgY29uc3QgYWN0dWFsVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIE1pc3NpbmcgcmVxdWlyZWQgdmFsdWUgZm9yIFxcJ2Vudmlyb25tZW50LnZlcnNpb25cXCcuIENhbm5vdCBjaGVjayByZW1vdGUgYXBwIHZlcnNpb24uJyk7XG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpOyAvLyBTdG9wIHRpbWVyIGlmIGV4aXN0c1xuICAgICAgcmV0dXJuOyAvLyBTa2lwXG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3RlVmVyc2lvbiA9IGF3YWl0IHRoaXMubmV0d29ya1NlcnZpY2UuZ2V0QXBwVmVyc2lvbigpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocmVtb3RlVmVyc2lvbikpIHtcbiAgICAgIGlmIChwcm9kdWN0aW9uICYmICFzaWxlbnQpIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gQ2Fubm90IGxvYWQgcmVtb3RlIGFwcCB2ZXJzaW9uLiBTa2lwcGluZyB2ZXJzaW9uIGNoZWNrJyk7XG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpOyAvLyBTdG9wIHRpbWVyIGlmIGV4aXN0c1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHJlbW90ZVZlcnNpb24sIGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbiBbT0tdIHtyZW1vdGU6ICcke3JlbW90ZVZlcnNpb259JywgYWN0dWFsOiAnJHthY3R1YWxWZXJzaW9ufSd9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3ZXIgdmVyc2lvbiBleGlzdHNcbiAgICBsZXQgcmVsb2FkUGF0aCA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvWyZdP3ZlcnNpb249WzAtOS5dKy9naSwgJycpOyAvLyBSZW1vdmUgb2xkIHZlcnNpb24gaW4gcXVlcnkgcGFyYW1zXG4gICAgcmVsb2FkUGF0aCArPSAocmVsb2FkUGF0aC5pbmRleE9mKCc/JykgPT09IC0xKSA/ICc/JyA6ICcmJzsgLy8gQWRkIHF1ZXJ5IHBhcmFtIHNlcGFyYXRvclxuICAgIHJlbG9hZFBhdGggKz0gJ3ZlcnNpb249JyArIHJlbW90ZVZlcnNpb247IC8vIEFkZCB2ZXJzaW9uICh0byBhdm9pZCBhIHJlbG9hZCBpbmZpbml0ZSBsb29wKVxuXG4gICAgLy8gQWxyZWFkeSB0cnkgdG8gcmVsb2FkLCBidXQgdmVyc2lvbiBzdGlsbCBiYWRcbiAgICBpZiAocmVsb2FkUGF0aCA9PT0gbG9jYXRpb24uaHJlZikge1xuICAgICAgaWYgKGNhbkF1dG9SZWxvYWQpIGNvbnNvbGUuZXJyb3IoYFtwbGF0Zm9ybV0gUmVsb2FkZWQgcGFnZSBmYWlsZWQsIGJlY2F1c2UgdmVyc2lvbiBzdGlsbCBtaXNtYXRjaCEgUGxlYXNlIGNoZWNrIHZlcnNpb24uYXBwdXAgZmlsZSAoZXhwZWN0ZWQgYXBwIHZlcnNpb246ICR7YWN0dWFsVmVyc2lvbn0pYCk7XG4gICAgICAvLyBTdG9wIHRpbWVyLCB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybihgW3BsYXRmb3JtXSBNb3JlIHJlY2VudCB2ZXJzaW9uIGRldGVjdGVkIChyZW1vdGU6ICR7cmVtb3RlVmVyc2lvbn0sIGFjdHVhbDogJHthY3R1YWxWZXJzaW9ufWApO1xuXG4gICAgLy8gQXV0byByZWxvYWRcbiAgICBpZiAoY2FuQXV0b1JlbG9hZCkge1xuICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIFdpbGwgcmVsb2FkaW5nIGF0ICcgKyByZWxvYWRQYXRoKTtcbiAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgLy8gQXBwIHN0b3BcbiAgICB9XG4gICAgLy8gQXNrIHVzZXIgdG8gcmVsb2FkXG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdDT05GSVJNLlJFTE9BRF9BUFAnLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7dmVyc2lvbjogcmVtb3RlVmVyc2lvbiwgbmFtZTogdGhpcy5lbnZpcm9ubWVudC5uYW1lfSxcbiAgICAgICAgdHlwZTogJ2luZm8nLCBkdXJhdGlvbjogLTEsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyBSZWxvYWQgYnV0dG9uXG4gICAgICAgICAge3RleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NPTU1PTi5CVE5fUkVMT0FEJyksXG4gICAgICAgICAgICBzaWRlOiAnZW5kJyxcbiAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHJlbG9hZFBhdGg7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXX0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8SFRNTElvblRvYXN0RWxlbWVudD4ge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50XFwncyBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvbldpbGxQcmVzZW50OiAodCkgPT4gcmVzb2x2ZSh0KVxuICAgICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU3RhcnR1cEVycm9yKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gRmFpbGVkIHN0YXJ0aW5nIHRoZSBwbGF0Zm9ybSEgJyArIEpTT04uc3RyaW5naWZ5KGVycikpO1xuICAgIGxldCBtZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycjtcbiAgICBjb25zdCBkZXRhaWxzTWVzc2FnZSA9IGVyciAmJiAoZXJyLmRldGFpbHMgJiYgZXJyLmRldGFpbHMubWVzc2FnZSB8fCBlcnIuZGV0YWlscyk7XG4gICAgLy8gU2V0IHNwZWNpZmljIGVycm9yIHdoZW4gRmlyZWZveCBpcyBpbiBwcml2YXRlIG1vZGUgb3IgaGlzdG9yeSBuZXZlciByZW1lbWJlcmVkIChzZWUgTWFudGlzIElmcmVtZXIgIzU2NDQxKVxuICAgIGlmIChlcnIuY29kZSA9PT0gMTEgJiYgdGhpcy5jZGtQbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBtZXNzYWdlID0gJ0VSUk9SLkZJUkVGT1hfTk9fU1RPUkFHRSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCB7Y29kZTogJHtlcnIuY29kZX19YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYEZhdGFsIGVycm9yOiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXFxuXFxue2NvZGU6ICR7ZXJyICYmIGVyci5jb2RlIHx8ICdudWxsJ30sIG1lc3NhZ2U6IFwiJHttZXNzYWdlfVwifWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvYXN0Q29udHJvbGxlcikge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDxici8+PHNtYWxsPiR7ZGV0YWlsc01lc3NhZ2V9PC9zbWFsbD5gO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHdpbmRvdykge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbntjYXVzZTogXCIke2RldGFpbHNNZXNzYWdlfVwifWA7XG4gICAgICB9XG4gICAgICB3aW5kb3cuYWxlcnQobWVzc2FnZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmRldGFpbHMpIGNvbnNvbGUuZXJyb3IoJ2NhdXNlJywgZXJyLmRldGFpbHMpO1xuICAgIH1cbiAgfVxufVxuXG4iXX0=
@@ -18778,8 +18778,16 @@ class PlatformService extends StartableService {
18778
18778
  }
18779
18779
  });
18780
18780
  this.settings.onChange.subscribe(data => {
18781
- if (data && data.locale && data.locale !== this.translate.currentLang) {
18782
- this.translate.use(data.locale);
18781
+ if (data) {
18782
+ if (data.locale) {
18783
+ if (data.locale !== this.translate.currentLang) {
18784
+ this.translate.use(data.locale);
18785
+ }
18786
+ }
18787
+ else {
18788
+ // Hotfix from ludovic.pecquot@e-is.pro (14/11/2021) - See 1.20.42
18789
+ this.translate.use(this.environment.defaultLocale);
18790
+ }
18783
18791
  }
18784
18792
  });
18785
18793
  // Use account's settings, (like locale), when account inheritance enabled