@sumaris-net/ngx-components 18.0.2-alpha6 → 18.0.2

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.
@@ -9,7 +9,7 @@ import { ENVIRONMENT } from '../../../environments/environment.class';
9
9
  import { APP_USER_TOKEN_SCOPES } from '../services/account.service';
10
10
  import { NewTokenModal } from './new-token.modal';
11
11
  import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
12
- import { isNotNilOrBlank } from '../../shared/functions';
12
+ import { isNotEmptyArray, isNotNilOrBlank } from '../../shared/functions';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@e-is/ngx-material-table";
15
15
  import * as i2 from "../services/config.service";
@@ -31,17 +31,17 @@ import * as i17 from "../table/table.pipes";
31
31
  import * as i18 from "../../../environments/environment.class";
32
32
  export class UserTokenTable extends AppInMemoryTable {
33
33
  configService;
34
- tokenScopes;
35
34
  useSticky = false;
36
35
  showScopes = false;
37
36
  defaultScope;
37
+ tokenScopes;
38
38
  constructor(injector, validatorService, configService, environment, tokenScopes) {
39
39
  super(injector, [...RESERVED_START_COLUMNS, 'name', 'scopes', 'lastUsedDate', 'expirationDate', 'creationDate', ...RESERVED_END_COLUMNS], UserToken, new InMemoryEntitiesService(UserToken, undefined, {
40
40
  filterFnFactory: () => () => true,
41
41
  equals: UserToken.equals,
42
42
  }), validatorService);
43
43
  this.configService = configService;
44
- this.tokenScopes = tokenScopes;
44
+ this.tokenScopes = tokenScopes ?? [];
45
45
  this.inlineEdition = false;
46
46
  this.allowRowDetail = false;
47
47
  this.defaultSortBy = 'creationDate';
@@ -85,8 +85,12 @@ export class UserTokenTable extends AppInMemoryTable {
85
85
  event?.preventDefault();
86
86
  event?.stopPropagation();
87
87
  const newToken = new UserToken();
88
- if (isNotNilOrBlank(this.defaultScope)) {
89
- newToken.scopes = [this.tokenScopes.find((scope) => scope.id === this.defaultScope)];
88
+ if (isNotNilOrBlank(this.defaultScope) && isNotEmptyArray(this.tokenScopes)) {
89
+ const scope = this.tokenScopes.find((scope) => scope.id === this.defaultScope);
90
+ if (!scope) {
91
+ console.warn("[token-table] Cannot found the default scope '${this.defaultScope}' in values of APP_USER_TOKEN_SCOPES!");
92
+ }
93
+ newToken.scopes = scope ? [scope] : [];
90
94
  }
91
95
  const modal = await this.modalCtrl.create({
92
96
  component: NewTokenModal,
@@ -150,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
150
154
  }] }], propDecorators: { useSticky: [{
151
155
  type: Input
152
156
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4udGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWNjb3VudC90b2tlbi50YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9hY2NvdW50L3Rva2VuLnRhYmxlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBb0IsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN6RCxNQUFNLE9BQU8sY0FBZSxTQUFRLGdCQUEyQjtJQVNqRDtJQUUyQztJQVY5QyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWpCLFVBQVUsR0FBRyxLQUFLLENBQUM7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QyxNQUFNOzswQkFZNUMsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUI7eUNBVmxDLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBVc2VyVG9rZW5WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdG9yL3VzZXItdG9rZW4udmFsaWRhdG9yJztcbmltcG9ydCB7IFRva2VuU2NvcGUsIFVzZXJUb2tlbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3Rva2VuLm1vZGVsJztcbmltcG9ydCB7IEFwcEluTWVtb3J5VGFibGUgfSBmcm9tICcuLi90YWJsZS9tZW1vcnktdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgUkVTRVJWRURfRU5EX0NPTFVNTlMsIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMgfSBmcm9tICcuLi90YWJsZS90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbk1lbW9yeUVudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9tZW1vcnktZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEFQUF9VU0VSX1RPS0VOX1NDT1BFUyB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBJTmV3VG9rZW5PcHRpb25zLCBOZXdUb2tlbk1vZGFsIH0gZnJvbSAnLi9uZXctdG9rZW4ubW9kYWwnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItdG9rZW4tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJ3Rva2VuLnRhYmxlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsndG9rZW4udGFibGUuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFZhbGlkYXRvclNlcnZpY2UsIHVzZUNsYXNzOiBVc2VyVG9rZW5WYWxpZGF0b3JTZXJ2aWNlIH1dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclRva2VuVGFibGUgZXh0ZW5kcyBBcHBJbk1lbW9yeVRhYmxlPFVzZXJUb2tlbj4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB1c2VTdGlja3kgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2hvd1Njb3BlcyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgZGVmYXVsdFNjb3BlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHZhbGlkYXRvclNlcnZpY2U6IFZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX1VTRVJfVE9LRU5fU0NPUEVTKSBwcm90ZWN0ZWQgdG9rZW5TY29wZXM6IFRva2VuU2NvcGVbXVxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLFxuICAgICAgWy4uLlJFU0VSVkVEX1NUQVJUX0NPTFVNTlMsICduYW1lJywgJ3Njb3BlcycsICdsYXN0VXNlZERhdGUnLCAnZXhwaXJhdGlvbkRhdGUnLCAnY3JlYXRpb25EYXRlJywgLi4uUkVTRVJWRURfRU5EX0NPTFVNTlNdLFxuICAgICAgVXNlclRva2VuLFxuICAgICAgbmV3IEluTWVtb3J5RW50aXRpZXNTZXJ2aWNlKFVzZXJUb2tlbiwgdW5kZWZpbmVkLCB7XG4gICAgICAgIGZpbHRlckZuRmFjdG9yeTogKCkgPT4gKCkgPT4gdHJ1ZSxcbiAgICAgICAgZXF1YWxzOiBVc2VyVG9rZW4uZXF1YWxzLFxuICAgICAgfSksXG4gICAgICB2YWxpZGF0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIHRoaXMuaW5saW5lRWRpdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWxsb3dSb3dEZXRhaWwgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSAnY3JlYXRpb25EYXRlJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgdGhpcy5pMThuQ29sdW1uUHJlZml4ID0gJ0FDQ09VTlQuVE9LRU5TLlRBQkxFLic7XG4gICAgdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudD8ucHJvZHVjdGlvbjtcblxuICAgIGlmICghdG9rZW5TY29wZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gVG9rZW5TY29wZXMgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIHRoZSB0b2tlbiBBUFBfVVNFUl9UT0tFTl9TQ09QRVMgd2l0aCB2YWxpZCBUb2tlblNjb3BlIGFycmF5Jyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4gdGhpcy5vbkNvbmZpZ0xvYWRlZChjb25maWcpKSk7XG5cbiAgICB0aGlzLm1hcmtBc1JlYWR5KCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVXNlclRva2VuW10ge1xuICAgIHJldHVybiBzdXBlci52YWx1ZSB8fCBbXTtcbiAgfVxuXG4gIHNldCB2YWx1ZShkYXRhOiBVc2VyVG9rZW5bXSkge1xuICAgIHN1cGVyLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBVc2VyVG9rZW5bXSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gU2V0IHNjb3BlcyBmcm9tIGZsYWdzXG4gICAgdmFsdWU/LmZvckVhY2goKHVzZXJUb2tlbikgPT4ge1xuICAgICAgY29uc3Qgc2NvcGVzOiBUb2tlblNjb3BlW10gPSBbXTtcbiAgICAgIGlmICh1c2VyVG9rZW4uZmxhZ3MpIHtcbiAgICAgICAgdGhpcy50b2tlblNjb3Blcy5mb3JFYWNoKChzY29wZSkgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgaWYgKHVzZXJUb2tlbi5mbGFncyAmIHNjb3BlLmZsYWcpIHtcbiAgICAgICAgICAgIHNjb3Blcy5wdXNoKHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdXNlclRva2VuLnNjb3BlcyA9IHNjb3BlcztcbiAgICB9KTtcblxuICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRva2VuKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47IC8vIEF2b2lkIG11bHRpcGxlIGNhbGxcblxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBuZXdUb2tlbiA9IG5ldyBVc2VyVG9rZW4oKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuZGVmYXVsdFNjb3BlKSkge1xuICAgICAgbmV3VG9rZW4uc2NvcGVzID0gW3RoaXMudG9rZW5TY29wZXMuZmluZCgoc2NvcGUpID0+IHNjb3BlLmlkID09PSB0aGlzLmRlZmF1bHRTY29wZSldO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogTmV3VG9rZW5Nb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SU5ld1Rva2VuT3B0aW9ucz57XG4gICAgICAgIG1vYmlsZTogdGhpcy5tb2JpbGUsXG4gICAgICAgIGlzTmV3OiB0cnVlLFxuICAgICAgICBkYXRhOiBuZXdUb2tlbixcbiAgICAgICAgc2hvd1Njb3BlczogdGhpcy5zaG93U2NvcGVzLFxuICAgICAgICB0b2tlblNjb3BlczogdGhpcy50b2tlblNjb3BlcyB8fCBbXSxcbiAgICAgICAgZXhpc3RpbmdOYW1lczogdGhpcy52YWx1ZT8ubWFwKCh2KSA9PiB2Lm5hbWUpLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcblxuICAgIGlmIChkYXRhPy5uYW1lKSB7XG4gICAgICAvLyBBZGQgdGhpcyB0b2tlbiBpbiB0aGUgbGlzdFxuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKHVuZGVmaW5lZCwgeyBlZGl0aW5nOiBmYWxzZSB9KTtcbiAgICAgIHJvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShkYXRhKTtcblxuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFzeW5jIHJldm9jYXRlKGV2ZW50OiBVSUV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAvL1xuICAvLyAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IEFsZXJ0cy5hc2tDb25maXJtYXRpb24odGhpcy5pMThuQ29sdW1uUHJlZml4ICsgJ0NPTkZJUk0uUkVWT0NBVEUnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAvLyAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIC8vXG4gIC8vICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XG4gIC8vICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZm9yRWFjaChyb3cgPT4ge1xuICAvLyAgICAgcm93LnZhbGlkYXRvci5wYXRjaFZhbHVlKHtyZXZvY2F0aW9uRGF0ZTogbm93fSwge2VtaXRFdmVudDp0cnVlfSk7XG4gIC8vICAgICAvLyByb3cudmFsaWRhdG9yLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgLy8gICB9KTtcbiAgLy9cbiAgLy8gICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAvLyAgIC8vIHRoaXMubWFya0FzRGlydHkoKTtcbiAgLy8gfVxuXG4gIGRpc3BsYXkoc2NvcGVzOiBUb2tlblNjb3BlW10pIHtcbiAgICByZXR1cm4gc2NvcGVzPy5tYXAoKHZhbHVlKSA9PiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlLm5hbWUpKS5qb2luKCcsICcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29uZmlnTG9hZGVkKGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuc2hvd1Njb3BlcyA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfQVBJX1RPS0VOX1NDT1BFX0VOQUJMRUQpO1xuICAgIHRoaXMuc2V0U2hvd0NvbHVtbignc2NvcGVzJywgdGhpcy5zaG93U2NvcGVzKTtcbiAgICB0aGlzLmRlZmF1bHRTY29wZSA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkRFRkFVTFRfQVVUSF9BUElfVE9LRU5fU0NPUEUpO1xuICB9XG59XG4iLCI8bWF0LXRvb2xiYXI+XG4gIDwhLS0gUmVmcmVzaCAtLT5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1JFRlJFU0gnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVtaXRSZWZyZXNoKClcIj5cbiAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxpb24taXRlbSAqbmdJZj1cIiFtb2JpbGUgJiYgZXJyb3I7IGxldCBlcnJvclwiIGxpbmVzPVwibm9uZVwiPlxuICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgQGlmIChzZWxlY3Rpb24gfCBpc0VtcHR5U2VsZWN0aW9uKSB7XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAqbmdJZj1cImNhbkVkaXQgJiYgIW1vYmlsZVwiXG4gICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQUREJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwiYWRkVG9rZW4oJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIH0gQGVsc2Uge1xuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImRlbGV0ZVNlbGVjdGlvbigkZXZlbnQpXCI+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9XG48L21hdC10b29sYmFyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICA8aW9uLXJlZnJlc2hlciBzbG90PVwiZml4ZWRcIiAqbmdJZj1cIm1vYmlsZVwiIChpb25SZWZyZXNoKT1cImRvUmVmcmVzaCgkZXZlbnQpXCI+XG4gICAgPGlvbi1yZWZyZXNoZXItY29udGVudD48L2lvbi1yZWZyZXNoZXItY29udGVudD5cbiAgPC9pb24tcmVmcmVzaGVyPlxuXG4gIDwhLS0gdGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICA8dGFibGVcbiAgICAgICN0YWJsZVxuICAgICAgbWF0LXRhYmxlXG4gICAgICBtYXRTb3J0XG4gICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0QnlcIlxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwiZGVmYXVsdFNvcnREaXJlY3Rpb25cIlxuICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUZuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiIFtzdGlja3ldPVwidXNlU3RpY2t5XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWNhbkVkaXRcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0aGlzIHwgaXNBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0aGlzIHwgaXNOb3RBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWNhbkVkaXRcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0aW9uLnRvZ2dsZShyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24gfCBpc1NlbGVjdGVkOiByb3dcIlxuICAgICAgICAgID48L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIElkIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaWRcIiBbc3RpY2t5XT1cInVzZVN0aWNreVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICA8aW9uLWxhYmVsPiM8L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IHJvdy5jdXJyZW50RGF0YS5pZCB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBuYW1lIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IGkxOG5Db2x1bW5QcmVmaXggKyAnTkFNRScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIHt7IChyb3cuY3VycmVudERhdGEgfCBwcm9wZXJ0eUdldDogJ25hbWUnKSB8fCAoaTE4bkNvbHVtblByZWZpeCArICdVTktOT1dOJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNjb3Blc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IGkxOG5Db2x1bW5QcmVmaXggKyAnU0NPUEVTJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAge3sgZGlzcGxheShyb3cuY3VycmVudERhdGEgfCBwcm9wZXJ0eUdldDogJ3Njb3BlcycpIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjcmVhdGlvbkRhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgY2xhc3M9XCJtYXQtY2VsbC1kYXRlLXRpbWVcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IGkxOG5Db2x1bW5QcmVmaXggKyAnQ1JFQVRJT05fREFURScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAge3sgcm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICdjcmVhdGlvbkRhdGUnIHwgZGF0ZUZvcm1hdDogeyB0aW1lOiB0cnVlIH0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGlyYXRpb25EYXRlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ0VYUElSQVRJT05fREFURScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAge3sgcm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICdleHBpcmF0aW9uRGF0ZScgfCBkYXRlRm9ybWF0OiB7IHRpbWU6IHRydWUgfSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibGFzdFVzZWREYXRlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ0xBU1RfVVNFRF9EQVRFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJtYXQtY2VsbC1kYXRlLXRpbWVcIj5cbiAgICAgICAgICB7eyByb3cuY3VycmVudERhdGEgfCBwcm9wZXJ0eUdldDogJ2xhc3RVc2VkRGF0ZScgfCBkYXRlRm9ybWF0OiB7IHRpbWU6IHRydWUgfSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQWN0aW9ucyBidXR0b25zIGNvbHVtbiAtLT5cbiAgICAgIDxhcHAtYWN0aW9ucy1jb2x1bW5cbiAgICAgICAgW3N0aWNreUVuZF09XCJ1c2VTdGlja3lcIlxuICAgICAgICAob3B0aW9uc0NsaWNrKT1cIm9wZW5TZWxlY3RDb2x1bW5zTW9kYWwoJGV2ZW50KVwiXG4gICAgICAgIChjYW5jZWxPckRlbGV0ZUNsaWNrKT1cImNhbmNlbE9yRGVsZXRlKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAoY29uZmlybUFuZEFkZENsaWNrKT1cImNvbmZpcm1BbmRBZGQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChiYWNrd2FyZCk9XCJjb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChmb3J3YXJkKT1cImNvbmZpcm1BbmRGb3J3YXJkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICBbY2FuQ2FuY2VsXT1cImZhbHNlXCJcbiAgICAgID48L2FwcC1hY3Rpb25zLWNvbHVtbj5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgPHRyXG4gICAgICAgIG1hdC1yb3dcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1zZWxlY3RlZF09XCJyb3cuZWRpdGluZ1wiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWVycm9yXT1cInJvdy52YWxpZGF0b3I/LmludmFsaWRcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1kaXJ0eV09XCJyb3cudmFsaWRhdG9yPy5kaXJ0eVwiXG4gICAgICAgIChjbGljayk9XCJjbGlja1JvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiZXNjYXBlRWRpdGluZ1JvdygkZXZlbnQpXCJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCJyb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgID48L3RyPlxuICAgIDwvdGFibGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1N1YmplY3QgfCBhc3luYzsgZWxzZSBub1Jlc3VsdFwiPlxuICAgICAgPGlvbi1pdGVtPlxuICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgYW5pbWF0ZWQ+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI25vUmVzdWx0PlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwidG90YWxSb3dDb3VudCA9PT0gMFwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRleHQtaXRhbGljXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2lvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZmFiIHNsb3Q9XCJmaXhlZFwiIHZlcnRpY2FsPVwiYm90dG9tXCIgaG9yaXpvbnRhbD1cImVuZFwiICpuZ0lmPVwibW9iaWxlXCI+XG4gIDxpb24tZmFiLWJ1dHRvbiBjb2xvcj1cInRlcnRpYXJ5XCIgKGNsaWNrKT1cImFkZFRva2VuKCRldmVudClcIj5cbiAgICA8aW9uLWljb24gbmFtZT1cImFkZFwiPjwvaW9uLWljb24+XG4gIDwvaW9uLWZhYi1idXR0b24+XG48L2lvbi1mYWI+XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4udGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWNjb3VudC90b2tlbi50YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9hY2NvdW50L3Rva2VuLnRhYmxlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBb0IsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTMUUsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBMkI7SUFVakQ7SUFUSCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWpCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsWUFBWSxDQUFTO0lBQ3JCLFdBQVcsQ0FBZTtJQUVwQyxZQUNFLFFBQWtCLEVBQ2xCLGdCQUFrQyxFQUN4QixhQUE0QixFQUNqQixXQUF3QixFQUNGLFdBQXlCO1FBRXBFLEtBQUssQ0FDSCxRQUFRLEVBQ1IsQ0FBQyxHQUFHLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxHQUFHLG9CQUFvQixDQUFDLEVBQ3hILFNBQVMsRUFDVCxJQUFJLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUU7WUFDaEQsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDakMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1NBQ3pCLENBQUMsRUFDRixnQkFBZ0IsQ0FDakIsQ0FBQztRQWJRLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBZXRDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQztRQUV0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxxR0FBcUcsQ0FBQyxDQUFDO1FBQ3RILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLElBQWlCO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0IsRUFBRSxJQUE4QjtRQUN6RCx3QkFBd0I7UUFDeEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7WUFDaEMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pDLHNDQUFzQztvQkFDdEMsSUFBSSxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWM7UUFDM0IsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCO1lBQUUsT0FBTyxDQUFDLHNCQUFzQjtRQUUzRCxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDeEIsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMseUdBQXlHLENBQUMsQ0FBQztZQUMxSCxDQUFDO1lBQ0QsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN4QyxTQUFTLEVBQUUsYUFBYTtZQUN4QixjQUFjLEVBQW9CO2dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQzlDO1lBQ0QsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2YsNkJBQTZCO1lBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRSxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLDBDQUEwQztJQUMxQyxFQUFFO0lBQ0YsZ0lBQWdJO0lBQ2hJLDRCQUE0QjtJQUM1QixFQUFFO0lBQ0YsMEJBQTBCO0lBQzFCLDZDQUE2QztJQUM3Qyx5RUFBeUU7SUFDekUsaURBQWlEO0lBQ2pELFFBQVE7SUFDUixFQUFFO0lBQ0YseUJBQXlCO0lBQ3pCLDJCQUEyQjtJQUMzQixJQUFJO0lBRUosT0FBTyxDQUFDLE1BQW9CO1FBQzFCLE9BQU8sTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFUyxjQUFjLENBQUMsTUFBcUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDM0YsQ0FBQzt1R0F4SVUsY0FBYyx1R0FXZixXQUFXLGFBQ0MscUJBQXFCOzJGQVpoQyxjQUFjLG1GQUhkLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLENBQUMsaURDbkJqRixzdU1BZ0tBOzsyRkQxSWEsY0FBYztrQkFQMUIsU0FBUzsrQkFDRSxzQkFBc0IsYUFHckIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxtQkFDOUQsdUJBQXVCLENBQUMsTUFBTTs7MEJBYTVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCO3lDQVhsQyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgVXNlclRva2VuVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ZhbGlkYXRvci91c2VyLXRva2VuLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBUb2tlblNjb3BlLCBVc2VyVG9rZW4gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC90b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBBcHBJbk1lbW9yeVRhYmxlIH0gZnJvbSAnLi4vdGFibGUvbWVtb3J5LXRhYmxlLmNsYXNzJztcbmltcG9ydCB7IFJFU0VSVkVEX0VORF9DT0xVTU5TLCBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TIH0gZnJvbSAnLi4vdGFibGUvdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgSW5NZW1vcnlFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvbWVtb3J5LWVudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBBUFBfVVNFUl9UT0tFTl9TQ09QRVMgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSU5ld1Rva2VuT3B0aW9ucywgTmV3VG9rZW5Nb2RhbCB9IGZyb20gJy4vbmV3LXRva2VuLm1vZGFsJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItdG9rZW4tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJ3Rva2VuLnRhYmxlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsndG9rZW4udGFibGUuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFZhbGlkYXRvclNlcnZpY2UsIHVzZUNsYXNzOiBVc2VyVG9rZW5WYWxpZGF0b3JTZXJ2aWNlIH1dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclRva2VuVGFibGUgZXh0ZW5kcyBBcHBJbk1lbW9yeVRhYmxlPFVzZXJUb2tlbj4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB1c2VTdGlja3kgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2hvd1Njb3BlcyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgZGVmYXVsdFNjb3BlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB0b2tlblNjb3BlczogVG9rZW5TY29wZVtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICB2YWxpZGF0b3JTZXJ2aWNlOiBWYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9VU0VSX1RPS0VOX1NDT1BFUykgdG9rZW5TY29wZXM6IFRva2VuU2NvcGVbXVxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLFxuICAgICAgWy4uLlJFU0VSVkVEX1NUQVJUX0NPTFVNTlMsICduYW1lJywgJ3Njb3BlcycsICdsYXN0VXNlZERhdGUnLCAnZXhwaXJhdGlvbkRhdGUnLCAnY3JlYXRpb25EYXRlJywgLi4uUkVTRVJWRURfRU5EX0NPTFVNTlNdLFxuICAgICAgVXNlclRva2VuLFxuICAgICAgbmV3IEluTWVtb3J5RW50aXRpZXNTZXJ2aWNlKFVzZXJUb2tlbiwgdW5kZWZpbmVkLCB7XG4gICAgICAgIGZpbHRlckZuRmFjdG9yeTogKCkgPT4gKCkgPT4gdHJ1ZSxcbiAgICAgICAgZXF1YWxzOiBVc2VyVG9rZW4uZXF1YWxzLFxuICAgICAgfSksXG4gICAgICB2YWxpZGF0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIHRoaXMudG9rZW5TY29wZXMgPSB0b2tlblNjb3BlcyA/PyBbXTtcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmFsbG93Um93RGV0YWlsID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gJ2NyZWF0aW9uRGF0ZSc7XG4gICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIHRoaXMuaTE4bkNvbHVtblByZWZpeCA9ICdBQ0NPVU5ULlRPS0VOUy5UQUJMRS4nO1xuICAgIHRoaXMuZGVidWcgPSAhZW52aXJvbm1lbnQ/LnByb2R1Y3Rpb247XG5cbiAgICBpZiAoIXRva2VuU2NvcGVzKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIFRva2VuU2NvcGVzIHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSB0aGUgdG9rZW4gQVBQX1VTRVJfVE9LRU5fU0NPUEVTIHdpdGggdmFsaWQgVG9rZW5TY29wZSBhcnJheScpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHRoaXMub25Db25maWdMb2FkZWQoY29uZmlnKSkpO1xuXG4gICAgdGhpcy5tYXJrQXNSZWFkeSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFVzZXJUb2tlbltdIHtcbiAgICByZXR1cm4gc3VwZXIudmFsdWUgfHwgW107XG4gIH1cblxuICBzZXQgdmFsdWUoZGF0YTogVXNlclRva2VuW10pIHtcbiAgICBzdXBlci52YWx1ZSA9IGRhdGE7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogVXNlclRva2VuW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIC8vIFNldCBzY29wZXMgZnJvbSBmbGFnc1xuICAgIHZhbHVlPy5mb3JFYWNoKCh1c2VyVG9rZW4pID0+IHtcbiAgICAgIGNvbnN0IHNjb3BlczogVG9rZW5TY29wZVtdID0gW107XG4gICAgICBpZiAodXNlclRva2VuLmZsYWdzKSB7XG4gICAgICAgIHRoaXMudG9rZW5TY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgIGlmICh1c2VyVG9rZW4uZmxhZ3MgJiBzY29wZS5mbGFnKSB7XG4gICAgICAgICAgICBzY29wZXMucHVzaChzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVzZXJUb2tlbi5zY29wZXMgPSBzY29wZXM7XG4gICAgfSk7XG5cbiAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBhZGRUb2tlbihldmVudDogVUlFdmVudCkge1xuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuOyAvLyBBdm9pZCBtdWx0aXBsZSBjYWxsXG5cbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbmV3VG9rZW4gPSBuZXcgVXNlclRva2VuKCk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aGlzLmRlZmF1bHRTY29wZSkgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMudG9rZW5TY29wZXMpKSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMudG9rZW5TY29wZXMuZmluZCgoc2NvcGUpID0+IHNjb3BlLmlkID09PSB0aGlzLmRlZmF1bHRTY29wZSk7XG4gICAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlt0b2tlbi10YWJsZV0gQ2Fubm90IGZvdW5kIHRoZSBkZWZhdWx0IHNjb3BlICcke3RoaXMuZGVmYXVsdFNjb3BlfScgaW4gdmFsdWVzIG9mIEFQUF9VU0VSX1RPS0VOX1NDT1BFUyFcIik7XG4gICAgICB9XG4gICAgICBuZXdUb2tlbi5zY29wZXMgPSBzY29wZSA/IFtzY29wZV0gOiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IE5ld1Rva2VuTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczogPElOZXdUb2tlbk9wdGlvbnM+e1xuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxuICAgICAgICBpc05ldzogdHJ1ZSxcbiAgICAgICAgZGF0YTogbmV3VG9rZW4sXG4gICAgICAgIHNob3dTY29wZXM6IHRoaXMuc2hvd1Njb3BlcyxcbiAgICAgICAgdG9rZW5TY29wZXM6IHRoaXMudG9rZW5TY29wZXMgfHwgW10sXG4gICAgICAgIGV4aXN0aW5nTmFtZXM6IHRoaXMudmFsdWU/Lm1hcCgodikgPT4gdi5uYW1lKSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG5cbiAgICBpZiAoZGF0YT8ubmFtZSkge1xuICAgICAgLy8gQWRkIHRoaXMgdG9rZW4gaW4gdGhlIGxpc3RcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZSh1bmRlZmluZWQsIHsgZWRpdGluZzogZmFsc2UgfSk7XG4gICAgICByb3cudmFsaWRhdG9yLnBhdGNoVmFsdWUoZGF0YSk7XG5cbiAgICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBhc3luYyByZXZvY2F0ZShldmVudDogVUlFdmVudCkge1xuICAvLyAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHJldHVybjtcbiAgLy9cbiAgLy8gICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHRoaXMuaTE4bkNvbHVtblByZWZpeCArICdDT05GSVJNLlJFVk9DQVRFJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlKTtcbiAgLy8gICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuICAvL1xuICAvLyAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAvLyAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2gocm93ID0+IHtcbiAgLy8gICAgIHJvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh7cmV2b2NhdGlvbkRhdGU6IG5vd30sIHtlbWl0RXZlbnQ6dHJ1ZX0pO1xuICAvLyAgICAgLy8gcm93LnZhbGlkYXRvci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIC8vICAgfSk7XG4gIC8vXG4gIC8vICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgLy8gICAvLyB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gIC8vIH1cblxuICBkaXNwbGF5KHNjb3BlczogVG9rZW5TY29wZVtdKSB7XG4gICAgcmV0dXJuIHNjb3Blcz8ubWFwKCh2YWx1ZSkgPT4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2YWx1ZS5uYW1lKSkuam9pbignLCAnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmZpZ0xvYWRlZChjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLnNob3dTY29wZXMgPSBjb25maWcuZ2V0UHJvcGVydHlBc0Jvb2xlYW4oQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX0FQSV9UT0tFTl9TQ09QRV9FTkFCTEVEKTtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3Njb3BlcycsIHRoaXMuc2hvd1Njb3Blcyk7XG4gICAgdGhpcy5kZWZhdWx0U2NvcGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5ERUZBVUxUX0FVVEhfQVBJX1RPS0VOX1NDT1BFKTtcbiAgfVxufVxuIiwiPG1hdC10b29sYmFyPlxuICA8IS0tIFJlZnJlc2ggLS0+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiIW1vYmlsZVwiIFt0aXRsZV09XCInQ09NTU9OLkJUTl9SRUZSRVNIJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbWl0UmVmcmVzaCgpXCI+XG4gICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8aW9uLWl0ZW0gKm5nSWY9XCIhbW9iaWxlICYmIGVycm9yOyBsZXQgZXJyb3JcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICA8L2lvbi1pdGVtPlxuXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXNwYWNlclwiPjwvZGl2PlxuXG4gIEBpZiAoc2VsZWN0aW9uIHwgaXNFbXB0eVNlbGVjdGlvbikge1xuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgKm5nSWY9XCJjYW5FZGl0ICYmICFtb2JpbGVcIlxuICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cImFkZFRva2VuKCRldmVudClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9IEBlbHNlIHtcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJkZWxldGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgfVxuPC9tYXQtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPGlvbi1yZWZyZXNoZXIgc2xvdD1cImZpeGVkXCIgKm5nSWY9XCJtb2JpbGVcIiAoaW9uUmVmcmVzaCk9XCJkb1JlZnJlc2goJGV2ZW50KVwiPlxuICAgIDxpb24tcmVmcmVzaGVyLWNvbnRlbnQ+PC9pb24tcmVmcmVzaGVyLWNvbnRlbnQ+XG4gIDwvaW9uLXJlZnJlc2hlcj5cblxuICA8IS0tIHRhYmxlIC0tPlxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgPHRhYmxlXG4gICAgICAjdGFibGVcbiAgICAgIG1hdC10YWJsZVxuICAgICAgbWF0U29ydFxuICAgICAgbWF0U29ydERpc2FibGVDbGVhclxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICBbbWF0U29ydEFjdGl2ZV09XCJkZWZhdWx0U29ydEJ5XCJcbiAgICAgIFttYXRTb3J0RGlyZWN0aW9uXT1cImRlZmF1bHRTb3J0RGlyZWN0aW9uXCJcbiAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlGblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIiBbc3RpY2t5XT1cInVzZVN0aWNreVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFjYW5FZGl0XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidGhpcyB8IGlzQWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidGhpcyB8IGlzTm90QWxsU2VsZWN0ZWRcIlxuICAgICAgICAgID48L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFjYW5FZGl0XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGxcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uIHwgaXNTZWxlY3RlZDogcm93XCJcbiAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJZCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlkXCIgW3N0aWNreV09XCJ1c2VTdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD4jPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyByb3cuY3VycmVudERhdGEuaWQgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbmFtZSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5hbWVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ05BTUUnIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICB7eyAocm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICduYW1lJykgfHwgKGkxOG5Db2x1bW5QcmVmaXggKyAnVU5LTk9XTicgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzY29wZXNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ1NDT1BFUycgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIHt7IGRpc3BsYXkocm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICdzY29wZXMnKSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY3JlYXRpb25EYXRlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ0NSRUFUSU9OX0RBVEUnIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm1hdC1jZWxsLWRhdGUtdGltZVwiPlxuICAgICAgICAgIHt7IHJvdy5jdXJyZW50RGF0YSB8IHByb3BlcnR5R2V0OiAnY3JlYXRpb25EYXRlJyB8IGRhdGVGb3JtYXQ6IHsgdGltZTogdHJ1ZSB9IH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBpcmF0aW9uRGF0ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBjbGFzcz1cIm1hdC1jZWxsLWRhdGUtdGltZVwiPlxuICAgICAgICAgIDxpb24tbGFiZWw+e3sgaTE4bkNvbHVtblByZWZpeCArICdFWFBJUkFUSU9OX0RBVEUnIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm1hdC1jZWxsLWRhdGUtdGltZVwiPlxuICAgICAgICAgIHt7IHJvdy5jdXJyZW50RGF0YSB8IHByb3BlcnR5R2V0OiAnZXhwaXJhdGlvbkRhdGUnIHwgZGF0ZUZvcm1hdDogeyB0aW1lOiB0cnVlIH0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxhc3RVc2VkRGF0ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBjbGFzcz1cIm1hdC1jZWxsLWRhdGUtdGltZVwiPlxuICAgICAgICAgIDxpb24tbGFiZWw+e3sgaTE4bkNvbHVtblByZWZpeCArICdMQVNUX1VTRURfREFURScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwibWF0LWNlbGwtZGF0ZS10aW1lXCI+XG4gICAgICAgICAge3sgcm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICdsYXN0VXNlZERhdGUnIHwgZGF0ZUZvcm1hdDogeyB0aW1lOiB0cnVlIH0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEFjdGlvbnMgYnV0dG9ucyBjb2x1bW4gLS0+XG4gICAgICA8YXBwLWFjdGlvbnMtY29sdW1uXG4gICAgICAgIFtzdGlja3lFbmRdPVwidXNlU3RpY2t5XCJcbiAgICAgICAgKG9wdGlvbnNDbGljayk9XCJvcGVuU2VsZWN0Q29sdW1uc01vZGFsKCRldmVudClcIlxuICAgICAgICAoY2FuY2VsT3JEZWxldGVDbGljayk9XCJjYW5jZWxPckRlbGV0ZSgkZXZlbnQuZXZlbnQsICRldmVudC5yb3cpXCJcbiAgICAgICAgKGNvbmZpcm1BbmRBZGRDbGljayk9XCJjb25maXJtQW5kQWRkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAoYmFja3dhcmQpPVwiY29uZmlybUFuZEJhY2t3YXJkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAoZm9yd2FyZCk9XCJjb25maXJtQW5kRm9yd2FyZCgkZXZlbnQuZXZlbnQsICRldmVudC5yb3cpXCJcbiAgICAgICAgW2NhbkNhbmNlbF09XCJmYWxzZVwiXG4gICAgICA+PC9hcHAtYWN0aW9ucy1jb2x1bW4+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICAgIDx0clxuICAgICAgICBtYXQtcm93XG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCJcbiAgICAgICAgW2NsYXNzLm1hdC1yb3ctc2VsZWN0ZWRdPVwicm93LmVkaXRpbmdcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1lcnJvcl09XCJyb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgICAgW2NsYXNzLm1hdC1yb3ctZGlydHldPVwicm93LnZhbGlkYXRvcj8uZGlydHlcIlxuICAgICAgICAoY2xpY2spPVwiY2xpY2tSb3coJGV2ZW50LCByb3cpXCJcbiAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImVzY2FwZUVkaXRpbmdSb3coJGV2ZW50KVwiXG4gICAgICAgIFtjZGtUcmFwRm9jdXNdPVwicm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICA+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdTdWJqZWN0IHwgYXN5bmM7IGVsc2Ugbm9SZXN1bHRcIj5cbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IGFuaW1hdGVkPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdD5cbiAgICAgIDxpb24taXRlbSAqbmdJZj1cInRvdGFsUm93Q291bnQgPT09IDBcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZhYiBzbG90PVwiZml4ZWRcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiIGhvcml6b250YWw9XCJlbmRcIiAqbmdJZj1cIm1vYmlsZVwiPlxuICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJhZGRUb2tlbigkZXZlbnQpXCI+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJhZGRcIj48L2lvbi1pY29uPlxuICA8L2lvbi1mYWItYnV0dG9uPlxuPC9pb24tZmFiPlxuIl19
@@ -1,4 +1,4 @@
1
- import { getPropertyByPath, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, isPromise, toBoolean, toNumber, } from '../../../shared/functions';
1
+ import { getPropertyByPath, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, isPromise, toBoolean, toNumber } from '../../../shared/functions';
2
2
  export class AppPropertiesUtils {
3
3
  /**
4
4
  * Converts an array of `Property` objects into a `PropertiesMap` object.
@@ -37,22 +37,27 @@ export class AppPropertiesUtils {
37
37
  *
38
38
  * @param {PropertyMap} [sources] - The source object from which properties are to be extracted.
39
39
  * @param {FormFieldDefinition[]} [definitions] - An optional array of definitions to be applied to the extracted properties.
40
+ * @param opts
40
41
  * @return {Property[] | Promise<Property[]>} An array of properties generated from the source object, or a promise resolving to that array.
41
42
  */
42
- static arrayFromObject(sources, definitions) {
43
+ static arrayFromObject(sources, definitions, opts) {
43
44
  // DEBUG
44
45
  //console.debug(`[properties-utils] Convert property map into array of Property...`);
45
- const targets = Array.isArray(sources)
46
+ let targets = Array.isArray(sources)
46
47
  ? sources.slice()
47
48
  : Object.getOwnPropertyNames(sources || {}).map((key) => ({
48
49
  key,
49
50
  value: sources[key],
50
51
  }));
51
52
  const jobs = [];
52
- if (isNotEmptyArray(definitions)) {
53
- for (let target of targets) {
53
+ if (!!definitions) {
54
+ targets = targets
55
+ .map((target) => {
54
56
  // Find definition
55
57
  const def = definitions.find((def) => def.key === target.key);
58
+ // Exclude no definition (if expected by user options)
59
+ if (!def && opts?.keepOrphan === false)
60
+ return null;
56
61
  // Deserialize from string
57
62
  let propertyOrPromise = AppPropertyUtils.fromObject(target, def);
58
63
  if (isPromise(propertyOrPromise)) {
@@ -62,7 +67,8 @@ export class AppPropertiesUtils {
62
67
  // Update the target value
63
68
  target.value = propertyOrPromise.value;
64
69
  }
65
- }
70
+ })
71
+ .filter(isNotNil);
66
72
  }
67
73
  // Return as promise, when need
68
74
  if (jobs.length)
@@ -281,4 +287,4 @@ export class AppPropertyUtils {
281
287
  return value?.toString();
282
288
  }
283
289
  }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLFFBQVEsRUFDUixlQUFlLEVBQ2YsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEdBQ1QsTUFBTSwyQkFBMkIsQ0FBQztBQUluQyxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBVSxPQUF1QixFQUFFLFdBQW1DLEVBQUUsSUFBa0M7UUFDNUgsT0FBTyxDQUNMLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNiLHNCQUFzQjthQUNyQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQzlCLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUMzQixNQUFNLEdBQUcsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUM7WUFDRixxQkFBcUI7YUFDcEIsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ1osSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUN4Qyw2QkFBNkI7WUFDN0IsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLEtBQUssSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUMzRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDM0IsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ1ksRUFBRSxDQUNoQixDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBSSxPQUFxQyxFQUFFLFdBQW1DO1FBQ2xHLFFBQVE7UUFDUixxRkFBcUY7UUFFckYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxHQUFHO2dCQUNILEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO2FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ1IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakMsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0Isa0JBQWtCO2dCQUNsQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUQsMEJBQTBCO2dCQUMxQixJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sMEJBQTBCO29CQUMxQixNQUFNLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQXdCLENBQUMsQ0FBQztRQUUvRSxPQUFPLE9BQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVE7UUFDakIsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFzQjtRQUMxQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlCLE9BQVEsTUFBTSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUNiLE1BQTJCLEVBQzNCLEdBQXlCLEVBQ3pCLElBRUM7UUFFRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlCLGlIQUFpSDtRQUNqSCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsaUNBQWlDO1FBQ2pDLElBQUksV0FBVyxHQUFHLEdBQUcsRUFBRSxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLFFBQVEsR0FBRyxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxPQUFPO29CQUNWLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxVQUFVO29CQUNiLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFLGtCQUFrQixJQUFJLElBQUksRUFBRSx5QkFBeUIsSUFBSSxJQUFJLENBQUM7b0JBQzlGLFdBQVc7d0JBQ1QsR0FBRyxFQUFFLFNBQVM7NEJBQ2QsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dDQUNULE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQ0FDN0YsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDO29DQUFFLE9BQU8sY0FBYyxDQUFDO2dDQUNqRCxPQUFPLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDbkMsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsTUFBTTtnQkFDUjtvQkFDRSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFnQixDQUFDO1FBRXJCLG9CQUFvQjtRQUNwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELGlCQUFpQjthQUNaLENBQUM7WUFDSixRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2YsTUFBOEIsRUFDOUIsR0FBd0IsRUFDeEIsSUFJQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxNQUFxQixDQUFDLENBQUMsaUJBQWlCO1FBRWhHLG1CQUFtQjtRQUNuQixNQUFNLE1BQU0sR0FBa0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXZFLE1BQU0sSUFBSSxHQUFtQixFQUFFLENBQUM7UUFDaEMsZ0JBQWdCO1FBQ2hCLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssU0FBUztnQkFDWixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDM0UsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFZLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sU0FBUyxHQUFJLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztvQkFDNUksTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO2dCQUN6RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQzNDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO29CQUNoRCxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7d0JBQ2hDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ2pDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTO3FCQUNyQixNQUFNLENBQUMsUUFBUSxDQUFDO3FCQUNoQixHQUFHLENBQ0YsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUNiLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDdEksQ0FBQztnQkFDSixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLG9EQUFvRDtnQkFDcEQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsSUFBSSxDQUNQLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDNUIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLEdBQUcsY0FBcUIsQ0FBQztnQkFDdkMsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLHlCQUF5QjtnQkFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU87b0JBQzlCLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUTt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLOzZCQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7NkJBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7NkJBQ3BCLE1BQU0sQ0FBQyxlQUFlLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRVQsNkJBQTZCO2dCQUM3QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ2QsS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2xDLHdCQUF3QjtvQkFDeEIsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFOUUsc0JBQXNCO29CQUN0QixJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FDUCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs0QkFDL0IsbUJBQW1COzRCQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQzt3QkFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04sbUJBQW1CO3dCQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLGlCQUF3QixDQUFDO29CQUNqRCxDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDO2dCQUNWLENBQUM7UUFDTCxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYSxDQUMxQixLQUFVLEVBQ1YsR0FBd0IsRUFDeEIsSUFJQztRQUVELG1DQUFtQztRQUNuQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUN6QyxLQUFVLEVBQ1YsR0FBd0IsRUFDeEIsSUFJQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRSx5QkFBeUIsSUFBSSxJQUFJLENBQUM7UUFDN0YsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQyxDQUFDLGtCQUFrQjtRQUNsQyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQXdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztRQUM3RixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUNWLDhFQUE4RSxHQUFHLENBQUMsR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUM3SSxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQzlELElBQUksa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGtCQUFrQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxRSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLFFBQVE7WUFDUiw0RUFBNEU7UUFDOUUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO1lBQzVDLFFBQVE7WUFDUixxR0FBcUc7UUFDdkcsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDJDQUEyQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRTtnQkFDMUUsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDO2dCQUNQLEdBQUcsSUFBSSxFQUFFLHFCQUFxQjthQUMvQixDQUFDLENBQUM7WUFFSCxtQkFBbUI7WUFDbkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBRWpELElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsSUFBSSxDQUNWLDZEQUE2RCxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssOEVBQThFLEVBQzNKLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsUUFBUTtnQkFDUiw0RUFBNEU7Z0JBRTVFLDhCQUE4QjtnQkFDOUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUVELHFCQUFxQjtZQUNyQixPQUFPLENBQUMsSUFBSSxDQUNWLDJEQUEyRCxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssOEVBQThFLENBQzFKLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEdBQUcsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0YsV0FBVztRQUNiLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBUTtZQUM1QixDQUFDLGtCQUFrQixDQUFDLEVBQUUsS0FBSztTQUM1QixDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBVztRQUNqQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSwgUHJvcGVydHlNYXAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0UHJvcGVydHlCeVBhdGgsXG4gIGlzTmlsLFxuICBpc05pbE9yQmxhbmssXG4gIGlzTm90RW1wdHlBcnJheSxcbiAgaXNOb3ROaWwsXG4gIGlzTm90TmlsT3JCbGFuayxcbiAgaXNQcm9taXNlLFxuICB0b0Jvb2xlYW4sXG4gIHRvTnVtYmVyLFxufSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucywgU3VnZ2VzdEZuIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEFwcFByb3BlcnRpZXNVdGlscyB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBgUHJvcGVydHlgIG9iamVjdHMgaW50byBhIGBQcm9wZXJ0aWVzTWFwYCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJvcGVydHlbXX0gW3NvdXJjZXNdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgcHJvcGVydGllcyB0byBiZSBjb252ZXJ0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkRGVmaW5pdGlvbltdfSBbZGVmaW5pdGlvbnNdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgZm9ybSBmaWVsZCBkZWZpbml0aW9ucyB0byBoZWxwIHdpdGggdGhlIGNvbnZlcnNpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5vbWl0TmlsT3JCbGFua10gLSBJZiB0cnVlLCBwcm9wZXJ0aWVzIHdpdGggbmlsIG9yIGJsYW5rIHZhbHVlcyB3aWxsIGJlIG9taXR0ZWQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm4ge1Byb3BlcnR5TWFwfSAtIFRoZSByZXN1bHRpbmcgYFByb3BlcnRpZXNNYXBgIG9iamVjdC5cbiAgICovXG4gIHN0YXRpYyBhcnJheUFzT2JqZWN0PFQgPSBhbnk+KHNvdXJjZXM/OiBQcm9wZXJ0eTxUPltdLCBkZWZpbml0aW9ucz86IEZvcm1GaWVsZERlZmluaXRpb25bXSwgb3B0cz86IHsgb21pdE5pbE9yQmxhbms6IGJvb2xlYW4gfSk6IFByb3BlcnR5TWFwIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHNvdXJjZXMgfHwgW10pXG4gICAgICAgIC8vIFNlcmlhbGl6ZSBlYWNoIGl0ZW1cbiAgICAgICAgLm1hcCgoc291cmNlKSA9PiB7XG4gICAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3Qga2V5ID0gQXBwUHJvcGVydHlVdGlscy5nZXRQcm9wZXJ0eUtleShzb3VyY2UpO1xuICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGRlZiA9IGRlZmluaXRpb25zPy5maW5kKChkKSA9PiBkLmtleSA9PT0ga2V5KTtcbiAgICAgICAgICByZXR1cm4gQXBwUHJvcGVydHlVdGlscy5hc09iamVjdChzb3VyY2UsIGRlZik7XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEZpbGwgYSBKU09OIG9iamVjdFxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc05pbE9yQmxhbmsoaXRlbT8ua2V5KSkgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIC8vIFNraXAgaWYgbmlsIG9yIGJsYW5rIHZhbHVlXG4gICAgICAgICAgICBpZiAob3B0cz8ub21pdE5pbE9yQmxhbmsgIT09IGZhbHNlICYmIGlzTmlsT3JCbGFuayhpdGVtLnZhbHVlKSkgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIHJlc1tpdGVtLmtleV0gPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICB9LFxuICAgICAgICAgIDxQcm9wZXJ0eU1hcD57fVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgcHJvcGVydGllcyBmcm9tIHRoZSBnaXZlbiBvYmplY3QsIG9wdGlvbmFsbHkgYXBwbHlpbmcgZGVmaW5pdGlvbnMgdG8gdGhlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJvcGVydHlNYXB9IFtzb3VyY2VzXSAtIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggcHJvcGVydGllcyBhcmUgdG8gYmUgZXh0cmFjdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZERlZmluaXRpb25bXX0gW2RlZmluaXRpb25zXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIGRlZmluaXRpb25zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJuIHtQcm9wZXJ0eVtdIHwgUHJvbWlzZTxQcm9wZXJ0eVtdPn0gQW4gYXJyYXkgb2YgcHJvcGVydGllcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc291cmNlIG9iamVjdCwgb3IgYSBwcm9taXNlIHJlc29sdmluZyB0byB0aGF0IGFycmF5LlxuICAgKi9cbiAgc3RhdGljIGFycmF5RnJvbU9iamVjdDxUPihzb3VyY2VzPzogUHJvcGVydHlNYXAgfCBQcm9wZXJ0eTxUPltdLCBkZWZpbml0aW9ucz86IEZvcm1GaWVsZERlZmluaXRpb25bXSk6IFByb3BlcnR5PFQ+W10gfCBQcm9taXNlPFByb3BlcnR5PFQ+W10+IHtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdIENvbnZlcnQgcHJvcGVydHkgbWFwIGludG8gYXJyYXkgb2YgUHJvcGVydHkuLi5gKTtcblxuICAgIGNvbnN0IHRhcmdldHMgPSBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICA/IHNvdXJjZXMuc2xpY2UoKVxuICAgICAgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VzIHx8IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWU6IHNvdXJjZXNba2V5XSxcbiAgICAgICAgfSkpO1xuICAgIGNvbnN0IGpvYnMgPSBbXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRlZmluaXRpb25zKSkge1xuICAgICAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgLy8gRmluZCBkZWZpbml0aW9uXG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZmluaXRpb25zLmZpbmQoKGRlZikgPT4gZGVmLmtleSA9PT0gdGFyZ2V0LmtleSk7XG5cbiAgICAgICAgLy8gRGVzZXJpYWxpemUgZnJvbSBzdHJpbmdcbiAgICAgICAgbGV0IHByb3BlcnR5T3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5mcm9tT2JqZWN0KHRhcmdldCwgZGVmKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShwcm9wZXJ0eU9yUHJvbWlzZSkpIHtcbiAgICAgICAgICBqb2JzLnB1c2gocHJvcGVydHlPclByb21pc2UudGhlbigocHJvcGVydHkpID0+ICh0YXJnZXQudmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRhcmdldCB2YWx1ZVxuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHByb3BlcnR5T3JQcm9taXNlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFzIHByb21pc2UsIHdoZW4gbmVlZFxuICAgIGlmIChqb2JzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKGpvYnMpLnRoZW4oKCkgPT4gdGFyZ2V0cyBhcyBQcm9wZXJ0eTxUPltdKTtcblxuICAgIHJldHVybiB0YXJnZXRzIGFzIFByb3BlcnR5PFQ+W107XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFwcFByb3BlcnR5VXRpbHMge1xuICBzdGF0aWMga2V5KGtleTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5Py5rZXkgPz8ga2V5O1xuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5S2V5KHNvdXJjZTogUHJvcGVydHkgfCBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoc291cmNlLmtleSBhcyBhbnkpPy5rZXkgPz8gc291cmNlLmtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gc291cmNlIHRvIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEga2V5LXZhbHVlIHBhaXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJvcGVydHk8YW55PiB8IGFueX0gc291cmNlIC0gVGhlIHNvdXJjZSBwcm9wZXJ0eSBvciBhbnkgdmFsdWUgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZERlZmluaXRpb259IFtkZWZdIC0gVGhlIGZvcm0gZmllbGQgZGVmaW5pdGlvbiB1c2VkIGZvciBzZXJpYWxpemF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBzZXJpYWxpemF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZT0naWQnXSAtIFRoZSBhdHRyaWJ1dGUgdG8gYmUgdXNlZCBmb3IgZGVmYXVsdCBzZXJpYWxpemF0aW9uLlxuICAgKiBAcmV0dXJuIHt7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0gfCB1bmRlZmluZWR9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzZXJpYWxpemVkIGtleS12YWx1ZSBwYWlyLCBvciB1bmRlZmluZWQgaWYgdGhlIHNvdXJjZSBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBzdGF0aWMgYXNPYmplY3QoXG4gICAgc291cmNlOiBQcm9wZXJ0eTxhbnk+IHwgYW55LFxuICAgIGRlZj86IEZvcm1GaWVsZERlZmluaXRpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gICAgfVxuICApOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIC8vIFNlcmlhbGl6ZSBrZXkgKFdBUk5JTkc6IGNhbiBiZSBhbiBvYmplY3QsIHdoZW4gdXNpbmcgYXV0b2NvbXBsZXRlIGZpZWxkIHRvIGVkaXQgYSBrZXkgLSBzZWUgQXBwUHJvcGVydGllc0Zvcm0pXG4gICAgY29uc3Qga2V5ID0gQXBwUHJvcGVydHlVdGlscy5nZXRQcm9wZXJ0eUtleShzb3VyY2UpO1xuXG4gICAgLy8gUHJlcGFyZSBhIGRlc2VyaWFsaXplIGZ1bmN0aW9uXG4gICAgbGV0IHNlcmlhbGl6ZUZuID0gZGVmPy5zZXJpYWxpemU7XG4gICAgaWYgKCFzZXJpYWxpemVGbikge1xuICAgICAgc3dpdGNoIChkZWY/LnR5cGUgfHwgJ290aGVyJykge1xuICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgY2FzZSAnZW51bXMnOlxuICAgICAgICAgIHNlcmlhbGl6ZUZuID0gQXBwUHJvcGVydHlVdGlscy5rZXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VudGl0eSc6XG4gICAgICAgIGNhc2UgJ2VudGl0aWVzJzpcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVBdHRyaWJ1dGUgPSBkZWY/LnNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyBvcHRzPy5kZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlID8/ICdpZCc7XG4gICAgICAgICAgc2VyaWFsaXplRm4gPVxuICAgICAgICAgICAgZGVmPy5zZXJpYWxpemUgfHxcbiAgICAgICAgICAgICgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplVmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aCh2YWx1ZSwgc2VyaWFsaXplQXR0cmlidXRlLCB2YWx1ZSAvKmRlZmF1bHQgdmFsdWUqLyk7XG4gICAgICAgICAgICAgIGlmIChpc05pbChzZXJpYWxpemVWYWx1ZSkpIHJldHVybiBzZXJpYWxpemVWYWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzZXJpYWxpemVGbiA9IEFwcFByb3BlcnR5VXRpbHMudG9TdHJpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XG5cbiAgICAvLyBWYWx1ZSBpcyBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZS52YWx1ZSkpIHtcbiAgICAgIHZhbHVlU3RyID0gc291cmNlLnZhbHVlLm1hcChzZXJpYWxpemVGbikuZmlsdGVyKGlzTm90TmlsT3JCbGFuaykuam9pbignLCcpO1xuICAgIH1cbiAgICAvLyBBbnkgb3RoZXIgY2FzZVxuICAgIGVsc2Uge1xuICAgICAgdmFsdWVTdHIgPSBzZXJpYWxpemVGbihzb3VyY2UudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4geyBrZXksIHZhbHVlOiB2YWx1ZVN0ciB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8VCA9IHN0cmluZz4oXG4gICAgc291cmNlOiBQcm9wZXJ0eSB8IFByb3BlcnR5PFQ+LFxuICAgIGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbixcbiAgICBvcHRzPzoge1xuICAgICAgZGVmYXVsdFN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgICAgIGRlZmF1bHRTdWdnZXN0T3B0aW9ucz86IEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zO1xuICAgICAgZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgICB9XG4gICk6IFByb3BlcnR5PFQ+IHwgUHJvbWlzZTxQcm9wZXJ0eTxUPj4ge1xuICAgIGlmICghc291cmNlPy5rZXkgfHwgaXNOaWwoc291cmNlLnZhbHVlKSB8fCAhZGVmKSByZXR1cm4gc291cmNlIGFzIFByb3BlcnR5PFQ+OyAvLyBTa2lwIGlmIG5vIGtleVxuXG4gICAgLy8gQ2xvbmUgdGhlIHNvdXJjZVxuICAgIGNvbnN0IHRhcmdldDogUHJvcGVydHk8YW55PiA9IHsga2V5OiBzb3VyY2Uua2V5LCB2YWx1ZTogc291cmNlLnZhbHVlIH07XG5cbiAgICBjb25zdCBqb2JzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuICAgIC8vIFJlc29sdmUgdmFsdWVcbiAgICBzd2l0Y2ggKGRlZi50eXBlKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdG9Cb29sZWFuKHNvdXJjZS52YWx1ZSBhcyBhbnksIHRvQm9vbGVhbihkZWYuZGVmYXVsdFZhbHVlKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICB0YXJnZXQudmFsdWUgPSB0b051bWJlcihzb3VyY2UudmFsdWUgYXMgYW55LCB0b051bWJlcihkZWYuZGVmYXVsdFZhbHVlKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gQXBwUHJvcGVydHlVdGlscy5rZXkodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayh2YWx1ZUtleSkpIHtcbiAgICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSAoZGVmLnZhbHVlcyBhcyAoc3RyaW5nIHwgUHJvcGVydHkpW10pPy5maW5kKChkZWZWYWx1ZSkgPT4gZGVmVmFsdWUgJiYgdmFsdWVLZXkgPT09IChkZWZWYWx1ZVsna2V5J10gfHwgZGVmVmFsdWUpKSA/PyBudWxsO1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IGVudW1WYWx1ZT8uWydrZXknXSA/PyBlbnVtVmFsdWUgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW51bXMnOlxuICAgICAgICBjb25zdCB2YWx1ZUtleXMgPSBBcnJheS5pc0FycmF5KHNvdXJjZS52YWx1ZSlcbiAgICAgICAgICA/IHNvdXJjZS52YWx1ZS5tYXAoQXBwUHJvcGVydHlVdGlscy5rZXkpIC8vIENvcHlcbiAgICAgICAgICA6IHR5cGVvZiBzb3VyY2UudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHNvdXJjZS52YWx1ZS50cmltKCkuc3BsaXQoLywrLylcbiAgICAgICAgICAgIDogW0FwcFByb3BlcnR5VXRpbHMua2V5KHNvdXJjZS52YWx1ZSldO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB2YWx1ZUtleXNcbiAgICAgICAgICAuZmlsdGVyKGlzTm90TmlsKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoa2V5OiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgIChkZWYudmFsdWVzIGFzIChzdHJpbmcgfCBQcm9wZXJ0eSlbXSk/LmZpbmQoKGRlZlZhbHVlKSA9PiBkZWZWYWx1ZSAmJiBrZXkgPT09IChkZWZWYWx1ZVsna2V5J10gfHwgZGVmVmFsdWUpKSB8fCB7IGtleSwgdmFsdWU6ICc/JyB9XG4gICAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnRpdHknOlxuICAgICAgICAvLyBEZXNlcmlhbGl6ZSBlbnRpdHkgKGUuZy4gbG9hZCBlbnRpdHkgZnJvbSB0aGUgaWQpXG4gICAgICAgIGNvbnN0IHZhbHVlT3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5yZXNvbHZlRW50aXR5KHRhcmdldC52YWx1ZSwgZGVmLCBvcHRzKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZU9yUHJvbWlzZSkpIHtcbiAgICAgICAgICBqb2JzLnB1c2goXG4gICAgICAgICAgICB2YWx1ZU9yUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICB0YXJnZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSB2YWx1ZU9yUHJvbWlzZSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnRpdGllcyc6XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gYXJyYXlcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gQXJyYXkuaXNBcnJheShzb3VyY2UudmFsdWUpXG4gICAgICAgICAgPyBzb3VyY2UudmFsdWUuc2xpY2UoKSAvLyBDb3B5XG4gICAgICAgICAgOiB0eXBlb2Ygc291cmNlLnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBzb3VyY2UudmFsdWVcbiAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICAvLyBEZXNlcmlhbGl6ZSBlYWNoIHN1Yi12YWx1ZVxuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGxldCBzdWJWYWx1ZSBvZiB0YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAvLyBEZXNlcmlhbGl6ZSBzdWItdmFsdWVcbiAgICAgICAgICBjb25zdCBzdWJWYWx1ZU9yUHJvbWlzZSA9IEFwcFByb3BlcnR5VXRpbHMucmVzb2x2ZUVudGl0eShzdWJWYWx1ZSwgZGVmLCBvcHRzKTtcblxuICAgICAgICAgIC8vIEFkZCBwcm9taXNlIHRvIGpvYnNcbiAgICAgICAgICBpZiAoaXNQcm9taXNlKHN1YlZhbHVlT3JQcm9taXNlKSkge1xuICAgICAgICAgICAgY29uc3QgZmluYWxJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgam9icy5wdXNoKFxuICAgICAgICAgICAgICBzdWJWYWx1ZU9yUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdWIgdmFsdWVcbiAgICAgICAgICAgICAgICB0YXJnZXQudmFsdWVbZmluYWxJbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzdWIgdmFsdWVcbiAgICAgICAgICAgIHRhcmdldC52YWx1ZVtpbmRleF0gPSBzdWJWYWx1ZU9yUHJvbWlzZSBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAvIVxcIFJldHVybiBhcyBwcm9taXNlIG9ubHkgaWYgbmVlZCAobGV0IGZ1bmN0aW9uIHN5bmMgd2hlbiBwb3NzaWJsZSlcbiAgICBpZiAoam9icy5sZW5ndGgpIHJldHVybiBQcm9taXNlLmFsbChqb2JzKS50aGVuKCgpID0+IHRhcmdldCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZUVudGl0eShcbiAgICB2YWx1ZTogYW55LFxuICAgIGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbixcbiAgICBvcHRzPzoge1xuICAgICAgZGVmYXVsdFN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgICAgIGRlZmF1bHRTdWdnZXN0T3B0aW9ucz86IEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zO1xuICAgICAgZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgICB9XG4gICk6IGFueSB8IFByb21pc2U8YW55PiB7XG4gICAgLy8gVXNlIGRlc2VyaWFsaXplIGZ1bmN0aW9uLCBpZiBhbnlcbiAgICBpZiAoZGVmLmRlc2VyaWFsaXplKSB7XG4gICAgICByZXR1cm4gZGVmLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBPciB0cnkgdXNpbmcgc3VnZ2VzdCBmdW5jdGlvblxuICAgIHJldHVybiB0aGlzLnJlc29sdmVFbnRpdHlCeVN1Z2dlc3QodmFsdWUsIGRlZiwgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyByZXNvbHZlRW50aXR5QnlTdWdnZXN0KFxuICAgIHZhbHVlOiBhbnksXG4gICAgZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICAgICAgZGVmYXVsdFN1Z2dlc3RPcHRpb25zPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXJpYWxpemVBdHRyaWJ1dGUgPSBkZWYuc2VyaWFsaXplQXR0cmlidXRlID8/IG9wdHM/LmRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGUgPz8gJ2lkJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpc05vdE5pbCh2YWx1ZVtzZXJpYWxpemVBdHRyaWJ1dGVdKSkge1xuICAgICAgcmV0dXJuIHZhbHVlOyAvLyBBbHJlYWR5IHJlc29sdmVcbiAgICB9XG5cbiAgICBjb25zdCBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT4gPSBkZWYuYXV0b2NvbXBsZXRlPy5zdWdnZXN0Rm4gfHwgb3B0cz8uZGVmYXVsdFN1Z2dlc3RGbjtcbiAgICBpZiAoIXN1Z2dlc3RGbikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTWlzc2luZyAnZGVzZXJpYWxpemUnIG9yICdhdXRvY29tcGxldGUuc3VnZ2VzdEZuJyBpbiB0aGUgZmllbGQgZGVmaW5pdGlvbiAnJHtkZWYua2V5fScuIENhbm5vdCBkZXNlcmlhbGl6ZSB2YWx1ZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWx1ZTsgLy8gU2tpcFxuICAgIH1cbiAgICBsZXQgc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB7IC4uLmRlZi5hdXRvY29tcGxldGU/LmZpbHRlciB9OyAvLyBDb3BlIGZpbHRlclxuICAgIGlmIChzZXJpYWxpemVBdHRyaWJ1dGUgPT09ICdpZCcgfHwgc2VyaWFsaXplQXR0cmlidXRlID09PSAnbGFiZWwnKSB7XG4gICAgICBmaWx0ZXJbc2VyaWFsaXplQXR0cmlidXRlXSA9IHNlcmlhbGl6ZUF0dHJpYnV0ZSA9PT0gJ2lkJyA/ICt2YWx1ZSA6IHZhbHVlO1xuICAgICAgc2VhcmNoVmFsdWUgPSAnKic7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKGBbcHJvcGVydGllcy11dGlsc10gUmVzb2x2aW5nIGVudGl0eSB3aGVyZSBpZD0ke3ZhbHVlfS4uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXIuc2VhcmNoQXR0cmlidXRlID0gc2VyaWFsaXplQXR0cmlidXRlO1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdIFJlc29sdmluZyBlbnRpdHkgd2hlcmUgJHtzZXJpYWxpemVBdHRyaWJ1dGV9PSR7c2VhcmNoVmFsdWV9Li4uYCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZldGNoIGVudGl0eSwgdXNpbmcgdGhlIHN1Z2dlc3QgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN1Z2dlc3RGbihzZWFyY2hWYWx1ZSwgZmlsdGVyLCBzZXJpYWxpemVBdHRyaWJ1dGUsICdhc2MnLCB7XG4gICAgICAgIHdpdGhUb3RhbDogZmFsc2UsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgLi4ub3B0cz8uZGVmYXVsdFN1Z2dlc3RPcHRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEdldCByZXN1bHQgYXJyYXlcbiAgICAgIGNvbnN0IGRhdGEgPSBBcnJheS5pc0FycmF5KHJlcykgPyByZXMgOiByZXMuZGF0YTtcblxuICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW3Byb3BlcnRpZXMtdXRpbHNdIE1vcmUgdGhhbiBvbmUgZW50aXR5IGZvdW5kLCBmb3Igb3B0aW9uICR7ZGVmLmtleX09JHt2YWx1ZX0hIFBsZWFzZSBjaGVjayBvcHRpb24ncyBkZWZpbml0aW9uIGFuZCB0aGUgJ2F1dG9jb21wbGV0ZS5zdWdnZXN0Rm4nIGZ1bmN0aW9uYCxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKGBbcHJvcGVydGllcy11dGlsc10gJHtkYXRhLmxlbmd0aH0gZW50aXRpZXMgZm91bmQ6IGAsIGRhdGEpO1xuXG4gICAgICAgIC8vIE9rLCB3ZSBmaW5kIGl0ID0+IHN0b3AgaGVyZVxuICAgICAgICByZXR1cm4gZGF0YVswXTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FybiwgYnV0IGNvbnRpbnVlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbcHJvcGVydGllcy11dGlsc10gVW5hYmxlIHRvIHJlc29sdmUgZW50aXR5IGZvciBvcHRpb246ICR7ZGVmLmtleX09JHt2YWx1ZX0uIFBsZWFzZSBjaGVjayBvcHRpb24ncyBkZWZpbml0aW9uIGFuZCB0aGUgJ2F1dG9jb21wbGV0ZS5zdWdnZXN0Rm4nIGZ1bmN0aW9uYFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtwcm9wZXJ0aWVzLXV0aWxzXSBDYW5ub3QgcmVzb2x2ZSBlbnRpdHkgZm9yIG9wdGlvbjogJHtkZWYua2V5fT0ke3ZhbHVlfWAsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgbWlzc2luZyByZXN1bHRcbiAgICBjb25zdCB1bnJlc29sdmVkRW50aXR5ID0gPGFueT57XG4gICAgICBbc2VyaWFsaXplQXR0cmlidXRlXTogdmFsdWUsXG4gICAgfTtcblxuICAgIC8vIEZpbGwgYXR0cmlidXRlcyB3aXRoICc/PydcbiAgICBkZWYuYXV0b2NvbXBsZXRlPy5hdHRyaWJ1dGVzPy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHVucmVzb2x2ZWRFbnRpdHlba2V5XSA9IHVucmVzb2x2ZWRFbnRpdHlba2V5XSA/PyAnJztcbiAgICB9KTtcblxuICAgIHJldHVybiB1bnJlc29sdmVkRW50aXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdG9TdHJpbmcodmFsdWU/OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZT8udG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJOUksTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQVUsT0FBdUIsRUFBRSxXQUFtQyxFQUFFLElBQWtDO1FBQzVILE9BQU8sQ0FDTCxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDYixzQkFBc0I7YUFDckIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1lBQ0YscUJBQXFCO2FBQ3BCLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNaLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFD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QUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0YsV0FBVztRQUNiLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBUTtZQUM1QixDQUFDLGtCQUFrQixDQUFDLEVBQUUsS0FBSztTQUM1QixDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBVztRQUNqQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSwgUHJvcGVydHlNYXAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIGlzUHJvbWlzZSwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zLCBTdWdnZXN0Rm4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc1V0aWxzIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGBQcm9wZXJ0eWAgb2JqZWN0cyBpbnRvIGEgYFByb3BlcnRpZXNNYXBgIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9wZXJ0eVtdfSBbc291cmNlc10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9uW119IFtkZWZpbml0aW9uc10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBmb3JtIGZpZWxkIGRlZmluaXRpb25zIHRvIGhlbHAgd2l0aCB0aGUgY29udmVyc2lvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm9taXROaWxPckJsYW5rXSAtIElmIHRydWUsIHByb3BlcnRpZXMgd2l0aCBuaWwgb3IgYmxhbmsgdmFsdWVzIHdpbGwgYmUgb21pdHRlZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICogQHJldHVybiB7UHJvcGVydHlNYXB9IC0gVGhlIHJlc3VsdGluZyBgUHJvcGVydGllc01hcGAgb2JqZWN0LlxuICAgKi9cbiAgc3RhdGljIGFycmF5QXNPYmplY3Q8VCA9IGFueT4oc291cmNlcz86IFByb3BlcnR5PFQ+W10sIGRlZmluaXRpb25zPzogRm9ybUZpZWxkRGVmaW5pdGlvbltdLCBvcHRzPzogeyBvbWl0TmlsT3JCbGFuazogYm9vbGVhbiB9KTogUHJvcGVydHlNYXAge1xuICAgIHJldHVybiAoXG4gICAgICAoc291cmNlcyB8fCBbXSlcbiAgICAgICAgLy8gU2VyaWFsaXplIGVhY2ggaXRlbVxuICAgICAgICAubWFwKChzb3VyY2UpID0+IHtcbiAgICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBrZXkgPSBBcHBQcm9wZXJ0eVV0aWxzLmdldFByb3BlcnR5S2V5KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKCFrZXkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnM/LmZpbmQoKGQpID0+IGQua2V5ID09PSBrZXkpO1xuICAgICAgICAgIHJldHVybiBBcHBQcm9wZXJ0eVV0aWxzLmFzT2JqZWN0KHNvdXJjZSwgZGVmKTtcbiAgICAgICAgfSlcbiAgICAgICAgLy8gRmlsbCBhIEpTT04gb2JqZWN0XG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHJlcywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTmlsT3JCbGFuayhpdGVtPy5rZXkpKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgLy8gU2tpcCBpZiBuaWwgb3IgYmxhbmsgdmFsdWVcbiAgICAgICAgICAgIGlmIChvcHRzPy5vbWl0TmlsT3JCbGFuayAhPT0gZmFsc2UgJiYgaXNOaWxPckJsYW5rKGl0ZW0udmFsdWUpKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgcmVzW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgPFByb3BlcnR5TWFwPnt9XG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIGZyb20gdGhlIGdpdmVuIG9iamVjdCwgb3B0aW9uYWxseSBhcHBseWluZyBkZWZpbml0aW9ucyB0byB0aGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9wZXJ0eU1hcH0gW3NvdXJjZXNdIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSB0byBiZSBleHRyYWN0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkRGVmaW5pdGlvbltdfSBbZGVmaW5pdGlvbnNdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgZGVmaW5pdGlvbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgZXh0cmFjdGVkIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqIEByZXR1cm4ge1Byb3BlcnR5W10gfCBQcm9taXNlPFByb3BlcnR5W10+fSBBbiBhcnJheSBvZiBwcm9wZXJ0aWVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0LCBvciBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoYXQgYXJyYXkuXG4gICAqL1xuICBzdGF0aWMgYXJyYXlGcm9tT2JqZWN0PFQ+KFxuICAgIHNvdXJjZXM/OiBQcm9wZXJ0eU1hcCB8IFByb3BlcnR5PFQ+W10sXG4gICAgZGVmaW5pdGlvbnM/OiBGb3JtRmllbGREZWZpbml0aW9uW10sXG4gICAgb3B0cz86IHtcbiAgICAgIGtlZXBPcnBoYW4/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAgICB9XG4gICk6IFByb3BlcnR5PFQ+W10gfCBQcm9taXNlPFByb3BlcnR5PFQ+W10+IHtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdIENvbnZlcnQgcHJvcGVydHkgbWFwIGludG8gYXJyYXkgb2YgUHJvcGVydHkuLi5gKTtcblxuICAgIGxldCB0YXJnZXRzID0gQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgPyBzb3VyY2VzLnNsaWNlKClcbiAgICAgIDogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlcyB8fCB7fSkubWFwKFxuICAgICAgICAgIChrZXkpID0+XG4gICAgICAgICAgICA8UHJvcGVydHk8YW55Pj57XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZXNba2V5XSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICBpZiAoISFkZWZpbml0aW9ucykge1xuICAgICAgdGFyZ2V0cyA9IHRhcmdldHNcbiAgICAgICAgLm1hcCgodGFyZ2V0OiBQcm9wZXJ0eTxhbnk+KSA9PiB7XG4gICAgICAgICAgLy8gRmluZCBkZWZpbml0aW9uXG4gICAgICAgICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnMuZmluZCgoZGVmKSA9PiBkZWYua2V5ID09PSB0YXJnZXQua2V5KTtcblxuICAgICAgICAgIC8vIEV4Y2x1ZGUgbm8gZGVmaW5pdGlvbiAoaWYgZXhwZWN0ZWQgYnkgdXNlciBvcHRpb25zKVxuICAgICAgICAgIGlmICghZGVmICYmIG9wdHM/LmtlZXBPcnBoYW4gPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIC8vIERlc2VyaWFsaXplIGZyb20gc3RyaW5nXG4gICAgICAgICAgbGV0IHByb3BlcnR5T3JQcm9taXNlID0gQXBwUHJvcGVydHlVdGlscy5mcm9tT2JqZWN0KHRhcmdldCwgZGVmKTtcbiAgICAgICAgICBpZiAoaXNQcm9taXNlKHByb3BlcnR5T3JQcm9taXNlKSkge1xuICAgICAgICAgICAgam9icy5wdXNoKHByb3BlcnR5T3JQcm9taXNlLnRoZW4oKHByb3BlcnR5KSA9PiAodGFyZ2V0LnZhbHVlID0gcHJvcGVydHkudmFsdWUpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFyZ2V0IHZhbHVlXG4gICAgICAgICAgICB0YXJnZXQudmFsdWUgPSBwcm9wZXJ0eU9yUHJvbWlzZS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhcyBwcm9taXNlLCB3aGVuIG5lZWRcbiAgICBpZiAoam9icy5sZW5ndGgpIHJldHVybiBQcm9taXNlLmFsbChqb2JzKS50aGVuKCgpID0+IHRhcmdldHMgYXMgUHJvcGVydHk8VD5bXSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0cyBhcyBQcm9wZXJ0eTxUPltdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBQcm9wZXJ0eVV0aWxzIHtcbiAgc3RhdGljIGtleShrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGtleT8ua2V5ID8/IGtleTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUtleShzb3VyY2U6IFByb3BlcnR5IHwgYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKHNvdXJjZS5rZXkgYXMgYW55KT8ua2V5ID8/IHNvdXJjZS5rZXk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIHNvdXJjZSB0byBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKlxuICAgKiBAcGFyYW0ge1Byb3BlcnR5PGFueT4gfCBhbnl9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcHJvcGVydHkgb3IgYW55IHZhbHVlIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9ufSBbZGVmXSAtIFRoZSBmb3JtIGZpZWxkIGRlZmluaXRpb24gdXNlZCBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU9J2lkJ10gLSBUaGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yIGRlZmF1bHQgc2VyaWFsaXphdGlvbi5cbiAgICogQHJldHVybiB7eyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9IHwgdW5kZWZpbmVkfSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VyaWFsaXplZCBrZXktdmFsdWUgcGFpciwgb3IgdW5kZWZpbmVkIGlmIHRoZSBzb3VyY2UgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgc3RhdGljIGFzT2JqZWN0KFxuICAgIHNvdXJjZTogUHJvcGVydHk8YW55PiB8IGFueSxcbiAgICBkZWY/OiBGb3JtRmllbGREZWZpbml0aW9uLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIH1cbiAgKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAvLyBTZXJpYWxpemUga2V5IChXQVJOSU5HOiBjYW4gYmUgYW4gb2JqZWN0LCB3aGVuIHVzaW5nIGF1dG9jb21wbGV0ZSBmaWVsZCB0byBlZGl0IGEga2V5IC0gc2VlIEFwcFByb3BlcnRpZXNGb3JtKVxuICAgIGNvbnN0IGtleSA9IEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkoc291cmNlKTtcblxuICAgIC8vIFByZXBhcmUgYSBkZXNlcmlhbGl6ZSBmdW5jdGlvblxuICAgIGxldCBzZXJpYWxpemVGbiA9IGRlZj8uc2VyaWFsaXplO1xuICAgIGlmICghc2VyaWFsaXplRm4pIHtcbiAgICAgIHN3aXRjaCAoZGVmPy50eXBlIHx8ICdvdGhlcicpIHtcbiAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIGNhc2UgJ2VudW1zJzpcbiAgICAgICAgICBzZXJpYWxpemVGbiA9IEFwcFByb3BlcnR5VXRpbHMua2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbnRpdHknOlxuICAgICAgICBjYXNlICdlbnRpdGllcyc6XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplQXR0cmlidXRlID0gZGVmPy5zZXJpYWxpemVBdHRyaWJ1dGUgPz8gb3B0cz8uZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyAnaWQnO1xuICAgICAgICAgIHNlcmlhbGl6ZUZuID1cbiAgICAgICAgICAgIGRlZj8uc2VyaWFsaXplIHx8XG4gICAgICAgICAgICAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZVZhbHVlID0gZ2V0UHJvcGVydHlCeVBhdGgodmFsdWUsIHNlcmlhbGl6ZUF0dHJpYnV0ZSwgdmFsdWUgLypkZWZhdWx0IHZhbHVlKi8pO1xuICAgICAgICAgICAgICBpZiAoaXNOaWwoc2VyaWFsaXplVmFsdWUpKSByZXR1cm4gc2VyaWFsaXplVmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc2VyaWFsaXplRm4gPSBBcHBQcm9wZXJ0eVV0aWxzLnRvU3RyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nO1xuXG4gICAgLy8gVmFsdWUgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UudmFsdWUpKSB7XG4gICAgICB2YWx1ZVN0ciA9IHNvdXJjZS52YWx1ZS5tYXAoc2VyaWFsaXplRm4pLmZpbHRlcihpc05vdE5pbE9yQmxhbmspLmpvaW4oJywnKTtcbiAgICB9XG4gICAgLy8gQW55IG90aGVyIGNhc2VcbiAgICBlbHNlIHtcbiAgICAgIHZhbHVlU3RyID0gc2VyaWFsaXplRm4oc291cmNlLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogdmFsdWVTdHIgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT2JqZWN0PFQgPSBzdHJpbmc+KFxuICAgIHNvdXJjZTogUHJvcGVydHkgfCBQcm9wZXJ0eTxUPixcbiAgICBkZWY6IEZvcm1GaWVsZERlZmluaXRpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmF1bHRTdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gICAgICBkZWZhdWx0U3VnZ2VzdE9wdGlvbnM/OiBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucztcbiAgICAgIGRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gICAgfVxuICApOiBQcm9wZXJ0eTxUPiB8IFByb21pc2U8UHJvcGVydHk8VD4+IHtcbiAgICBpZiAoIXNvdXJjZT8ua2V5IHx8IGlzTmlsKHNvdXJjZS52YWx1ZSkgfHwgIWRlZikgcmV0dXJuIHNvdXJjZSBhcyBQcm9wZXJ0eTxUPjsgLy8gU2tpcCBpZiBubyBrZXlcblxuICAgIC8vIENsb25lIHRoZSBzb3VyY2VcbiAgICBjb25zdCB0YXJnZXQ6IFByb3BlcnR5PGFueT4gPSB7IGtleTogc291cmNlLmtleSwgdmFsdWU6IHNvdXJjZS52YWx1ZSB9O1xuXG4gICAgY29uc3Qgam9iczogUHJvbWlzZTxhbnk+W10gPSBbXTtcbiAgICAvLyBSZXNvbHZlIHZhbHVlXG4gICAgc3dpdGNoIChkZWYudHlwZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRvQm9vbGVhbihzb3VyY2UudmFsdWUgYXMgYW55LCB0b0Jvb2xlYW4oZGVmLmRlZmF1bHRWYWx1ZSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdG9OdW1iZXIoc291cmNlLnZhbHVlIGFzIGFueSwgdG9OdW1iZXIoZGVmLmRlZmF1bHRWYWx1ZSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IEFwcFByb3BlcnR5VXRpbHMua2V5KHRhcmdldC52YWx1ZSk7XG4gICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsodmFsdWVLZXkpKSB7XG4gICAgICAgICAgY29uc3QgZW51bVZhbHVlID0gKGRlZi52YWx1ZXMgYXMgKHN0cmluZyB8IFByb3BlcnR5KVtdKT8uZmluZCgoZGVmVmFsdWUpID0+IGRlZlZhbHVlICYmIHZhbHVlS2V5ID09PSAoZGVmVmFsdWVbJ2tleSddIHx8IGRlZlZhbHVlKSkgPz8gbnVsbDtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBlbnVtVmFsdWU/Llsna2V5J10gPz8gZW51bVZhbHVlID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudW1zJzpcbiAgICAgICAgY29uc3QgdmFsdWVLZXlzID0gQXJyYXkuaXNBcnJheShzb3VyY2UudmFsdWUpXG4gICAgICAgICAgPyBzb3VyY2UudmFsdWUubWFwKEFwcFByb3BlcnR5VXRpbHMua2V5KSAvLyBDb3B5XG4gICAgICAgICAgOiB0eXBlb2Ygc291cmNlLnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBzb3VyY2UudmFsdWUudHJpbSgpLnNwbGl0KC8sKy8pXG4gICAgICAgICAgICA6IFtBcHBQcm9wZXJ0eVV0aWxzLmtleShzb3VyY2UudmFsdWUpXTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdmFsdWVLZXlzXG4gICAgICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgKGtleTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAoZGVmLnZhbHVlcyBhcyAoc3RyaW5nIHwgUHJvcGVydHkpW10pPy5maW5kKChkZWZWYWx1ZSkgPT4gZGVmVmFsdWUgJiYga2V5ID09PSAoZGVmVmFsdWVbJ2tleSddIHx8IGRlZlZhbHVlKSkgfHwgeyBrZXksIHZhbHVlOiAnPycgfVxuICAgICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW50aXR5JzpcbiAgICAgICAgLy8gRGVzZXJpYWxpemUgZW50aXR5IChlLmcuIGxvYWQgZW50aXR5IGZyb20gdGhlIGlkKVxuICAgICAgICBjb25zdCB2YWx1ZU9yUHJvbWlzZSA9IEFwcFByb3BlcnR5VXRpbHMucmVzb2x2ZUVudGl0eSh0YXJnZXQudmFsdWUsIGRlZiwgb3B0cyk7XG4gICAgICAgIGlmIChpc1Byb21pc2UodmFsdWVPclByb21pc2UpKSB7XG4gICAgICAgICAgam9icy5wdXNoKFxuICAgICAgICAgICAgdmFsdWVPclByb21pc2UudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gdmFsdWVPclByb21pc2UgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW50aXRpZXMnOlxuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIGFycmF5XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IEFycmF5LmlzQXJyYXkoc291cmNlLnZhbHVlKVxuICAgICAgICAgID8gc291cmNlLnZhbHVlLnNsaWNlKCkgLy8gQ29weVxuICAgICAgICAgIDogdHlwZW9mIHNvdXJjZS52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gc291cmNlLnZhbHVlXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgLy8gRGVzZXJpYWxpemUgZWFjaCBzdWItdmFsdWVcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgc3ViVmFsdWUgb2YgdGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgLy8gRGVzZXJpYWxpemUgc3ViLXZhbHVlXG4gICAgICAgICAgY29uc3Qgc3ViVmFsdWVPclByb21pc2UgPSBBcHBQcm9wZXJ0eVV0aWxzLnJlc29sdmVFbnRpdHkoc3ViVmFsdWUsIGRlZiwgb3B0cyk7XG5cbiAgICAgICAgICAvLyBBZGQgcHJvbWlzZSB0byBqb2JzXG4gICAgICAgICAgaWYgKGlzUHJvbWlzZShzdWJWYWx1ZU9yUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGpvYnMucHVzaChcbiAgICAgICAgICAgICAgc3ViVmFsdWVPclByb21pc2UudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3ViIHZhbHVlXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlW2ZpbmFsSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgc3ViIHZhbHVlXG4gICAgICAgICAgICB0YXJnZXQudmFsdWVbaW5kZXhdID0gc3ViVmFsdWVPclByb21pc2UgYXMgYW55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLyFcXCBSZXR1cm4gYXMgcHJvbWlzZSBvbmx5IGlmIG5lZWQgKGxldCBmdW5jdGlvbiBzeW5jIHdoZW4gcG9zc2libGUpXG4gICAgaWYgKGpvYnMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5hbGwoam9icykudGhlbigoKSA9PiB0YXJnZXQpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVFbnRpdHkoXG4gICAgdmFsdWU6IGFueSxcbiAgICBkZWY6IEZvcm1GaWVsZERlZmluaXRpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlZmF1bHRTdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gICAgICBkZWZhdWx0U3VnZ2VzdE9wdGlvbnM/OiBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucztcbiAgICAgIGRlZmF1bHRTZXJpYWxpemVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gICAgfVxuICApOiBhbnkgfCBQcm9taXNlPGFueT4ge1xuICAgIC8vIFVzZSBkZXNlcmlhbGl6ZSBmdW5jdGlvbiwgaWYgYW55XG4gICAgaWYgKGRlZi5kZXNlcmlhbGl6ZSkge1xuICAgICAgcmV0dXJuIGRlZi5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gT3IgdHJ5IHVzaW5nIHN1Z2dlc3QgZnVuY3Rpb25cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlRW50aXR5QnlTdWdnZXN0KHZhbHVlLCBkZWYsIG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcmVzb2x2ZUVudGl0eUJ5U3VnZ2VzdChcbiAgICB2YWx1ZTogYW55LFxuICAgIGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbixcbiAgICBvcHRzPzoge1xuICAgICAgZGVmYXVsdFN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgICAgIGRlZmF1bHRTdWdnZXN0T3B0aW9ucz86IEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zO1xuICAgICAgZGVmYXVsdFNlcmlhbGl6ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgICB9XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplQXR0cmlidXRlID0gZGVmLnNlcmlhbGl6ZUF0dHJpYnV0ZSA/PyBvcHRzPy5kZWZhdWx0U2VyaWFsaXplQXR0cmlidXRlID8/ICdpZCc7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgaXNOb3ROaWwodmFsdWVbc2VyaWFsaXplQXR0cmlidXRlXSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTsgLy8gQWxyZWFkeSByZXNvbHZlXG4gICAgfVxuXG4gICAgY29uc3Qgc3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gZGVmLmF1dG9jb21wbGV0ZT8uc3VnZ2VzdEZuIHx8IG9wdHM/LmRlZmF1bHRTdWdnZXN0Rm47XG4gICAgaWYgKCFzdWdnZXN0Rm4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE1pc3NpbmcgJ2Rlc2VyaWFsaXplJyBvciAnYXV0b2NvbXBsZXRlLnN1Z2dlc3RGbicgaW4gdGhlIGZpZWxkIGRlZmluaXRpb24gJyR7ZGVmLmtleX0nLiBDYW5ub3QgZGVzZXJpYWxpemUgdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gdmFsdWU7IC8vIFNraXBcbiAgICB9XG4gICAgbGV0IHNlYXJjaFZhbHVlID0gdmFsdWU7XG4gICAgY29uc3QgZmlsdGVyID0geyAuLi5kZWYuYXV0b2NvbXBsZXRlPy5maWx0ZXIgfTsgLy8gQ29wZSBmaWx0ZXJcbiAgICBpZiAoc2VyaWFsaXplQXR0cmlidXRlID09PSAnaWQnIHx8IHNlcmlhbGl6ZUF0dHJpYnV0ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgZmlsdGVyW3NlcmlhbGl6ZUF0dHJpYnV0ZV0gPSBzZXJpYWxpemVBdHRyaWJ1dGUgPT09ICdpZCcgPyArdmFsdWUgOiB2YWx1ZTtcbiAgICAgIHNlYXJjaFZhbHVlID0gJyonO1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdIFJlc29sdmluZyBlbnRpdHkgd2hlcmUgaWQ9JHt2YWx1ZX0uLi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyLnNlYXJjaEF0dHJpYnV0ZSA9IHNlcmlhbGl6ZUF0dHJpYnV0ZTtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoYFtwcm9wZXJ0aWVzLXV0aWxzXSBSZXNvbHZpbmcgZW50aXR5IHdoZXJlICR7c2VyaWFsaXplQXR0cmlidXRlfT0ke3NlYXJjaFZhbHVlfS4uLmApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBlbnRpdHksIHVzaW5nIHRoZSBzdWdnZXN0IGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzdWdnZXN0Rm4oc2VhcmNoVmFsdWUsIGZpbHRlciwgc2VyaWFsaXplQXR0cmlidXRlLCAnYXNjJywge1xuICAgICAgICB3aXRoVG90YWw6IGZhbHNlLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIC4uLm9wdHM/LmRlZmF1bHRTdWdnZXN0T3B0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgcmVzdWx0IGFycmF5XG4gICAgICBjb25zdCBkYXRhID0gQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogcmVzLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChkYXRhPy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtwcm9wZXJ0aWVzLXV0aWxzXSBNb3JlIHRoYW4gb25lIGVudGl0eSBmb3VuZCwgZm9yIG9wdGlvbiAke2RlZi5rZXl9PSR7dmFsdWV9ISBQbGVhc2UgY2hlY2sgb3B0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgdGhlICdhdXRvY29tcGxldGUuc3VnZ2VzdEZuJyBmdW5jdGlvbmAsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhgW3Byb3BlcnRpZXMtdXRpbHNdICR7ZGF0YS5sZW5ndGh9IGVudGl0aWVzIGZvdW5kOiBgLCBkYXRhKTtcblxuICAgICAgICAvLyBPaywgd2UgZmluZCBpdCA9PiBzdG9wIGhlcmVcbiAgICAgICAgcmV0dXJuIGRhdGFbMF07XG4gICAgICB9XG5cbiAgICAgIC8vIFdhcm4sIGJ1dCBjb250aW51ZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW3Byb3BlcnRpZXMtdXRpbHNdIFVuYWJsZSB0byByZXNvbHZlIGVudGl0eSBmb3Igb3B0aW9uOiAke2RlZi5rZXl9PSR7dmFsdWV9LiBQbGVhc2UgY2hlY2sgb3B0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgdGhlICdhdXRvY29tcGxldGUuc3VnZ2VzdEZuJyBmdW5jdGlvbmBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbcHJvcGVydGllcy11dGlsc10gQ2Fubm90IHJlc29sdmUgZW50aXR5IGZvciBvcHRpb246ICR7ZGVmLmtleX09JHt2YWx1ZX1gLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIG1pc3NpbmcgcmVzdWx0XG4gICAgY29uc3QgdW5yZXNvbHZlZEVudGl0eSA9IDxhbnk+e1xuICAgICAgW3NlcmlhbGl6ZUF0dHJpYnV0ZV06IHZhbHVlLFxuICAgIH07XG5cbiAgICAvLyBGaWxsIGF0dHJpYnV0ZXMgd2l0aCAnPz8nXG4gICAgZGVmLmF1dG9jb21wbGV0ZT8uYXR0cmlidXRlcz8uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB1bnJlc29sdmVkRW50aXR5W2tleV0gPSB1bnJlc29sdmVkRW50aXR5W2tleV0gPz8gJyc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZXNvbHZlZEVudGl0eTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHRvU3RyaW5nKHZhbHVlPzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWU/LnRvU3RyaW5nKCk7XG4gIH1cbn1cbiJdfQ==