@ngrx-traits/core 16.0.0 → 17.0.1

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.
@@ -27,4 +27,4 @@ export function getCacheValue(keys, state) {
27
27
  export function isCacheValid(cache, exp) {
28
28
  return !cache.invalid && Date.now() <= cache.date + exp;
29
29
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxTQUFTLElBQUksQ0FBQyxHQUFvQjtJQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2IsSUFBSSxFQUFFO2FBQ04sTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQVMsQ0FBQztRQUNqQixDQUFDLENBQUMsR0FBRyxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFhO0lBQ25DLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQWMsRUFDZCxLQUFpQjtJQUVqQixJQUFJLE1BQU0sR0FBMEIsS0FBSyxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3RCLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQztLQUMvQjtJQUNELE9BQU8sTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFnQixFQUFFLEdBQVc7SUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDYWNoZUtleSA9IHN0cmluZyB8IChzdHJpbmcgfCBvYmplY3QpW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVEYXRhIHtcbiAgdmFsdWU6IGFueTtcbiAgZGF0ZTogbnVtYmVyO1xuICBpbnZhbGlkOiBib29sZWFuO1xuICBoaXRDb3VudDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUtleXMge1xuICBrZXlzPzogeyBba2V5OiBzdHJpbmddOiBDYWNoZUtleXMgfTtcbiAgZGF0YT86IENhY2hlRGF0YTtcbn1cblxuZXhwb3J0IHR5cGUgQ2FjaGVTdGF0ZSA9IENhY2hlS2V5cztcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUNvbmZpZyB7XG4gIGV4cGlyZXM6IG51bWJlcjtcbn1cbmZ1bmN0aW9uIGhhc2goa2V5OiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5LCAoXywgdmFsKSA9PlxuICAgIHR5cGVvZiB2YWwgPT0gJ29iamVjdCdcbiAgICAgID8gT2JqZWN0LmtleXModmFsKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGspID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHZhbFtrXTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSwge30gYXMgYW55KVxuICAgICAgOiB2YWxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hLZXkoa2V5OiBDYWNoZUtleSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnXG4gICAgPyBba2V5XVxuICAgIDoga2V5Lm1hcCgoaykgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGsgPT09ICdzdHJpbmcnID8gayA6IGhhc2goayk7XG4gICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlVmFsdWUoXG4gIGtleXM6IHN0cmluZ1tdLFxuICBzdGF0ZTogQ2FjaGVTdGF0ZVxuKTogQ2FjaGVEYXRhIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHBhcmVudDogQ2FjaGVLZXlzIHwgdW5kZWZpbmVkID0gc3RhdGU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQ/LmtleXM/LltrZXldO1xuICAgIGlmICghcGFyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXJlbnQ/LmRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhY2hlVmFsaWQoY2FjaGU6IENhY2hlRGF0YSwgZXhwOiBudW1iZXIpIHtcbiAgcmV0dXJuICFjYWNoZS5pbnZhbGlkICYmIERhdGUubm93KCkgPD0gY2FjaGUuZGF0ZSArIGV4cDtcbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxTQUFTLElBQUksQ0FBQyxHQUFvQjtJQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2IsSUFBSSxFQUFFO2FBQ04sTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQVMsQ0FBQztRQUNqQixDQUFDLENBQUMsR0FBRyxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFhO0lBQ25DLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQWMsRUFDZCxLQUFpQjtJQUVqQixJQUFJLE1BQU0sR0FBMEIsS0FBSyxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxPQUFPLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBZ0IsRUFBRSxHQUFXO0lBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ2FjaGVLZXkgPSBzdHJpbmcgfCAoc3RyaW5nIHwgb2JqZWN0KVtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRGF0YSB7XG4gIHZhbHVlOiBhbnk7XG4gIGRhdGU6IG51bWJlcjtcbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgaGl0Q291bnQ6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVLZXlzIHtcbiAga2V5cz86IHsgW2tleTogc3RyaW5nXTogQ2FjaGVLZXlzIH07XG4gIGRhdGE/OiBDYWNoZURhdGE7XG59XG5cbmV4cG9ydCB0eXBlIENhY2hlU3RhdGUgPSBDYWNoZUtleXM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVDb25maWcge1xuICBleHBpcmVzOiBudW1iZXI7XG59XG5mdW5jdGlvbiBoYXNoKGtleTogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSwgKF8sIHZhbCkgPT5cbiAgICB0eXBlb2YgdmFsID09ICdvYmplY3QnXG4gICAgICA/IE9iamVjdC5rZXlzKHZhbClcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBrKSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba10gPSB2YWxba107XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sIHt9IGFzIGFueSlcbiAgICAgIDogdmFsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoS2V5KGtleTogQ2FjaGVLZXkpOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJ1xuICAgID8gW2tleV1cbiAgICA6IGtleS5tYXAoKGspID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBrID09PSAnc3RyaW5nJyA/IGsgOiBoYXNoKGspO1xuICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZVZhbHVlKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgc3RhdGU6IENhY2hlU3RhdGVcbik6IENhY2hlRGF0YSB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJlbnQ6IENhY2hlS2V5cyB8IHVuZGVmaW5lZCA9IHN0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgcGFyZW50ID0gcGFyZW50Py5rZXlzPy5ba2V5XTtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGFyZW50Py5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZVZhbGlkKGNhY2hlOiBDYWNoZURhdGEsIGV4cDogbnVtYmVyKSB7XG4gIHJldHVybiAhY2FjaGUuaW52YWxpZCAmJiBEYXRlLm5vdygpIDw9IGNhY2hlLmRhdGUgKyBleHA7XG59XG4iXX0=
@@ -4,15 +4,15 @@ import { cacheReducer } from './cache.reducer';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@ngrx/store";
6
6
  export class CacheModule {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }
9
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, decorators: [{
12
12
  type: NgModule,
13
13
  args: [{
14
14
  imports: [StoreModule.forFeature('cache', cacheReducer)],
15
15
  providers: [],
16
16
  }]
17
17
  }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU0vQyxNQUFNLE9BQU8sV0FBVzsrR0FBWCxXQUFXO2dIQUFYLFdBQVc7Z0hBQVgsV0FBVyxZQUhaLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQzs7NEZBRzVDLFdBQVc7a0JBSnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQ3hELFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2FjaGVSZWR1Y2VyIH0gZnJvbSAnLi9jYWNoZS5yZWR1Y2VyJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoJ2NhY2hlJywgY2FjaGVSZWR1Y2VyKV0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENhY2hlTW9kdWxlIHt9XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU0vQyxNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVc7K0dBQVgsV0FBVyxZQUhaLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQzs7MkZBRzVDLFdBQVc7a0JBSnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQ3hELFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2FjaGVSZWR1Y2VyIH0gZnJvbSAnLi9jYWNoZS5yZWR1Y2VyJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoJ2NhY2hlJywgY2FjaGVSZWR1Y2VyKV0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENhY2hlTW9kdWxlIHt9XG4iXX0=
@@ -135,4 +135,4 @@ function invalidaSubKeys(state) {
135
135
  }
136
136
  return state;
137
137
  }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL2NhY2hlL2NhY2hlLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUlMLE9BQU8sRUFDUCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBZTtJQUN0QyxJQUFJLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUN2QyxZQUFZLEVBQ1osRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQ25FLGFBQWEsQ0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ1osRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFDL0IsS0FBSyxFQUNMLFlBQVksQ0FDYixDQUNGLEVBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLEVBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzlDLE1B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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1FBQzdELHFDQUFxQztRQUNyQyxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFF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RUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDWDtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUFnQjtJQUN2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDZCxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUMvQztJQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtRQUNkLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENhY2hlRGF0YSxcbiAgQ2FjaGVLZXlzLFxuICBDYWNoZVN0YXRlLFxuICBoYXNoS2V5LFxuICBpc0NhY2hlVmFsaWQsXG59IGZyb20gJy4vY2FjaGUubW9kZWxzJztcbmltcG9ydCAqIGFzIENhY2hlQWN0aW9ucyBmcm9tICcuL2NhY2hlLmFjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlOiBDYWNoZVN0YXRlID0ge1xuICBrZXlzOiB7fSxcbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxuICBpbml0aWFsU3RhdGUsXG4gIG9uKENhY2hlQWN0aW9ucy5jYWNoZSwgKHN0YXRlLCB7IGtleSwgdmFsdWUsIGRhdGUsIG1heENhY2hlU2l6ZSB9KSA9PlxuICAgIHNldENhY2hlVmFsdWUoXG4gICAgICBoYXNoS2V5KGtleSksXG4gICAgICB7IHZhbHVlLCBkYXRlLCBpbnZhbGlkOiBmYWxzZSB9LFxuICAgICAgc3RhdGUsXG4gICAgICBtYXhDYWNoZVNpemVcbiAgICApXG4gICksXG4gIG9uKENhY2hlQWN0aW9ucy5pbnZhbGlkYXRlQ2FjaGUsIChzdGF0ZSwgeyBrZXkgfSkgPT4ge1xuICAgIGNvbnN0IGsgPSBoYXNoS2V5KGtleSk7XG4gICAgcmV0dXJuIGludmFsaWRhdGVDYWNoZShrLCBzdGF0ZSk7XG4gIH0pLFxuICBvbihDYWNoZUFjdGlvbnMuZGVsZXRlQ2FjaGUsIChzdGF0ZSwgeyBrZXkgfSkgPT4ge1xuICAgIGNvbnN0IGsgPSBoYXNoS2V5KGtleSk7XG4gICAgcmV0dXJuIGRlbGV0ZUNhY2hlVmFsdWUoaywgc3RhdGUpO1xuICB9KSxcbiAgb24oQ2FjaGVBY3Rpb25zLmhpdENhY2hlLCAoc3RhdGUsIHsga2V5IH0pID0+IHtcbiAgICBjb25zdCBrID0gaGFzaEtleShrZXkpO1xuICAgIHJldHVybiBpbmNyZWFzZUNhY2hlSGl0Q291bnQoaywgc3RhdGUpO1xuICB9KVxuKTtcblxuZnVuY3Rpb24gc2V0Q2FjaGVWYWx1ZShcbiAga2V5czogc3RyaW5nW10sXG4gIHZhbHVlOiBPbWl0PENhY2hlRGF0YSwgJ2hpdENvdW50Jz4sXG4gIHN0YXRlOiBDYWNoZVN0YXRlLFxuICBtYXhDYWNoZVNpemU/OiBudW1iZXIsXG4gIGV4cGlyZXM/OiBudW1iZXJcbikge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgbGV0IGNhY2hlID0gbmV3U3RhdGU7XG4gIGxldCBsYXN0Q2FjaGU6IENhY2hlS2V5cyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBjYWNoZS5rZXlzID0gY2FjaGU/LmtleXMgPyB7IC4uLmNhY2hlPy5rZXlzIH0gOiB7fTtcbiAgICBsZXQgdiA9IGNhY2hlLmtleXNba2V5XTtcbiAgICB2ID0gdiA/IHsgLi4udiB9IDoge307XG4gICAgY2FjaGUua2V5c1trZXldID0gdjtcbiAgICBsYXN0Q2FjaGUgPSBjYWNoZTtcbiAgICBjYWNoZSA9IHY7XG4gIH1cbiAgY2FjaGUuZGF0YSA9IGNhY2hlLmRhdGFcbiAgICA/IHsgLi4udmFsdWUsIGhpdENvdW50OiBjYWNoZS5kYXRhLmhpdENvdW50ICsgMSB9XG4gICAgOiB7IC4uLnZhbHVlLCBoaXRDb3VudDogMSB9O1xuXG4gIGlmIChcbiAgICBtYXhDYWNoZVNpemUgJiZcbiAgICBsYXN0Q2FjaGU/LmtleXMgJiZcbiAgICBPYmplY3Qua2V5cyhsYXN0Q2FjaGUua2V5cykubGVuZ3RoID4gbWF4Q2FjaGVTaXplXG4gICkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBmaW5kTGVzc0hpdE9yT2xkZXN0Q2FjaGVFbnRyaWVzKFxuICAgICAgbGFzdENhY2hlLFxuICAgICAgZXhwaXJlcyA/PyBJbmZpbml0eSxcbiAgICAgIG1heENhY2hlU2l6ZVxuICAgICk7XG4gICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleV0gb2YgZW50cmllcykge1xuICAgICAgICBkZWxldGUgbGFzdENhY2hlLmtleXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kTGVzc0hpdE9yT2xkZXN0Q2FjaGVFbnRyaWVzKFxuICBzdGF0ZTogQ2FjaGVLZXlzLFxuICBleHBpcmVzOiBudW1iZXIsXG4gIG1heENhY2hlU2l6ZTogbnVtYmVyXG4pIHtcbiAgaWYgKCFzdGF0ZS5rZXlzKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc3RhdGUua2V5cyk7XG4gIC8vIGZpbmQgdGhlIG5ld2VzdCBrZXk7XG4gIGNvbnN0IFtuZXdlc3RLZXldID0gZW50cmllcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhRGF0ZSA9IGFbMV0uZGF0YT8uZGF0ZSA/PyAwO1xuICAgIGNvbnN0IGJEYXRlID0gYlsxXS5kYXRhPy5kYXRlID8/IDA7XG4gICAgcmV0dXJuIGFEYXRlID4gYkRhdGUgPyBhIDogYjtcbiAgfSk7XG4gIGNvbnN0IHNvcnRlZCA9IGVudHJpZXMuc29ydCgoW2FLZXksIGFWYWx1ZV0sIFtiS2V5LCBiVmFsdWVdKSA9PiB7XG4gICAgLy8gZW5zdXJlcyB0aGUgbmV3ZXN0IGtleSBhbHdheXMgd2luc1xuICAgIGlmIChhS2V5ID09PSBuZXdlc3RLZXkpIHJldHVybiAtMTtcbiAgICBpZiAoYktleSA9PT0gbmV3ZXN0S2V5KSByZXR1cm4gMTtcbiAgICBjb25zdCBhVmFsaWQgPSBhVmFsdWUuZGF0YSAmJiBpc0NhY2hlVmFsaWQoYVZhbHVlLmRhdGEsIGV4cGlyZXMpID8gMSA6IDA7XG4gICAgY29uc3QgYlZhbGlkID0gYlZhbHVlLmRhdGEgJiYgaXNDYWNoZVZhbGlkKGJWYWx1ZS5kYXRhLCBleHBpcmVzKSA/IDEgOiAwO1xuICAgIGNvbnN0IGRpZmZWYWxpZCA9IGFWYWxpZCAtIGJWYWxpZDtcbiAgICBjb25zdCBkaWZmSGl0ID0gKGFWYWx1ZS5kYXRhPy5oaXRDb3VudCA/PyAwKSAtIChiVmFsdWUuZGF0YT8uaGl0Q291bnQgPz8gMCk7XG4gICAgY29uc3QgZGlmZkRhdGUgPSAoYVZhbHVlLmRhdGE/LmRhdGUgPz8gMCkgLSAoYlZhbHVlLmRhdGE/LmRhdGUgPz8gMCk7XG4gICAgcmV0dXJuIChcbiAgICAgIC0xICogKGRpZmZWYWxpZCA9PT0gMCA/IChkaWZmSGl0ID09PSAwID8gZGlmZkRhdGUgOiBkaWZmSGl0KSA6IGRpZmZWYWxpZClcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIHNvcnRlZC5zbGljZShtYXhDYWNoZVNpemUpO1xufVxuXG5mdW5jdGlvbiBkZWxldGVDYWNoZVZhbHVlKGtleXM6IHN0cmluZ1tdLCBzdGF0ZTogQ2FjaGVTdGF0ZSkge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgbGV0IGNhY2hlID0gbmV3U3RhdGU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBpZiAoIWNhY2hlLmtleXMpIHJldHVybiBzdGF0ZTtcbiAgICBjYWNoZS5rZXlzID0geyAuLi5jYWNoZT8ua2V5cyB9O1xuICAgIGxldCB2ID0gY2FjaGUua2V5c1trZXldO1xuICAgIGlmICghdikgcmV0dXJuIHN0YXRlO1xuICAgIHYgPSB7IC4uLnYgfTtcbiAgICBjYWNoZS5rZXlzW2tleV0gPSB2O1xuICAgIGNhY2hlID0gdjtcbiAgfVxuICBpZiAoY2FjaGUuZGF0YSkgZGVsZXRlIGNhY2hlLmRhdGE7XG4gIGVsc2UgaWYgKGNhY2hlLmtleXMpIGRlbGV0ZSBjYWNoZS5rZXlzO1xuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDYWNoZShrZXlzOiBzdHJpbmdbXSwgc3RhdGU6IENhY2hlU3RhdGUpIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFjYWNoZT8ua2V5cykgcmV0dXJuIHN0YXRlO1xuICAgIGNhY2hlLmtleXMgPSB7IC4uLmNhY2hlPy5rZXlzIH07XG4gICAgbGV0IHYgPSBjYWNoZT8ua2V5cz8uW2tleV07XG4gICAgaWYgKCF2KSByZXR1cm4gc3RhdGU7XG4gICAgdiA9IHsgLi4udiB9O1xuICAgIGNhY2hlLmtleXNba2V5XSA9IHY7XG4gICAgY2FjaGUgPSB2O1xuICB9XG4gIGNhY2hlICYmIGludmFsaWRhU3ViS2V5cyhjYWNoZSk7XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gaW5jcmVhc2VDYWNoZUhpdENvdW50KGtleXM6IHN0cmluZ1tdLCBzdGF0ZTogQ2FjaGVTdGF0ZSkge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgbGV0IGNhY2hlID0gbmV3U3RhdGU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBpZiAoIWNhY2hlPy5rZXlzKSByZXR1cm4gc3RhdGU7XG4gICAgY2FjaGUua2V5cyA9IHsgLi4uY2FjaGU/LmtleXMgfTtcbiAgICBsZXQgdiA9IGNhY2hlPy5rZXlzPy5ba2V5XTtcbiAgICBpZiAoIXYpIHJldHVybiBzdGF0ZTtcbiAgICB2ID0geyAuLi52IH07XG4gICAgY2FjaGUua2V5c1trZXldID0gdjtcbiAgICBjYWNoZSA9IHY7XG4gIH1cbiAgaWYgKCFjYWNoZS5kYXRhKSByZXR1cm4gc3RhdGU7XG4gIGNhY2hlLmRhdGEgPSB7IC4uLmNhY2hlLmRhdGEsIGhpdENvdW50OiBjYWNoZS5kYXRhLmhpdENvdW50ICsgMSB9O1xuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhU3ViS2V5cyhzdGF0ZTogQ2FjaGVLZXlzKSB7XG4gIGlmIChzdGF0ZS5kYXRhKSB7XG4gICAgc3RhdGUuZGF0YSA9IHsgLi4uc3RhdGUuZGF0YSwgaW52YWxpZDogdHJ1ZSB9O1xuICB9XG4gIGlmIChzdGF0ZS5rZXlzKSB7XG4gICAgc3RhdGUua2V5cyA9IHsgLi4uc3RhdGUua2V5cyB9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0YXRlLmtleXMpIHtcbiAgICAgIHN0YXRlLmtleXNba2V5XSA9IGludmFsaWRhU3ViS2V5cyh7IC4uLnN0YXRlLmtleXNba2V5XSB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuIl19
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL2NhY2hlL2NhY2hlLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUlMLE9BQU8sRUFDUCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBZTtJQUN0QyxJQUFJLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUN2QyxZQUFZLEVBQ1osRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQ25FLGFBQWEsQ0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ1osRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFDL0IsS0FBSyxFQUNMLFlBQVksQ0FDYixDQUNGLEVBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLEVBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzlDLE1B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ZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBDYWNoZURhdGEsXG4gIENhY2hlS2V5cyxcbiAgQ2FjaGVTdGF0ZSxcbiAgaGFzaEtleSxcbiAgaXNDYWNoZVZhbGlkLFxufSBmcm9tICcuL2NhY2hlLm1vZGVscyc7XG5pbXBvcnQgKiBhcyBDYWNoZUFjdGlvbnMgZnJvbSAnLi9jYWNoZS5hY3Rpb25zJztcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZTogQ2FjaGVTdGF0ZSA9IHtcbiAga2V5czoge30sXG59O1xuXG5leHBvcnQgY29uc3QgY2FjaGVSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihcbiAgaW5pdGlhbFN0YXRlLFxuICBvbihDYWNoZUFjdGlvbnMuY2FjaGUsIChzdGF0ZSwgeyBrZXksIHZhbHVlLCBkYXRlLCBtYXhDYWNoZVNpemUgfSkgPT5cbiAgICBzZXRDYWNoZVZhbHVlKFxuICAgICAgaGFzaEtleShrZXkpLFxuICAgICAgeyB2YWx1ZSwgZGF0ZSwgaW52YWxpZDogZmFsc2UgfSxcbiAgICAgIHN0YXRlLFxuICAgICAgbWF4Q2FjaGVTaXplXG4gICAgKVxuICApLFxuICBvbihDYWNoZUFjdGlvbnMuaW52YWxpZGF0ZUNhY2hlLCAoc3RhdGUsIHsga2V5IH0pID0+IHtcbiAgICBjb25zdCBrID0gaGFzaEtleShrZXkpO1xuICAgIHJldHVybiBpbnZhbGlkYXRlQ2FjaGUoaywgc3RhdGUpO1xuICB9KSxcbiAgb24oQ2FjaGVBY3Rpb25zLmRlbGV0ZUNhY2hlLCAoc3RhdGUsIHsga2V5IH0pID0+IHtcbiAgICBjb25zdCBrID0gaGFzaEtleShrZXkpO1xuICAgIHJldHVybiBkZWxldGVDYWNoZVZhbHVlKGssIHN0YXRlKTtcbiAgfSksXG4gIG9uKENhY2hlQWN0aW9ucy5oaXRDYWNoZSwgKHN0YXRlLCB7IGtleSB9KSA9PiB7XG4gICAgY29uc3QgayA9IGhhc2hLZXkoa2V5KTtcbiAgICByZXR1cm4gaW5jcmVhc2VDYWNoZUhpdENvdW50KGssIHN0YXRlKTtcbiAgfSlcbik7XG5cbmZ1bmN0aW9uIHNldENhY2hlVmFsdWUoXG4gIGtleXM6IHN0cmluZ1tdLFxuICB2YWx1ZTogT21pdDxDYWNoZURhdGEsICdoaXRDb3VudCc+LFxuICBzdGF0ZTogQ2FjaGVTdGF0ZSxcbiAgbWF4Q2FjaGVTaXplPzogbnVtYmVyLFxuICBleHBpcmVzPzogbnVtYmVyXG4pIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBsZXQgbGFzdENhY2hlOiBDYWNoZUtleXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY2FjaGUua2V5cyA9IGNhY2hlPy5rZXlzID8geyAuLi5jYWNoZT8ua2V5cyB9IDoge307XG4gICAgbGV0IHYgPSBjYWNoZS5rZXlzW2tleV07XG4gICAgdiA9IHYgPyB7IC4uLnYgfSA6IHt9O1xuICAgIGNhY2hlLmtleXNba2V5XSA9IHY7XG4gICAgbGFzdENhY2hlID0gY2FjaGU7XG4gICAgY2FjaGUgPSB2O1xuICB9XG4gIGNhY2hlLmRhdGEgPSBjYWNoZS5kYXRhXG4gICAgPyB7IC4uLnZhbHVlLCBoaXRDb3VudDogY2FjaGUuZGF0YS5oaXRDb3VudCArIDEgfVxuICAgIDogeyAuLi52YWx1ZSwgaGl0Q291bnQ6IDEgfTtcblxuICBpZiAoXG4gICAgbWF4Q2FjaGVTaXplICYmXG4gICAgbGFzdENhY2hlPy5rZXlzICYmXG4gICAgT2JqZWN0LmtleXMobGFzdENhY2hlLmtleXMpLmxlbmd0aCA+IG1heENhY2hlU2l6ZVxuICApIHtcbiAgICBjb25zdCBlbnRyaWVzID0gZmluZExlc3NIaXRPck9sZGVzdENhY2hlRW50cmllcyhcbiAgICAgIGxhc3RDYWNoZSxcbiAgICAgIGV4cGlyZXMgPz8gSW5maW5pdHksXG4gICAgICBtYXhDYWNoZVNpemVcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICYmIGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIGVudHJpZXMpIHtcbiAgICAgICAgZGVsZXRlIGxhc3RDYWNoZS5rZXlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZExlc3NIaXRPck9sZGVzdENhY2hlRW50cmllcyhcbiAgc3RhdGU6IENhY2hlS2V5cyxcbiAgZXhwaXJlczogbnVtYmVyLFxuICBtYXhDYWNoZVNpemU6IG51bWJlclxuKSB7XG4gIGlmICghc3RhdGUua2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHN0YXRlLmtleXMpO1xuICAvLyBmaW5kIHRoZSBuZXdlc3Qga2V5O1xuICBjb25zdCBbbmV3ZXN0S2V5XSA9IGVudHJpZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgY29uc3QgYURhdGUgPSBhWzFdLmRhdGE/LmRhdGUgPz8gMDtcbiAgICBjb25zdCBiRGF0ZSA9IGJbMV0uZGF0YT8uZGF0ZSA/PyAwO1xuICAgIHJldHVybiBhRGF0ZSA+IGJEYXRlID8gYSA6IGI7XG4gIH0pO1xuICBjb25zdCBzb3J0ZWQgPSBlbnRyaWVzLnNvcnQoKFthS2V5LCBhVmFsdWVdLCBbYktleSwgYlZhbHVlXSkgPT4ge1xuICAgIC8vIGVuc3VyZXMgdGhlIG5ld2VzdCBrZXkgYWx3YXlzIHdpbnNcbiAgICBpZiAoYUtleSA9PT0gbmV3ZXN0S2V5KSByZXR1cm4gLTE7XG4gICAgaWYgKGJLZXkgPT09IG5ld2VzdEtleSkgcmV0dXJuIDE7XG4gICAgY29uc3QgYVZhbGlkID0gYVZhbHVlLmRhdGEgJiYgaXNDYWNoZVZhbGlkKGFWYWx1ZS5kYXRhLCBleHBpcmVzKSA/IDEgOiAwO1xuICAgIGNvbnN0IGJWYWxpZCA9IGJWYWx1ZS5kYXRhICYmIGlzQ2FjaGVWYWxpZChiVmFsdWUuZGF0YSwgZXhwaXJlcykgPyAxIDogMDtcbiAgICBjb25zdCBkaWZmVmFsaWQgPSBhVmFsaWQgLSBiVmFsaWQ7XG4gICAgY29uc3QgZGlmZkhpdCA9IChhVmFsdWUuZGF0YT8uaGl0Q291bnQgPz8gMCkgLSAoYlZhbHVlLmRhdGE/LmhpdENvdW50ID8/IDApO1xuICAgIGNvbnN0IGRpZmZEYXRlID0gKGFWYWx1ZS5kYXRhPy5kYXRlID8/IDApIC0gKGJWYWx1ZS5kYXRhPy5kYXRlID8/IDApO1xuICAgIHJldHVybiAoXG4gICAgICAtMSAqIChkaWZmVmFsaWQgPT09IDAgPyAoZGlmZkhpdCA9PT0gMCA/IGRpZmZEYXRlIDogZGlmZkhpdCkgOiBkaWZmVmFsaWQpXG4gICAgKTtcbiAgfSk7XG4gIHJldHVybiBzb3J0ZWQuc2xpY2UobWF4Q2FjaGVTaXplKTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlQ2FjaGVWYWx1ZShrZXlzOiBzdHJpbmdbXSwgc3RhdGU6IENhY2hlU3RhdGUpIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFjYWNoZS5rZXlzKSByZXR1cm4gc3RhdGU7XG4gICAgY2FjaGUua2V5cyA9IHsgLi4uY2FjaGU/LmtleXMgfTtcbiAgICBsZXQgdiA9IGNhY2hlLmtleXNba2V5XTtcbiAgICBpZiAoIXYpIHJldHVybiBzdGF0ZTtcbiAgICB2ID0geyAuLi52IH07XG4gICAgY2FjaGUua2V5c1trZXldID0gdjtcbiAgICBjYWNoZSA9IHY7XG4gIH1cbiAgaWYgKGNhY2hlLmRhdGEpIGRlbGV0ZSBjYWNoZS5kYXRhO1xuICBlbHNlIGlmIChjYWNoZS5rZXlzKSBkZWxldGUgY2FjaGUua2V5cztcbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGUoa2V5czogc3RyaW5nW10sIHN0YXRlOiBDYWNoZVN0YXRlKSB7XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICBsZXQgY2FjaGUgPSBuZXdTdGF0ZTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICghY2FjaGU/LmtleXMpIHJldHVybiBzdGF0ZTtcbiAgICBjYWNoZS5rZXlzID0geyAuLi5jYWNoZT8ua2V5cyB9O1xuICAgIGxldCB2ID0gY2FjaGU/LmtleXM/LltrZXldO1xuICAgIGlmICghdikgcmV0dXJuIHN0YXRlO1xuICAgIHYgPSB7IC4uLnYgfTtcbiAgICBjYWNoZS5rZXlzW2tleV0gPSB2O1xuICAgIGNhY2hlID0gdjtcbiAgfVxuICBjYWNoZSAmJiBpbnZhbGlkYVN1YktleXMoY2FjaGUpO1xuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGluY3JlYXNlQ2FjaGVIaXRDb3VudChrZXlzOiBzdHJpbmdbXSwgc3RhdGU6IENhY2hlU3RhdGUpIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFjYWNoZT8ua2V5cykgcmV0dXJuIHN0YXRlO1xuICAgIGNhY2hlLmtleXMgPSB7IC4uLmNhY2hlPy5rZXlzIH07XG4gICAgbGV0IHYgPSBjYWNoZT8ua2V5cz8uW2tleV07XG4gICAgaWYgKCF2KSByZXR1cm4gc3RhdGU7XG4gICAgdiA9IHsgLi4udiB9O1xuICAgIGNhY2hlLmtleXNba2V5XSA9IHY7XG4gICAgY2FjaGUgPSB2O1xuICB9XG4gIGlmICghY2FjaGUuZGF0YSkgcmV0dXJuIHN0YXRlO1xuICBjYWNoZS5kYXRhID0geyAuLi5jYWNoZS5kYXRhLCBoaXRDb3VudDogY2FjaGUuZGF0YS5oaXRDb3VudCArIDEgfTtcbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkYVN1YktleXMoc3RhdGU6IENhY2hlS2V5cykge1xuICBpZiAoc3RhdGUuZGF0YSkge1xuICAgIHN0YXRlLmRhdGEgPSB7IC4uLnN0YXRlLmRhdGEsIGludmFsaWQ6IHRydWUgfTtcbiAgfVxuICBpZiAoc3RhdGUua2V5cykge1xuICAgIHN0YXRlLmtleXMgPSB7IC4uLnN0YXRlLmtleXMgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzdGF0ZS5rZXlzKSB7XG4gICAgICBzdGF0ZS5rZXlzW2tleV0gPSBpbnZhbGlkYVN1YktleXMoeyAuLi5zdGF0ZS5rZXlzW2tleV0gfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cbiJdfQ==
@@ -425,4 +425,4 @@ export function combineSelectors(t) {
425
425
  }, {});
426
426
  return createSelector.apply(null, [...selectors, projector]);
427
427
  }
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWVudGl0eS1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY3JlYXRlLWVudGl0eS1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxPQUFPLEVBR0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFpRjFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FLeEMsY0FFZ0IsRUFDaEIsR0FBRyxNQUFTO0lBUVosT0FBTyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQ2hDLFlBQVksSUFBSSxjQUFjO1lBQzVCLENBQUMsQ0FBRSxjQUdDO1lBQ0osQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLFlBQVk7WUFDekIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUM3QixZQUFZLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQzNFLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFD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QUFDLEdBQUcsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbmZpZyxcbiAgRXh0cmFjdEFjdGlvbnNUeXBlLFxuICBFeHRyYWN0U2VsZWN0b3JzVHlwZSxcbiAgRXh0cmFjdFN0YXRlVHlwZSxcbiAgRW50aXR5RmVhdHVyZUZhY3RvcnksXG4gIEZlYXR1cmVTZWxlY3RvcnMsXG4gIEtleWVkQ29uZmlnLFxuICBUcmFpdEFjdGlvbnMsXG4gIFRyYWl0RmFjdG9yeSxcbiAgVHJhaXRTZWxlY3RvcnMsXG4gIFRyYWl0U3RhdGVNdXRhdG9ycyxcbiAgVW5pb25Ub0ludGVyc2VjdGlvbixcbiAgVHJhaXRBY3Rpb25zRmFjdG9yeSxcbiAgVHJhaXRTZWxlY3RvcnNGYWN0b3J5LFxuICBUcmFpdEluaXRpYWxTdGF0ZUZhY3RvcnksXG4gIFRyYWl0U3RhdGVNdXRhdG9yc0ZhY3RvcnksXG4gIFRyYWl0UmVkdWNlckZhY3RvcnksXG4gIFRyYWl0RWZmZWN0c0ZhY3RvcnksXG4gIEFsbFRyYWl0Q29uZmlncyxcbn0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEFjdGlvblR5cGUsXG4gIGNvbWJpbmVSZWR1Y2VycyxcbiAgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLFxuICBjcmVhdGVSZWR1Y2VyLFxuICBjcmVhdGVTZWxlY3RvcixcbiAgTWVtb2l6ZWRTZWxlY3Rvcixcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgVHJhaXRFZmZlY3QgfSBmcm9tICcuL3RyYWl0LWVmZmVjdCc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnLi9sb2NhbC1zdG9yZSc7XG5pbXBvcnQgeyBjYXBpdGFsaXplLCBzZXRQcm9wZXJ0aWVzUmVkdWNlciB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd2hlbiBleGVjdXRlIHdpbGwgY29tYmluZSBhbGwgdGhlIHRyYWl0cywgYW5kIHJldHVybiBhIEVudGl0eUZlYXR1cmVGYWN0b3J5XG4gKiB3aGljaCBjb21iaW5lcyBhbGwgdGhlIHRyYWl0cyBhY3Rpb25zLCBzZWxlY3RvcnMgLCByZWR1Y2VycyBhbmQgZWZmZWN0cyxcbiAqIHRoZSBuYW1lcyBwYXJhbSB3aWxsIHJlcGxhY2UgYW55IGFjdGlvbiBhbmQgc2VsZWN0b3Igd2l0aCB0aGUgd29yZCBFbnRpdHkgb3IgRW50aXRpZXMsXG4gKiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVudGl0eU5hbWUgYW5kICBlbnRpdGllc05hbWUgcGFyYW0gKGVudGl0eU5hbWUrJ3MnIGlmIGVudGl0aWVzTmFtZSBpcyBvbWl0dGVkKS5cbiAqIEBwYXJhbSBuYW1lc0NvbmZpZyAtIE9wdGlvbmFsIE5hbWVzIGZvciBlbnRpdGllc1xuICogQHBhcmFtIG5hbWVzQ29uZmlnLmVudGl0eU5hbWUgLSBzaW5ndWxhciBuYW1lIGZvciBlbnRpdHlcbiAqIEBwYXJhbSBbbmFtZXNDb25maWcuZW50aXRpZXNOYW1lXSAtIHBsdXJhbCBuYW1lIGZvciBlbnRpdGllcywgZGVmYXVsdHMgdG8gZW50aXR5TmFtZSArICdzJ1xuICogQHBhcmFtIHRyYWl0cyBzZXQgb2YgdHJhaXRzIHRvIGJlIGNvbWJpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBmZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdHlUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRBc3luY0FjdGlvblRyYWl0KHtcbiAqICAgICBuYW1lOiAnY2hlY2tvdXQnLFxuICogICAgIGFjdGlvblN1Y2Nlc3NQcm9wczogcHJvcHM8eyBvcmRlcklkOiBzdHJpbmcgfT4oKSxcbiAqICAgfSlcbiAqICk7XG4gKlxuICogZXhwb3J0IGNvbnN0IHByb2R1Y3RzRmVhdHVyZSA9IGZlYXR1cmVGYWN0b3J5KHtcbiAqICAgYWN0aW9uc0dyb3VwS2V5OiAnW1Byb2R1Y3RzXScsXG4gKiAgIGZlYXR1cmVTZWxlY3RvcjogJ3Byb2R1Y3RzJyxcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3Rvcnk8XG4gIEYgZXh0ZW5kcyByZWFkb25seSBUcmFpdEZhY3RvcnlbXSxcbiAgRW50aXR5TmFtZSBleHRlbmRzIHN0cmluZyxcbiAgRW50aXRpZXNOYW1lIGV4dGVuZHMgc3RyaW5nID0gYCR7RW50aXR5TmFtZX1zYFxuPihcbiAge1xuICAgIGVudGl0eU5hbWUsXG4gICAgZW50aXRpZXNOYW1lLFxuICB9OiB7IGVudGl0eU5hbWU6IEVudGl0eU5hbWU7IGVudGl0aWVzTmFtZT86IEVudGl0aWVzTmFtZSB9LFxuICAuLi50cmFpdHM6IEZcbik6IEVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICBFbnRpdHlOYW1lLFxuICBFbnRpdGllc05hbWUsXG4gIEV4dHJhY3RTdGF0ZVR5cGU8Rj4sXG4gIEV4dHJhY3RBY3Rpb25zVHlwZTxGPixcbiAgRXh0cmFjdFNlbGVjdG9yc1R5cGU8Rj5cbj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd2hlbiBleGVjdXRlIHdpbGwgY29tYmluZSBhbGwgdGhlIHRyYWl0cywgYW5kIHJldHVybiBhIEVudGl0eUZlYXR1cmVGYWN0b3J5XG4gKiB3aGljaCBjb21iaW5lcyBhbGwgdGhlIHRyYWl0cyBhY3Rpb25zLCBzZWxlY3RvcnMgLCByZWR1Y2VycyBhbmQgZWZmZWN0cy5cbiAqIEBwYXJhbSB0cmFpdHMgc2V0IG9mIHRyYWl0cyB0byBiZSBjb21iaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgZmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXR5VHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkQXN5bmNBY3Rpb25UcmFpdCh7XG4gKiAgICAgbmFtZTogJ2NoZWNrb3V0JyxcbiAqICAgICBhY3Rpb25TdWNjZXNzUHJvcHM6IHByb3BzPHsgb3JkZXJJZDogc3RyaW5nIH0+KCksXG4gKiAgIH0pXG4gKiApO1xuICpcbiAqIGV4cG9ydCBjb25zdCBwcm9kdWN0c0ZlYXR1cmUgPSBmZWF0dXJlRmFjdG9yeSh7XG4gKiAgIGFjdGlvbnNHcm91cEtleTogJ1tQcm9kdWN0c10nLFxuICogICBmZWF0dXJlU2VsZWN0b3I6ICdwcm9kdWN0cycsXG4gKiB9KTtcbiAqXG4gKiBwcm9kdWN0c0ZlYXR1cmUuYWN0aW9ucy5sb2FkUHJvZHVjdHMoKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5PEYgZXh0ZW5kcyByZWFkb25seSBUcmFpdEZhY3RvcnlbXT4oXG4gIC4uLnRyYWl0czogRlxuKTogRW50aXR5RmVhdHVyZUZhY3Rvcnk8XG4gICdFbnRpdHknLFxuICAnRW50aXRpZXMnLFxuICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICBFeHRyYWN0QWN0aW9uc1R5cGU8Rj4sXG4gIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gZXhlY3V0ZSB3aWxsIGNvbWJpbmUgYWxsIHRoZSB0cmFpdHMsIGFuZCByZXR1cm4gYSBFbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogd2hpY2ggY29tYmluZXMgYWxsIHRoZSB0cmFpdHMgYWN0aW9ucywgc2VsZWN0b3JzICwgcmVkdWNlcnMgYW5kIGVmZmVjdHMsXG4gKiB0aGUgbmFtZXMgcGFyYW0gd2lsbCByZXBsYWNlIGFueSBhY3Rpb24gYW5kIHNlbGVjdG9yIHdpdGggdGhlIHdvcmQgRW50aXR5IG9yIEVudGl0aWVzLFxuICogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBlbnRpdHlOYW1lIGFuZCAgZW50aXRpZXNOYW1lIHBhcmFtIChlbnRpdHlOYW1lKydzJyBpZiBlbnRpdGllc05hbWUgaXMgb21pdHRlZCkuXG4gKiBAcGFyYW0gbmFtZXNDb25maWcgLSBPcHRpb25hbCBOYW1lcyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSBuYW1lc0NvbmZpZy5lbnRpdHlOYW1lIC0gc2luZ3VsYXIgbmFtZSBmb3IgZW50aXR5XG4gKiBAcGFyYW0gW25hbWVzQ29uZmlnLmVudGl0aWVzTmFtZV0gLSBwbHVyYWwgbmFtZSBmb3IgZW50aXRpZXMsIGRlZmF1bHRzIHRvIGVudGl0eU5hbWUgKyAncydcbiAqIEBwYXJhbSB0cmFpdHMgc2V0IG9mIHRyYWl0cyB0byBiZSBjb21iaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgZmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXR5VHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkQXN5bmNBY3Rpb25UcmFpdCh7XG4gKiAgICAgbmFtZTogJ2NoZWNrb3V0JyxcbiAqICAgICBhY3Rpb25TdWNjZXNzUHJvcHM6IHByb3BzPHsgb3JkZXJJZDogc3RyaW5nIH0+KCksXG4gKiAgIH0pXG4gKiApO1xuICpcbiAqIGV4cG9ydCBjb25zdCBwcm9kdWN0c0ZlYXR1cmUgPSBmZWF0dXJlRmFjdG9yeSh7XG4gKiAgIGFjdGlvbnNHcm91cEtleTogJ1tQcm9kdWN0c10nLFxuICogICBmZWF0dXJlU2VsZWN0b3I6ICdwcm9kdWN0cycsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICBGIGV4dGVuZHMgcmVhZG9ubHkgVHJhaXRGYWN0b3J5W10sXG4gIEVudGl0eU5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIEVudGl0aWVzTmFtZSBleHRlbmRzIHN0cmluZyA9IGAke0VudGl0eU5hbWV9c2Bcbj4oXG4gIG5hbWVzT3JGYWN0b3J5OlxuICAgIHwgeyBlbnRpdHlOYW1lOiBFbnRpdHlOYW1lOyBlbnRpdGllc05hbWU/OiBFbnRpdGllc05hbWUgfVxuICAgIHwgVHJhaXRGYWN0b3J5LFxuICAuLi50cmFpdHM6IEZcbik6IEVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICBFbnRpdHlOYW1lLFxuICBFbnRpdGllc05hbWUsXG4gIEV4dHJhY3RTdGF0ZVR5cGU8Rj4sXG4gIEV4dHJhY3RBY3Rpb25zVHlwZTxGPixcbiAgRXh0cmFjdFNlbGVjdG9yc1R5cGU8Rj5cbj4ge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCB7IGVudGl0eU5hbWUsIGVudGl0aWVzTmFtZSB9ID1cbiAgICAgICdlbnRpdHlOYW1lJyBpbiBuYW1lc09yRmFjdG9yeVxuICAgICAgICA/IChuYW1lc09yRmFjdG9yeSBhcyB7XG4gICAgICAgICAgICBlbnRpdHlOYW1lOiBFbnRpdHlOYW1lO1xuICAgICAgICAgICAgZW50aXRpZXNOYW1lPzogRW50aXRpZXNOYW1lO1xuICAgICAgICAgIH0pXG4gICAgICAgIDogeyBlbnRpdHlOYW1lOiAnRW50aXR5JywgZW50aXRpZXNOYW1lOiAnRW50aXRpZXMnIH07XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IGNhcGl0YWxpemUoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgcGx1cmFsID0gZW50aXRpZXNOYW1lXG4gICAgICA/IGNhcGl0YWxpemUoZW50aXRpZXNOYW1lKVxuICAgICAgOiBjYXBpdGFsaXplKGVudGl0eU5hbWUgKyAncycpO1xuXG4gICAgY29uc3Qgc29ydGVkVHJhaXRzID0gc29ydFRyYWl0cyhcbiAgICAgICdlbnRpdHlOYW1lJyBpbiBuYW1lc09yRmFjdG9yeSA/IFsuLi50cmFpdHNdIDogW25hbWVzT3JGYWN0b3J5LCAuLi50cmFpdHNdXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbENvbmZpZ3MgPSBidWlsZEFsbENvbmZpZ3Moc29ydGVkVHJhaXRzKTtcblxuICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBidWlsZEFsbEFjdGlvbnMoXG4gICAgICBzb3J0ZWRUcmFpdHMsXG4gICAgICBjb25maWcuYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgc2luZ3VsYXIsXG4gICAgICBwbHVyYWwsXG4gICAgICBhbGxDb25maWdzXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbFNlbGVjdG9ycyA9IGJ1aWxkQWxsU2VsZWN0b3JzKHNvcnRlZFRyYWl0cywgYWxsQ29uZmlncyk7XG5cbiAgICBjb25zdCBhbGxNdXRhdG9ycyA9IGJ1aWxkQWxsTXV0YXRvcnMoXG4gICAgICBzb3J0ZWRUcmFpdHMsXG4gICAgICBhbGxTZWxlY3RvcnMsXG4gICAgICBhbGxDb25maWdzXG4gICAgKTtcblxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGJ1aWxkSW5pdGlhbFN0YXRlKHNvcnRlZFRyYWl0cywgYWxsQ29uZmlncyk7XG5cbiAgICBjb25zdCByZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKFxuICAgICAgc29ydGVkVHJhaXRzLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgYWxsQWN0aW9ucyxcbiAgICAgIGFsbFNlbGVjdG9ycyxcbiAgICAgIGFsbE11dGF0b3JzLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPEV4dHJhY3RTdGF0ZVR5cGU8Rj4+KGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IpXG4gICAgICAgIDogY29uZmlnLmZlYXR1cmVTZWxlY3RvcjtcblxuICAgIGNvbnN0IGFsbEZlYXR1cmVTZWxlY3RvcnMgPVxuICAgICAgYWxsU2VsZWN0b3JzICYmIGdldFNlbGVjdG9yc0ZvckZlYXR1cmUoZmVhdHVyZVNlbGVjdG9yLCBhbGxTZWxlY3RvcnMpO1xuXG4gICAgY29uc3QgYWxsRWZmZWN0cyA9IGJ1aWxkQWxsRWZmZWN0cyhcbiAgICAgIHNvcnRlZFRyYWl0cyxcbiAgICAgIGFsbEFjdGlvbnMsXG4gICAgICBhbGxGZWF0dXJlU2VsZWN0b3JzLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uczogZW50aXR5TmFtZVxuICAgICAgICA/IHJlbmFtZVByb3BzKGFsbEFjdGlvbnMsIHNpbmd1bGFyLCBwbHVyYWwpXG4gICAgICAgIDogYWxsQWN0aW9ucyxcbiAgICAgIHNlbGVjdG9yczogZW50aXR5TmFtZVxuICAgICAgICA/IHJlbmFtZVByb3BzKGFsbEZlYXR1cmVTZWxlY3RvcnMsIHNpbmd1bGFyLCBwbHVyYWwpXG4gICAgICAgIDogYWxsU2VsZWN0b3JzLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgcmVkdWNlcjogcmVkdWNlciA/PyBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSksXG4gICAgICBlZmZlY3RzOiBhbGxFZmZlY3RzLFxuICAgIH07XG4gIH0pIGFzIEVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICAgIEVudGl0eU5hbWUsXG4gICAgRW50aXRpZXNOYW1lLFxuICAgIEV4dHJhY3RTdGF0ZVR5cGU8Rj4sXG4gICAgRXh0cmFjdEFjdGlvbnNUeXBlPEY+LFxuICAgIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4gID47XG59XG5cbmZ1bmN0aW9uIHJlbmFtZVByb3BzKHRhcmdldDogYW55LCBlbnRpdHlOYW1lOiBzdHJpbmcsIGVudGl0aWVzTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9IGFzIGFueTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFyZ2V0KSkge1xuICAgIGNvbnN0IG5ld0tleSA9IGtleVxuICAgICAgLnJlcGxhY2UoJ0VudGl0aWVzJywgZW50aXRpZXNOYW1lKVxuICAgICAgLnJlcGxhY2UoJ0VudGl0eScsIGVudGl0eU5hbWUpO1xuICAgIHJlc3VsdFtuZXdLZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc29ydFRyYWl0cyhcbiAgdHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdXG4pOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdIHtcbiAgY29uc3Qgc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdHJhaXQgPSB0cmFpdHNbaV07XG4gICAgaWYgKCF0cmFpdC5kZXBlbmRzPy5sZW5ndGgpIHtcbiAgICAgIHNvcnRlZFRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodHJhaXQuZGVwZW5kcy5sZW5ndGggPiAxKVxuICAgICAgZm9yIChjb25zdCBkIG9mIHRyYWl0LmRlcGVuZHMpIHtcbiAgICAgICAgY29uc3QgaXNUcmFpdFByZXNlbnQgPSB0cmFpdHMuc29tZSgodHIpID0+IHRyLmtleSA9PT0gZCk7XG4gICAgICAgIGlmIChpc1RyYWl0UHJlc2VudCkge1xuICAgICAgICAgIHRyYWl0LmRlcGVuZHMgPSBbZF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBpZiAodHJhaXQuZGVwZW5kcy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyAnICsgdHJhaXQuZGVwZW5kcy5qb2luKCcgJykpO1xuICAgIGNvbnN0IGlzRGVwZW5kZW5jeUFscmVhZHlBZGRlZCA9IHNvcnRlZFRyYWl0cy5zb21lKFxuICAgICAgKHRyKSA9PiB0ci5rZXkgPT09IHRyYWl0Py5kZXBlbmRzPy5bMF1cbiAgICApO1xuXG4gICAgaWYgKGlzRGVwZW5kZW5jeUFscmVhZHlBZGRlZCkgc29ydGVkVHJhaXRzLnB1c2godHJhaXQpO1xuICAgIGVsc2Uge1xuICAgICAgLy8gbW92ZSB0cmFpdCB0byB0aGUgZW5kXG4gICAgICBkZWxldGUgdHJhaXRzW2ldO1xuICAgICAgdHJhaXRzLnB1c2godHJhaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc29ydGVkVHJhaXRzO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbENvbmZpZ3Moc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKChhY2M6IEtleWVkQ29uZmlnPHN0cmluZywgYW55PiwgZmFjdG9yeSkgPT4ge1xuICAgIGFjY1tmYWN0b3J5LmtleV0gPSBmYWN0b3J5LmNvbmZpZztcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsQWN0aW9ucyhcbiAgc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdLFxuICBhY3Rpb25zR3JvdXBLZXk6IHN0cmluZyxcbiAgZW50aXR5TmFtZTogc3RyaW5nLFxuICBlbnRpdGllc05hbWU6IHN0cmluZyxcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoKHByZXZpb3VzUmVzdWx0OiBUcmFpdEFjdGlvbnMsIGZhY3RvcnkpID0+IHtcbiAgICBsZXQgcmVzdWx0ID1cbiAgICAgIGZhY3Rvcnk/LmFjdGlvbnM/Lih7XG4gICAgICAgIGFjdGlvbnNHcm91cEtleTogYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgICBlbnRpdHlOYW1lLFxuICAgICAgICBlbnRpdGllc05hbWUsXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICB9KSA/PyB7fTtcbiAgICByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdCA/IHsgLi4ucHJldmlvdXNSZXN1bHQsIC4uLnJlc3VsdCB9IDogcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxTZWxlY3RvcnMoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoKHByZXZpb3VzUmVzdWx0OiBUcmFpdFNlbGVjdG9yczxhbnk+LCBmYWN0b3J5KSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9XG4gICAgICBmYWN0b3J5Py5zZWxlY3RvcnM/Lih7XG4gICAgICAgIHByZXZpb3VzU2VsZWN0b3JzOiBwcmV2aW91c1Jlc3VsdCxcbiAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgIH0pID8/IHt9O1xuICAgIHJlc3VsdCA9IHByZXZpb3VzUmVzdWx0ID8geyAuLi5wcmV2aW91c1Jlc3VsdCwgLi4ucmVzdWx0IH0gOiByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbE11dGF0b3JzKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGFsbFNlbGVjdG9yczogVHJhaXRTZWxlY3RvcnM8YW55PixcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIChcbiAgICBzb3J0ZWRUcmFpdHMucmVkdWNlKFxuICAgICAgKHByZXZpb3VzUmVzdWx0OiBUcmFpdFN0YXRlTXV0YXRvcnM8YW55PiB8IHVuZGVmaW5lZCwgZmFjdG9yeSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID1cbiAgICAgICAgICBmYWN0b3J5Py5tdXRhdG9ycz8uKHtcbiAgICAgICAgICAgIGFsbFNlbGVjdG9yczogYWxsU2VsZWN0b3JzLFxuICAgICAgICAgICAgcHJldmlvdXNNdXRhdG9yczogcHJldmlvdXNSZXN1bHQsXG4gICAgICAgICAgICBhbGxDb25maWdzLFxuICAgICAgICAgIH0pID8/IHt9O1xuICAgICAgICByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdCA/IHsgLi4ucHJldmlvdXNSZXN1bHQsIC4uLnJlc3VsdCB9IDogcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKSB8fCB7fVxuICApO1xufVxuXG5mdW5jdGlvbiBidWlsZEluaXRpYWxTdGF0ZShcbiAgc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdLFxuICBhbGxDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgeyBbcDogc3RyaW5nXTogYW55IH1cbikge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZSgocHJldmlvdXNSZXN1bHQ6IGFueSwgZmFjdG9yeSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICBmYWN0b3J5Py5pbml0aWFsU3RhdGU/Lih7XG4gICAgICAgIHByZXZpb3VzSW5pdGlhbFN0YXRlOiBwcmV2aW91c1Jlc3VsdCxcbiAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgIH0pID8/XG4gICAgICBwcmV2aW91c1Jlc3VsdCA/P1xuICAgICAge307XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlZHVjZXIoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgaW5pdGlhbFN0YXRlOiBhbnksXG4gIGFsbEFjdGlvbnM6IFRyYWl0QWN0aW9ucyxcbiAgYWxsU2VsZWN0b3JzOiBUcmFpdFNlbGVjdG9yczxhbnk+LFxuICBhbGxNdXRhdG9yczogVHJhaXRTdGF0ZU11dGF0b3JzPGFueT4sXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKFxuICAgIChcbiAgICAgIHByZXZpb3VzUmVzdWx0OiAoKHN0YXRlOiBhbnksIGFjdGlvbjogQWN0aW9uKSA9PiBhbnkpIHwgdW5kZWZpbmVkLFxuICAgICAgZmFjdG9yeVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmFjdG9yeT8ucmVkdWNlcj8uKHtcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBhbGxBY3Rpb25zLFxuICAgICAgICBhbGxTZWxlY3RvcnMsXG4gICAgICAgIGFsbE11dGF0b3JzLFxuICAgICAgICBhbGxDb25maWdzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0ICYmIHByZXZpb3VzUmVzdWx0XG4gICAgICAgID8gKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFTdGF0ZSA9IHByZXZpb3VzUmVzdWx0KHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdChhU3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICA6IHJlc3VsdCA/PyBwcmV2aW91c1Jlc3VsdDtcbiAgICB9LFxuICAgIHVuZGVmaW5lZFxuICApO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbEVmZmVjdHMoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWxsQWN0aW9uczogVHJhaXRBY3Rpb25zLFxuICBhbGxGZWF0dXJlU2VsZWN0b3JzOiBUcmFpdFNlbGVjdG9yczxhbnk+LFxuICBhbGxDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgeyBbcDogc3RyaW5nXTogYW55IH1cbikge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZShcbiAgICAocHJldmlvdXNSZXN1bHQ6IFR5cGU8VHJhaXRFZmZlY3Q+W10gfCB1bmRlZmluZWQsIGZhY3RvcnkpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICBmYWN0b3J5Py5lZmZlY3RzPy4oe1xuICAgICAgICAgIGFsbEFjdGlvbnMsXG4gICAgICAgICAgYWxsU2VsZWN0b3JzOiBhbGxGZWF0dXJlU2VsZWN0b3JzLFxuICAgICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICAgIH0pID8/IFtdO1xuICAgICAgcmVzdWx0ID0gcHJldmlvdXNSZXN1bHQgPyBbLi4ucHJldmlvdXNSZXN1bHQsIC4uLnJlc3VsdF0gOiByZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgW11cbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzRm9yRmVhdHVyZTxcbiAgU3RhdGUsXG4gIFMgZXh0ZW5kcyBUcmFpdFNlbGVjdG9yczxTdGF0ZT4sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIEYgZXh0ZW5kcyBNZW1vaXplZFNlbGVjdG9yPG9iamVjdCwgYW55PlxuPihmZWF0dXJlU2VsZWN0OiBGLCBzZWxlY3RvcnM6IFMpOiBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBTPiB7XG4gIGNvbnN0IHNzOiB7IFtrZXkgaW4ga2V5b2YgU10/OiBhbnkgfSA9IHt9O1xuICBmb3IgKGNvbnN0IHByb3AgaW4gc2VsZWN0b3JzKSB7XG4gICAgc3NbcHJvcF0gPSBjcmVhdGVTZWxlY3RvcihmZWF0dXJlU2VsZWN0IGFzIGFueSwgc2VsZWN0b3JzW3Byb3BdIGFzIGFueSk7XG4gIH1cbiAgcmV0dXJuIHNzIGFzIEZlYXR1cmVTZWxlY3RvcnM8U3RhdGUsIFM+O1xufVxuXG4vKipcbiAqIENvbWJpbmUgYSBtYXAgZW50aXR5RmVhdHVyZUZhY3RvcmllcyBpbnRvIG9uZSxcbiAqIGdyb3VwaW5nIHRoZSBhY3Rpb25zIGFuZCBzZWxlY3RvcnMgYnkgdGhlIGtleSBvZiB0aGUgcmVzcGVjdGl2ZSBlbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogQHBhcmFtIHRyYWl0RmFjdG9yaWVzTWFwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBjbGllbnRzRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAnY2xpZW50JywgZW50aXRpZXNOYW1lOiAnY2xpZW50cycgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpLFxuICogICBhZGRDcnVkRW50aXRpZXNUcmFpdDxDbGllbnQ+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdE9yZGVyJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdENvbWJpbmVkRmFjdG9yeSA9IGNvbWJpbmVFbnRpdHlGZWF0dXJlcyh7XG4gKiAgIHByb2R1Y3RzOiBwcm9kdWN0RmVhdHVyZUZhY3RvcnksXG4gKiAgIHByb2R1Y3RPcmRlcnM6IHByb2R1Y3RPcmRlckZlYXR1cmVGYWN0b3J5LFxuICogICBjbGllbnRzOiBjbGllbnRzRmVhdHVyZUZhY3RvcnksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21iaW5lZEZlYXR1cmUgPSBwcm9kdWN0Q29tYmluZWRGYWN0b3J5KHtcbiAqICAgICBhY3Rpb25zR3JvdXBLZXk6ICdbQ29tYmluZWRdJyxcbiAqICAgICBmZWF0dXJlU2VsZWN0b3I6ICdjb21iaW5lZCcsXG4gKiAgIH0pO1xuICpcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMuY2xpZW50LmxvYWRDbGllbnRzKCk7XG4gKiAgIGNvbWJpbmVkRmVhdHVyZS5hY3Rpb25zLnByb2R1Y3QubG9hZFByb2R1Y3RzKCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRW50aXR5RmVhdHVyZXM8XG4gIFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IEVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55PiB9LFxuICBLIGV4dGVuZHMga2V5b2YgVCxcbiAgU3RhdGUgZXh0ZW5kcyB7IFtQIGluIEtdOiBFeHRyYWN0U3RhdGVUeXBlPFJldHVyblR5cGU8VFtQXT4+IH0sXG4gIEEgZXh0ZW5kcyB7IFtQIGluIEtdOiBFeHRyYWN0QWN0aW9uc1R5cGU8UmV0dXJuVHlwZTxUW1BdPj4gfSxcbiAgUyBleHRlbmRzIHtcbiAgICBbUCBpbiBLXTogRmVhdHVyZVNlbGVjdG9yczxTdGF0ZSwgRXh0cmFjdFNlbGVjdG9yc1R5cGU8UmV0dXJuVHlwZTxUW1BdPj4+O1xuICB9LFxuICBSIGV4dGVuZHMgKGNvbmZpZzogQ29uZmlnPFN0YXRlPikgPT4ge1xuICAgIGFjdGlvbnM6IEE7XG4gICAgc2VsZWN0b3JzOiBTO1xuICAgIHJlZHVjZXI6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZTtcbiAgICBlZmZlY3RzOiBUeXBlPGFueT5bXTtcbiAgICBpbml0aWFsU3RhdGU6IFN0YXRlO1xuICB9XG4+KHRyYWl0RmFjdG9yaWVzTWFwOiBUKTogUiB7XG4gIHJldHVybiAoKGNvbmZpZzogQ29uZmlnPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVTZWxlY3RvciA9XG4gICAgICB0eXBlb2YgY29uZmlnLmZlYXR1cmVTZWxlY3RvciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8YW55Pihjb25maWcuZmVhdHVyZVNlbGVjdG9yKVxuICAgICAgICA6IGNvbmZpZy5mZWF0dXJlU2VsZWN0b3I7XG4gICAgY29uc3QgYWN0aW9uczogYW55ID0ge307XG4gICAgY29uc3Qgc2VsZWN0b3JzOiBhbnkgPSB7fTtcbiAgICBjb25zdCByZWR1Y2VyczogYW55ID0ge307XG4gICAgbGV0IGVmZmVjdHM6IFR5cGU8YW55PltdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRpdHlGZWF0dXJlRmFjdG9yeV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0cmFpdEZhY3Rvcmllc01hcFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgIGZlYXR1cmVTZWxlY3RvcixcbiAgICAgICAgKHN0YXRlOiBhbnkpID0+IHN0YXRlW2tleV1cbiAgICAgICk7XG4gICAgICBjb25zdCBmZWF0dXJlVHJhaXRzID0gZW50aXR5RmVhdHVyZUZhY3Rvcnkoe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICAgIGZlYXR1cmVTZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbnNba2V5XSA9IGZlYXR1cmVUcmFpdHMuYWN0aW9ucztcbiAgICAgIHNlbGVjdG9yc1trZXldID0gZmVhdHVyZVRyYWl0cy5zZWxlY3RvcnM7XG4gICAgICByZWR1Y2Vyc1trZXldID0gZmVhdHVyZVRyYWl0cy5yZWR1Y2VyO1xuICAgICAgZWZmZWN0cyA9IFsuLi5lZmZlY3RzLCAuLi5mZWF0dXJlVHJhaXRzLmVmZmVjdHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIHNlbGVjdG9ycyxcbiAgICAgIHJlZHVjZXI6IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VycyksXG4gICAgICBlZmZlY3RzLFxuICAgIH07XG4gIH0pIGFzIFI7XG59XG5cbi8qKlxuICogTWl4IGEgbWFwIGVudGl0eUZlYXR1cmVGYWN0b3JpZXMgaW50byBvbmUsIGRpZmZlcmVudCBmcm9tIGNvbWJpbmUgdGhlIGFjdGlvbnMgYW5kIHNlbGVjdG9ycyBhIG1peCwgbm90IGdyb3VwIGJ5IGtleSBsaWtlIGluIGNvbWJpbmUsIHRoZSBrZXlzIGFyZSBzdGlsbCB1c2VcbiAqIGludGVybmFsIGluIHRoZSByZWR1Y2VycyBhbmQgc2VsZWN0b3IgdG8gc2VwYXJhdGUgdGhlIHN0YXRlXG4gKiBAcGFyYW0gdHJhaXRGYWN0b3JpZXNNYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGNsaWVudHNGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdjbGllbnQnLCBlbnRpdGllc05hbWU6ICdjbGllbnRzJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxDbGllbnQ+KCksXG4gKiAgIGFkZENydWRFbnRpdGllc1RyYWl0PENsaWVudD4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0T3JkZXInIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3RPcmRlcj4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdEZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0TWl4ZWRGYWN0b3J5ID0gbWl4RW50aXR5RmVhdHVyZXMoe1xuICogICBwcm9kdWN0czogcHJvZHVjdEZlYXR1cmVGYWN0b3J5LFxuICogICBwcm9kdWN0T3JkZXJzOiBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSxcbiAqICAgY2xpZW50czogY2xpZW50c0ZlYXR1cmVGYWN0b3J5LFxuICogfSk7XG4gKlxuICogY29uc3QgbWl4ZWRGZWF0dXJlID0gcHJvZHVjdE1peGVkRmFjdG9yeSh7XG4gKiAgICAgYWN0aW9uc0dyb3VwS2V5OiAnW01peGVkXScsXG4gKiAgICAgZmVhdHVyZVNlbGVjdG9yOiAnbWl4ZWQnLFxuICogICB9KTtcbiAqIG1peGVkRmVhdHVyZS5hY3Rpb25zLmxvYWRDbGllbnRzKCk7XG4gKiBtaXhlZEZlYXR1cmUuYWN0aW9ucy5sb2FkUHJvZHVjdHMoKTtcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaXhFbnRpdHlGZWF0dXJlczxcbiAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogRW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnk+IH0sXG4gIEsgZXh0ZW5kcyBrZXlvZiBULFxuICBTdGF0ZSBleHRlbmRzIHsgW1AgaW4gS106IEV4dHJhY3RTdGF0ZVR5cGU8UmV0dXJuVHlwZTxUW1BdPj4gfSxcbiAgQSBleHRlbmRzIFRyYWl0QWN0aW9ucyAmXG4gICAgVW5pb25Ub0ludGVyc2VjdGlvbjxFeHRyYWN0QWN0aW9uc1R5cGU8UmV0dXJuVHlwZTxUW0tdPj4+LFxuICBTIGV4dGVuZHMgVHJhaXRTZWxlY3RvcnM8YW55PiAmXG4gICAgVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgICAgIEZlYXR1cmVTZWxlY3RvcnM8U3RhdGUsIEV4dHJhY3RTZWxlY3RvcnNUeXBlPFJldHVyblR5cGU8VFtLXT4+PlxuICAgID4sXG4gIFIgZXh0ZW5kcyBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgU3RhdGUsIEEsIFM+XG4+KHRyYWl0RmFjdG9yaWVzTWFwOiBUKTogUiB7XG4gIHJldHVybiAoKGNvbmZpZzogQ29uZmlnPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVTZWxlY3RvciA9XG4gICAgICB0eXBlb2YgY29uZmlnLmZlYXR1cmVTZWxlY3RvciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8YW55Pihjb25maWcuZmVhdHVyZVNlbGVjdG9yKVxuICAgICAgICA6IGNvbmZpZy5mZWF0dXJlU2VsZWN0b3I7XG4gICAgbGV0IGFjdGlvbnM6IGFueSA9IHt9O1xuICAgIGxldCBzZWxlY3RvcnM6IGFueSA9IHt9O1xuICAgIGNvbnN0IHJlZHVjZXJzOiBhbnkgPSB7fTtcbiAgICBsZXQgZWZmZWN0czogVHlwZTxhbnk+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudGl0eUZlYXR1cmVGYWN0b3J5XSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIHRyYWl0RmFjdG9yaWVzTWFwXG4gICAgKSkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICAgZmVhdHVyZVNlbGVjdG9yLFxuICAgICAgICAoc3RhdGU6IGFueSkgPT4gc3RhdGVba2V5XVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVUcmFpdHMgPSBlbnRpdHlGZWF0dXJlRmFjdG9yeSh7XG4gICAgICAgIGFjdGlvbnNHcm91cEtleTogY29uZmlnLmFjdGlvbnNHcm91cEtleSxcbiAgICAgICAgZmVhdHVyZVNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIH0pO1xuICAgICAgYWN0aW9ucyA9IHsgLi4uYWN0aW9ucywgLi4uZmVhdHVyZVRyYWl0cy5hY3Rpb25zIH07XG4gICAgICBzZWxlY3RvcnMgPSB7IC4uLnNlbGVjdG9ycywgLi4uZmVhdHVyZVRyYWl0cy5zZWxlY3RvcnMgfTtcbiAgICAgIHJlZHVjZXJzW2tleV0gPSBmZWF0dXJlVHJhaXRzLnJlZHVjZXI7XG4gICAgICBlZmZlY3RzID0gWy4uLmVmZmVjdHMsIC4uLmZlYXR1cmVUcmFpdHMuZWZmZWN0c107XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zLFxuICAgICAgc2VsZWN0b3JzLFxuICAgICAgcmVkdWNlcjogY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSxcbiAgICAgIGVmZmVjdHMsXG4gICAgfTtcbiAgfSkgYXMgUjtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyB0YXJnZXRUcmFpdEZhY3Rvcnkgd2l0aCB0aGUgdHJhaXRGYWN0b3JpZXNNYXAgdXNpbmcgdGhlIGtleXMgYXMgcHJvcHMgZm9yIHRoZSB0YXJnZXRUcmFpdEZhY3Rvcnkgc3RhdGUsXG4gKiBhbmQgZ3JvdXBpbmcgdGhlIGNvbWJpbmVkIGFjdGlvbnMgYnkga2V5XG4gKiBAcGFyYW0gdGFyZ2V0VHJhaXRGYWN0b3J5XG4gKiBAcGFyYW0gdHJhaXRGYWN0b3JpZXNNYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGNsaWVudHNGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdjbGllbnQnLCBlbnRpdGllc05hbWU6ICdjbGllbnRzJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxDbGllbnQ+KCksXG4gKiAgIGFkZENydWRFbnRpdGllc1RyYWl0PENsaWVudD4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0T3JkZXInIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3RPcmRlcj4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdEZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0QWRkRW50aXR5UHJvcGVydGllc0ZhY3RvcnkgPSBhZGRFbnRpdHlGZWF0dXJlc1Byb3BlcnRpZXMoXG4gKiAgIHByb2R1Y3RGZWF0dXJlRmFjdG9yeSxcbiAqICAge1xuICogICAgIHByb2R1Y3RPcmRlcnM6IHByb2R1Y3RPcmRlckZlYXR1cmVGYWN0b3J5LFxuICogICAgIGNsaWVudHM6IGNsaWVudHNGZWF0dXJlRmFjdG9yeSxcbiAqICAgfVxuICogKTtcbiAqXG4gKiBjb25zdCBjb21iaW5lZEZlYXR1cmUgPSBwcm9kdWN0QWRkRW50aXR5UHJvcGVydGllc0ZhY3Rvcnkoe1xuICogICAgIGFjdGlvbnNHcm91cEtleTogJ1thZGRFbnRpdHlGZWF0dXJlc10nLFxuICogICAgIGZlYXR1cmVTZWxlY3RvcjogJ2FkZEVudGl0eUZlYXR1cmVzJyxcbiAqICAgfSk7XG4gKlxuICogICBjb21iaW5lZEZlYXR1cmUuYWN0aW9ucy5sb2FkUHJvZHVjdHMoKTtcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMuY2xpZW50cy5sb2FkQ2xpZW50cygpO1xuICogICBjb21iaW5lZEZlYXR1cmUuYWN0aW9ucy5wcm9kdWN0T3JkZXJzLmxvYWRQcm9kdWN0T3JkZXJzKCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbnRpdHlGZWF0dXJlc1Byb3BlcnRpZXM8XG4gIEYgZXh0ZW5kcyBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueT4sXG4gIFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IEVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueSwgYW55PiB9LFxuICBLIGV4dGVuZHMga2V5b2YgVCxcbiAgU3RhdGUgZXh0ZW5kcyBFeHRyYWN0U3RhdGVUeXBlPFJldHVyblR5cGU8Rj4+ICYge1xuICAgIFtQIGluIEtdOiBFeHRyYWN0U3RhdGVUeXBlPFJldHVyblR5cGU8VFtQXT4+O1xuICB9LFxuICBBIGV4dGVuZHMgRXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8Rj4+ICYge1xuICAgIFtQIGluIEtdOiBFeHRyYWN0QWN0aW9uc1R5cGU8UmV0dXJuVHlwZTxUW1BdPj47XG4gIH0sXG4gIFMgZXh0ZW5kcyBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBFeHRyYWN0U2VsZWN0b3JzVHlwZTxSZXR1cm5UeXBlPEY+Pj4gJiB7XG4gICAgW1AgaW4gS106IEZlYXR1cmVTZWxlY3RvcnM8U3RhdGUsIEV4dHJhY3RTZWxlY3RvcnNUeXBlPFJldHVyblR5cGU8VFtQXT4+PjtcbiAgfSxcbiAgUiBleHRlbmRzIChjb25maWc6IENvbmZpZzxTdGF0ZT4pID0+IHtcbiAgICBhY3Rpb25zOiBBO1xuICAgIHNlbGVjdG9yczogUztcbiAgICByZWR1Y2VyOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGU7XG4gICAgZWZmZWN0czogVHlwZTxhbnk+W107XG4gICAgaW5pdGlhbFN0YXRlOiBTdGF0ZTtcbiAgfVxuPih0YXJnZXRUcmFpdEZhY3Rvcnk6IEYsIHRyYWl0RmFjdG9yaWVzTWFwOiBUKTogUiB7XG4gIHJldHVybiAoKGNvbmZpZzogQ29uZmlnPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVTZWxlY3RvciA9XG4gICAgICB0eXBlb2YgY29uZmlnLmZlYXR1cmVTZWxlY3RvciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8YW55Pihjb25maWcuZmVhdHVyZVNlbGVjdG9yKVxuICAgICAgICA6IGNvbmZpZy5mZWF0dXJlU2VsZWN0b3I7XG4gICAgY29uc3QgdGFyZ2V0RmVhdHVyZVRyYWl0cyA9IHRhcmdldFRyYWl0RmFjdG9yeSh7XG4gICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICBmZWF0dXJlU2VsZWN0b3I6IGZlYXR1cmVTZWxlY3RvcixcbiAgICB9KTtcbiAgICBjb25zdCBhY3Rpb25zOiBhbnkgPSB7IC4uLnRhcmdldEZlYXR1cmVUcmFpdHMuYWN0aW9ucyB9O1xuICAgIGNvbnN0IHNlbGVjdG9yczogYW55ID0geyAuLi50YXJnZXRGZWF0dXJlVHJhaXRzLnNlbGVjdG9ycyB9O1xuICAgIGNvbnN0IHJlZHVjZXJzOiBhbnkgPSB7fTtcbiAgICBsZXQgZWZmZWN0czogVHlwZTxhbnk+W10gPSBbLi4udGFyZ2V0RmVhdHVyZVRyYWl0cy5lZmZlY3RzXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudGl0eUZlYXR1cmVGYWN0b3J5XSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIHRyYWl0RmFjdG9yaWVzTWFwXG4gICAgKSkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICAgZmVhdHVyZVNlbGVjdG9yLFxuICAgICAgICAoc3RhdGU6IGFueSkgPT4gc3RhdGVba2V5XVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVUcmFpdHMgPSBlbnRpdHlGZWF0dXJlRmFjdG9yeSh7XG4gICAgICAgIGFjdGlvbnNHcm91cEtleTogY29uZmlnLmFjdGlvbnNHcm91cEtleSxcbiAgICAgICAgZmVhdHVyZVNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIH0pO1xuICAgICAgYWN0aW9uc1trZXldID0gZmVhdHVyZVRyYWl0cy5hY3Rpb25zO1xuICAgICAgc2VsZWN0b3JzW2tleV0gPSBmZWF0dXJlVHJhaXRzLnNlbGVjdG9ycztcbiAgICAgIHJlZHVjZXJzW2tleV0gPSBmZWF0dXJlVHJhaXRzLnJlZHVjZXI7XG4gICAgICBlZmZlY3RzID0gWy4uLmVmZmVjdHMsIC4uLmZlYXR1cmVUcmFpdHMuZWZmZWN0c107XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zLFxuICAgICAgc2VsZWN0b3JzLFxuICAgICAgcmVkdWNlcjogc2V0UHJvcGVydGllc1JlZHVjZXIodGFyZ2V0RmVhdHVyZVRyYWl0cy5yZWR1Y2VyLCByZWR1Y2VycyksXG4gICAgICBlZmZlY3RzLFxuICAgIH07XG4gIH0pIGFzIFI7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBpbXBsZW1lbnRhdGlvbiAgYSBUcmFpdEZhY3RvcnlcbiAqIEBwYXJhbSBmIFRyYWl0RmFjdG9yeSBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhaXRGYWN0b3J5PFxuICBTdGF0ZSA9IHt9LFxuICBBIGV4dGVuZHMgVHJhaXRBY3Rpb25zID0ge30sXG4gIFMgZXh0ZW5kcyBUcmFpdFNlbGVjdG9yczxTdGF0ZT4gPSB7fSxcbiAgTSBleHRlbmRzIFRyYWl0U3RhdGVNdXRhdG9yczxTdGF0ZT4gPSB7fSxcbiAgS0VZIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBDID0gdW5rbm93bixcbiAgS0MgZXh0ZW5kcyBBbGxUcmFpdENvbmZpZ3MgPSBLZXllZENvbmZpZzxLRVksIEM+XG4+KGY6IHtcbiAga2V5OiBLRVk7XG4gIGNvbmZpZz86IEM7XG4gIGRlcGVuZHM/OiBzdHJpbmdbXTtcbiAgYWN0aW9ucz86IFRyYWl0QWN0aW9uc0ZhY3Rvcnk8QSwgS0M+O1xuICBzZWxlY3RvcnM/OiBUcmFpdFNlbGVjdG9yc0ZhY3Rvcnk8U3RhdGUsIFMsIEtDPjtcbiAgaW5pdGlhbFN0YXRlPzogVHJhaXRJbml0aWFsU3RhdGVGYWN0b3J5PFN0YXRlLCBLQz47XG4gIG11dGF0b3JzPzogVHJhaXRTdGF0ZU11dGF0b3JzRmFjdG9yeTxTdGF0ZSwgTSwgS0M+O1xuICByZWR1Y2VyPzogVHJhaXRSZWR1Y2VyRmFjdG9yeTxTdGF0ZSwgQSwgUywgTSwgS0M+O1xuICBlZmZlY3RzPzogVHJhaXRFZmZlY3RzRmFjdG9yeTxTdGF0ZSwgQSwgUywgS0M+O1xufSk6IFRyYWl0RmFjdG9yeTxTdGF0ZSwgQSwgUywgTSwgS0VZLCBDLCBLQz4ge1xuICByZXR1cm4gZiBhcyBUcmFpdEZhY3Rvcnk8U3RhdGUsIEEsIFMsIE0sIEtFWSwgQywgS0M+O1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjb21iaW5lIHNlbGVjdG9ycyBpbiBjb21wb25lbnRzIGFzIG1hcFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmlldyA9IGNvbWJpbmVTZWxlY3RvcnMoe1xuICogICAgIHByb2R1Y3RzOiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RzQ3VycmVudFBhZ2UsXG4gKiAgICAgaXNMb2FkaW5nOiBQcm9kdWN0U2VsZWN0b3JzLmlzTG9hZGluZ1Byb2R1Y3RzQ3VycmVudFBhZ2UsXG4gKiAgICAgc2VsZWN0ZWRQcm9kdWN0OiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RTZWxlY3RlZCxcbiAqICAgICBpc0xvYWRpbmdDaGVja291dDogUHJvZHVjdFNlbGVjdG9ycy5pc0xvYWRpbmdDaGVja291dCxcbiAqICAgICBzZWxlY3RlZFNvcnQ6IFByb2R1Y3RTZWxlY3RvcnMuc2VsZWN0UHJvZHVjdHNTb3J0LFxuICogICAgIGZpbHRlcnM6IFByb2R1Y3RTZWxlY3RvcnMuc2VsZWN0UHJvZHVjdHNGaWx0ZXIsXG4gKiAgIH0pO1xuICogQHBhcmFtIHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVTZWxlY3RvcnM8XG4gIFQgZXh0ZW5kcyB7IFtrOiBzdHJpbmddOiBNZW1vaXplZFNlbGVjdG9yPGFueSwgYW55PiB9XG4+KHQ6IFQpOiBNZW1vaXplZFNlbGVjdG9yPGFueSwgeyBbaiBpbiBrZXlvZiBUXTogUmV0dXJuVHlwZTxUW2pdPiB9PiB7XG4gIGNvbnN0IHNlbGVjdG9ycyA9IE9iamVjdC52YWx1ZXModCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0KTtcbiAgY29uc3QgcHJvamVjdG9yID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgIGtleXMucmVkdWNlKChhY2MsIGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1trZXldID0gYXJnc1tpbmRleF07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gIHJldHVybiAoY3JlYXRlU2VsZWN0b3IgYXMgYW55KS5hcHBseShudWxsLCBbLi4uc2VsZWN0b3JzLCBwcm9qZWN0b3JdKTtcbn1cbiJdfQ==
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWVudGl0eS1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY3JlYXRlLWVudGl0eS1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxPQUFPLEVBR0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFpRjFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FLeEMsY0FFZ0IsRUFDaEIsR0FBRyxNQUFTO0lBUVosT0FBTyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQ2hDLFlBQVksSUFBSSxjQUFjO1lBQzVCLENBQUMsQ0FBRSxjQUdDO1lBQ0osQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLFlBQVk7WUFDekIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUM3QixZQUFZLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQzNFLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFD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LENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUM7SUFDaEIsT0FBUSxjQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25maWcsXG4gIEV4dHJhY3RBY3Rpb25zVHlwZSxcbiAgRXh0cmFjdFNlbGVjdG9yc1R5cGUsXG4gIEV4dHJhY3RTdGF0ZVR5cGUsXG4gIEVudGl0eUZlYXR1cmVGYWN0b3J5LFxuICBGZWF0dXJlU2VsZWN0b3JzLFxuICBLZXllZENvbmZpZyxcbiAgVHJhaXRBY3Rpb25zLFxuICBUcmFpdEZhY3RvcnksXG4gIFRyYWl0U2VsZWN0b3JzLFxuICBUcmFpdFN0YXRlTXV0YXRvcnMsXG4gIFVuaW9uVG9JbnRlcnNlY3Rpb24sXG4gIFRyYWl0QWN0aW9uc0ZhY3RvcnksXG4gIFRyYWl0U2VsZWN0b3JzRmFjdG9yeSxcbiAgVHJhaXRJbml0aWFsU3RhdGVGYWN0b3J5LFxuICBUcmFpdFN0YXRlTXV0YXRvcnNGYWN0b3J5LFxuICBUcmFpdFJlZHVjZXJGYWN0b3J5LFxuICBUcmFpdEVmZmVjdHNGYWN0b3J5LFxuICBBbGxUcmFpdENvbmZpZ3MsXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBBY3Rpb25UeXBlLFxuICBjb21iaW5lUmVkdWNlcnMsXG4gIGNyZWF0ZUZlYXR1cmVTZWxlY3RvcixcbiAgY3JlYXRlUmVkdWNlcixcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIE1lbW9pemVkU2VsZWN0b3IsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFRyYWl0RWZmZWN0IH0gZnJvbSAnLi90cmFpdC1lZmZlY3QnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJy4vbG9jYWwtc3RvcmUnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgc2V0UHJvcGVydGllc1JlZHVjZXIgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gZXhlY3V0ZSB3aWxsIGNvbWJpbmUgYWxsIHRoZSB0cmFpdHMsIGFuZCByZXR1cm4gYSBFbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogd2hpY2ggY29tYmluZXMgYWxsIHRoZSB0cmFpdHMgYWN0aW9ucywgc2VsZWN0b3JzICwgcmVkdWNlcnMgYW5kIGVmZmVjdHMsXG4gKiB0aGUgbmFtZXMgcGFyYW0gd2lsbCByZXBsYWNlIGFueSBhY3Rpb24gYW5kIHNlbGVjdG9yIHdpdGggdGhlIHdvcmQgRW50aXR5IG9yIEVudGl0aWVzLFxuICogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBlbnRpdHlOYW1lIGFuZCAgZW50aXRpZXNOYW1lIHBhcmFtIChlbnRpdHlOYW1lKydzJyBpZiBlbnRpdGllc05hbWUgaXMgb21pdHRlZCkuXG4gKiBAcGFyYW0gbmFtZXNDb25maWcgLSBPcHRpb25hbCBOYW1lcyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSBuYW1lc0NvbmZpZy5lbnRpdHlOYW1lIC0gc2luZ3VsYXIgbmFtZSBmb3IgZW50aXR5XG4gKiBAcGFyYW0gW25hbWVzQ29uZmlnLmVudGl0aWVzTmFtZV0gLSBwbHVyYWwgbmFtZSBmb3IgZW50aXRpZXMsIGRlZmF1bHRzIHRvIGVudGl0eU5hbWUgKyAncydcbiAqIEBwYXJhbSB0cmFpdHMgc2V0IG9mIHRyYWl0cyB0byBiZSBjb21iaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgZmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXR5VHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkQXN5bmNBY3Rpb25UcmFpdCh7XG4gKiAgICAgbmFtZTogJ2NoZWNrb3V0JyxcbiAqICAgICBhY3Rpb25TdWNjZXNzUHJvcHM6IHByb3BzPHsgb3JkZXJJZDogc3RyaW5nIH0+KCksXG4gKiAgIH0pXG4gKiApO1xuICpcbiAqIGV4cG9ydCBjb25zdCBwcm9kdWN0c0ZlYXR1cmUgPSBmZWF0dXJlRmFjdG9yeSh7XG4gKiAgIGFjdGlvbnNHcm91cEtleTogJ1tQcm9kdWN0c10nLFxuICogICBmZWF0dXJlU2VsZWN0b3I6ICdwcm9kdWN0cycsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICBGIGV4dGVuZHMgcmVhZG9ubHkgVHJhaXRGYWN0b3J5W10sXG4gIEVudGl0eU5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIEVudGl0aWVzTmFtZSBleHRlbmRzIHN0cmluZyA9IGAke0VudGl0eU5hbWV9c2Bcbj4oXG4gIHtcbiAgICBlbnRpdHlOYW1lLFxuICAgIGVudGl0aWVzTmFtZSxcbiAgfTogeyBlbnRpdHlOYW1lOiBFbnRpdHlOYW1lOyBlbnRpdGllc05hbWU/OiBFbnRpdGllc05hbWUgfSxcbiAgLi4udHJhaXRzOiBGXG4pOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRW50aXR5TmFtZSxcbiAgRW50aXRpZXNOYW1lLFxuICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICBFeHRyYWN0QWN0aW9uc1R5cGU8Rj4sXG4gIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gZXhlY3V0ZSB3aWxsIGNvbWJpbmUgYWxsIHRoZSB0cmFpdHMsIGFuZCByZXR1cm4gYSBFbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogd2hpY2ggY29tYmluZXMgYWxsIHRoZSB0cmFpdHMgYWN0aW9ucywgc2VsZWN0b3JzICwgcmVkdWNlcnMgYW5kIGVmZmVjdHMuXG4gKiBAcGFyYW0gdHJhaXRzIHNldCBvZiB0cmFpdHMgdG8gYmUgY29tYmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0eVRyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZEFzeW5jQWN0aW9uVHJhaXQoe1xuICogICAgIG5hbWU6ICdjaGVja291dCcsXG4gKiAgICAgYWN0aW9uU3VjY2Vzc1Byb3BzOiBwcm9wczx7IG9yZGVySWQ6IHN0cmluZyB9PigpLFxuICogICB9KVxuICogKTtcbiAqXG4gKiBleHBvcnQgY29uc3QgcHJvZHVjdHNGZWF0dXJlID0gZmVhdHVyZUZhY3Rvcnkoe1xuICogICBhY3Rpb25zR3JvdXBLZXk6ICdbUHJvZHVjdHNdJyxcbiAqICAgZmVhdHVyZVNlbGVjdG9yOiAncHJvZHVjdHMnLFxuICogfSk7XG4gKlxuICogcHJvZHVjdHNGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeTxGIGV4dGVuZHMgcmVhZG9ubHkgVHJhaXRGYWN0b3J5W10+KFxuICAuLi50cmFpdHM6IEZcbik6IEVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICAnRW50aXR5JyxcbiAgJ0VudGl0aWVzJyxcbiAgRXh0cmFjdFN0YXRlVHlwZTxGPixcbiAgRXh0cmFjdEFjdGlvbnNUeXBlPEY+LFxuICBFeHRyYWN0U2VsZWN0b3JzVHlwZTxGPlxuPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGV4ZWN1dGUgd2lsbCBjb21iaW5lIGFsbCB0aGUgdHJhaXRzLCBhbmQgcmV0dXJuIGEgRW50aXR5RmVhdHVyZUZhY3RvcnlcbiAqIHdoaWNoIGNvbWJpbmVzIGFsbCB0aGUgdHJhaXRzIGFjdGlvbnMsIHNlbGVjdG9ycyAsIHJlZHVjZXJzIGFuZCBlZmZlY3RzLFxuICogdGhlIG5hbWVzIHBhcmFtIHdpbGwgcmVwbGFjZSBhbnkgYWN0aW9uIGFuZCBzZWxlY3RvciB3aXRoIHRoZSB3b3JkIEVudGl0eSBvciBFbnRpdGllcyxcbiAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZW50aXR5TmFtZSBhbmQgIGVudGl0aWVzTmFtZSBwYXJhbSAoZW50aXR5TmFtZSsncycgaWYgZW50aXRpZXNOYW1lIGlzIG9taXR0ZWQpLlxuICogQHBhcmFtIG5hbWVzQ29uZmlnIC0gT3B0aW9uYWwgTmFtZXMgZm9yIGVudGl0aWVzXG4gKiBAcGFyYW0gbmFtZXNDb25maWcuZW50aXR5TmFtZSAtIHNpbmd1bGFyIG5hbWUgZm9yIGVudGl0eVxuICogQHBhcmFtIFtuYW1lc0NvbmZpZy5lbnRpdGllc05hbWVdIC0gcGx1cmFsIG5hbWUgZm9yIGVudGl0aWVzLCBkZWZhdWx0cyB0byBlbnRpdHlOYW1lICsgJ3MnXG4gKiBAcGFyYW0gdHJhaXRzIHNldCBvZiB0cmFpdHMgdG8gYmUgY29tYmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0eVRyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZEFzeW5jQWN0aW9uVHJhaXQoe1xuICogICAgIG5hbWU6ICdjaGVja291dCcsXG4gKiAgICAgYWN0aW9uU3VjY2Vzc1Byb3BzOiBwcm9wczx7IG9yZGVySWQ6IHN0cmluZyB9PigpLFxuICogICB9KVxuICogKTtcbiAqXG4gKiBleHBvcnQgY29uc3QgcHJvZHVjdHNGZWF0dXJlID0gZmVhdHVyZUZhY3Rvcnkoe1xuICogICBhY3Rpb25zR3JvdXBLZXk6ICdbUHJvZHVjdHNdJyxcbiAqICAgZmVhdHVyZVNlbGVjdG9yOiAncHJvZHVjdHMnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRiBleHRlbmRzIHJlYWRvbmx5IFRyYWl0RmFjdG9yeVtdLFxuICBFbnRpdHlOYW1lIGV4dGVuZHMgc3RyaW5nLFxuICBFbnRpdGllc05hbWUgZXh0ZW5kcyBzdHJpbmcgPSBgJHtFbnRpdHlOYW1lfXNgXG4+KFxuICBuYW1lc09yRmFjdG9yeTpcbiAgICB8IHsgZW50aXR5TmFtZTogRW50aXR5TmFtZTsgZW50aXRpZXNOYW1lPzogRW50aXRpZXNOYW1lIH1cbiAgICB8IFRyYWl0RmFjdG9yeSxcbiAgLi4udHJhaXRzOiBGXG4pOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRW50aXR5TmFtZSxcbiAgRW50aXRpZXNOYW1lLFxuICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICBFeHRyYWN0QWN0aW9uc1R5cGU8Rj4sXG4gIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4+IHtcbiAgcmV0dXJuICgoY29uZmlnOiBDb25maWc8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgeyBlbnRpdHlOYW1lLCBlbnRpdGllc05hbWUgfSA9XG4gICAgICAnZW50aXR5TmFtZScgaW4gbmFtZXNPckZhY3RvcnlcbiAgICAgICAgPyAobmFtZXNPckZhY3RvcnkgYXMge1xuICAgICAgICAgICAgZW50aXR5TmFtZTogRW50aXR5TmFtZTtcbiAgICAgICAgICAgIGVudGl0aWVzTmFtZT86IEVudGl0aWVzTmFtZTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IHsgZW50aXR5TmFtZTogJ0VudGl0eScsIGVudGl0aWVzTmFtZTogJ0VudGl0aWVzJyB9O1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSBjYXBpdGFsaXplKGVudGl0eU5hbWUpO1xuICAgIGNvbnN0IHBsdXJhbCA9IGVudGl0aWVzTmFtZVxuICAgICAgPyBjYXBpdGFsaXplKGVudGl0aWVzTmFtZSlcbiAgICAgIDogY2FwaXRhbGl6ZShlbnRpdHlOYW1lICsgJ3MnKTtcblxuICAgIGNvbnN0IHNvcnRlZFRyYWl0cyA9IHNvcnRUcmFpdHMoXG4gICAgICAnZW50aXR5TmFtZScgaW4gbmFtZXNPckZhY3RvcnkgPyBbLi4udHJhaXRzXSA6IFtuYW1lc09yRmFjdG9yeSwgLi4udHJhaXRzXVxuICAgICk7XG5cbiAgICBjb25zdCBhbGxDb25maWdzID0gYnVpbGRBbGxDb25maWdzKHNvcnRlZFRyYWl0cyk7XG5cbiAgICBjb25zdCBhbGxBY3Rpb25zID0gYnVpbGRBbGxBY3Rpb25zKFxuICAgICAgc29ydGVkVHJhaXRzLFxuICAgICAgY29uZmlnLmFjdGlvbnNHcm91cEtleSxcbiAgICAgIHNpbmd1bGFyLFxuICAgICAgcGx1cmFsLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICBjb25zdCBhbGxTZWxlY3RvcnMgPSBidWlsZEFsbFNlbGVjdG9ycyhzb3J0ZWRUcmFpdHMsIGFsbENvbmZpZ3MpO1xuXG4gICAgY29uc3QgYWxsTXV0YXRvcnMgPSBidWlsZEFsbE11dGF0b3JzKFxuICAgICAgc29ydGVkVHJhaXRzLFxuICAgICAgYWxsU2VsZWN0b3JzLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBidWlsZEluaXRpYWxTdGF0ZShzb3J0ZWRUcmFpdHMsIGFsbENvbmZpZ3MpO1xuXG4gICAgY29uc3QgcmVkdWNlciA9IGJ1aWxkUmVkdWNlcihcbiAgICAgIHNvcnRlZFRyYWl0cyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGFsbEFjdGlvbnMsXG4gICAgICBhbGxTZWxlY3RvcnMsXG4gICAgICBhbGxNdXRhdG9ycyxcbiAgICAgIGFsbENvbmZpZ3NcbiAgICApO1xuXG4gICAgY29uc3QgZmVhdHVyZVNlbGVjdG9yID1cbiAgICAgIHR5cGVvZiBjb25maWcuZmVhdHVyZVNlbGVjdG9yID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNyZWF0ZUZlYXR1cmVTZWxlY3RvcjxFeHRyYWN0U3RhdGVUeXBlPEY+Pihjb25maWcuZmVhdHVyZVNlbGVjdG9yKVxuICAgICAgICA6IGNvbmZpZy5mZWF0dXJlU2VsZWN0b3I7XG5cbiAgICBjb25zdCBhbGxGZWF0dXJlU2VsZWN0b3JzID1cbiAgICAgIGFsbFNlbGVjdG9ycyAmJiBnZXRTZWxlY3RvcnNGb3JGZWF0dXJlKGZlYXR1cmVTZWxlY3RvciwgYWxsU2VsZWN0b3JzKTtcblxuICAgIGNvbnN0IGFsbEVmZmVjdHMgPSBidWlsZEFsbEVmZmVjdHMoXG4gICAgICBzb3J0ZWRUcmFpdHMsXG4gICAgICBhbGxBY3Rpb25zLFxuICAgICAgYWxsRmVhdHVyZVNlbGVjdG9ycyxcbiAgICAgIGFsbENvbmZpZ3NcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbnM6IGVudGl0eU5hbWVcbiAgICAgICAgPyByZW5hbWVQcm9wcyhhbGxBY3Rpb25zLCBzaW5ndWxhciwgcGx1cmFsKVxuICAgICAgICA6IGFsbEFjdGlvbnMsXG4gICAgICBzZWxlY3RvcnM6IGVudGl0eU5hbWVcbiAgICAgICAgPyByZW5hbWVQcm9wcyhhbGxGZWF0dXJlU2VsZWN0b3JzLCBzaW5ndWxhciwgcGx1cmFsKVxuICAgICAgICA6IGFsbFNlbGVjdG9ycyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIHJlZHVjZXI6IHJlZHVjZXIgPz8gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUpLFxuICAgICAgZWZmZWN0czogYWxsRWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgICBFbnRpdHlOYW1lLFxuICAgIEVudGl0aWVzTmFtZSxcbiAgICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICAgIEV4dHJhY3RBY3Rpb25zVHlwZTxGPixcbiAgICBFeHRyYWN0U2VsZWN0b3JzVHlwZTxGPlxuICA+O1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wcyh0YXJnZXQ6IGFueSwgZW50aXR5TmFtZTogc3RyaW5nLCBlbnRpdGllc05hbWU6IHN0cmluZykge1xuICBjb25zdCByZXN1bHQgPSB7fSBhcyBhbnk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCkpIHtcbiAgICBjb25zdCBuZXdLZXkgPSBrZXlcbiAgICAgIC5yZXBsYWNlKCdFbnRpdGllcycsIGVudGl0aWVzTmFtZSlcbiAgICAgIC5yZXBsYWNlKCdFbnRpdHknLCBlbnRpdHlOYW1lKTtcbiAgICByZXN1bHRbbmV3S2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUcmFpdHMoXG4gIHRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXVxuKTogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSB7XG4gIGNvbnN0IHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYWl0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRyYWl0ID0gdHJhaXRzW2ldO1xuICAgIGlmICghdHJhaXQuZGVwZW5kcz8ubGVuZ3RoKSB7XG4gICAgICBzb3J0ZWRUcmFpdHMucHVzaCh0cmFpdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyYWl0LmRlcGVuZHMubGVuZ3RoID4gMSlcbiAgICAgIGZvciAoY29uc3QgZCBvZiB0cmFpdC5kZXBlbmRzKSB7XG4gICAgICAgIGNvbnN0IGlzVHJhaXRQcmVzZW50ID0gdHJhaXRzLnNvbWUoKHRyKSA9PiB0ci5rZXkgPT09IGQpO1xuICAgICAgICBpZiAoaXNUcmFpdFByZXNlbnQpIHtcbiAgICAgICAgICB0cmFpdC5kZXBlbmRzID0gW2RdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYgKHRyYWl0LmRlcGVuZHMubGVuZ3RoID4gMSlcbiAgICAgIHRocm93IEVycm9yKCdjb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgJyArIHRyYWl0LmRlcGVuZHMuam9pbignICcpKTtcbiAgICBjb25zdCBpc0RlcGVuZGVuY3lBbHJlYWR5QWRkZWQgPSBzb3J0ZWRUcmFpdHMuc29tZShcbiAgICAgICh0cikgPT4gdHIua2V5ID09PSB0cmFpdD8uZGVwZW5kcz8uWzBdXG4gICAgKTtcblxuICAgIGlmIChpc0RlcGVuZGVuY3lBbHJlYWR5QWRkZWQpIHNvcnRlZFRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICBlbHNlIHtcbiAgICAgIC8vIG1vdmUgdHJhaXQgdG8gdGhlIGVuZFxuICAgICAgZGVsZXRlIHRyYWl0c1tpXTtcbiAgICAgIHRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvcnRlZFRyYWl0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxDb25maWdzKHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSkge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZSgoYWNjOiBLZXllZENvbmZpZzxzdHJpbmcsIGFueT4sIGZhY3RvcnkpID0+IHtcbiAgICBhY2NbZmFjdG9yeS5rZXldID0gZmFjdG9yeS5jb25maWc7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbEFjdGlvbnMoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWN0aW9uc0dyb3VwS2V5OiBzdHJpbmcsXG4gIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgZW50aXRpZXNOYW1lOiBzdHJpbmcsXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKChwcmV2aW91c1Jlc3VsdDogVHJhaXRBY3Rpb25zLCBmYWN0b3J5KSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9XG4gICAgICBmYWN0b3J5Py5hY3Rpb25zPy4oe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGFjdGlvbnNHcm91cEtleSxcbiAgICAgICAgZW50aXR5TmFtZSxcbiAgICAgICAgZW50aXRpZXNOYW1lLFxuICAgICAgICBhbGxDb25maWdzLFxuICAgICAgfSkgPz8ge307XG4gICAgcmVzdWx0ID0gcHJldmlvdXNSZXN1bHQgPyB7IC4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHQgfSA6IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsU2VsZWN0b3JzKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKChwcmV2aW91c1Jlc3VsdDogVHJhaXRTZWxlY3RvcnM8YW55PiwgZmFjdG9yeSkgPT4ge1xuICAgIGxldCByZXN1bHQgPVxuICAgICAgZmFjdG9yeT8uc2VsZWN0b3JzPy4oe1xuICAgICAgICBwcmV2aW91c1NlbGVjdG9yczogcHJldmlvdXNSZXN1bHQsXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICB9KSA/PyB7fTtcbiAgICByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdCA/IHsgLi4ucHJldmlvdXNSZXN1bHQsIC4uLnJlc3VsdCB9IDogcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxNdXRhdG9ycyhcbiAgc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdLFxuICBhbGxTZWxlY3RvcnM6IFRyYWl0U2VsZWN0b3JzPGFueT4sXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiAoXG4gICAgc29ydGVkVHJhaXRzLnJlZHVjZShcbiAgICAgIChwcmV2aW91c1Jlc3VsdDogVHJhaXRTdGF0ZU11dGF0b3JzPGFueT4gfCB1bmRlZmluZWQsIGZhY3RvcnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9XG4gICAgICAgICAgZmFjdG9yeT8ubXV0YXRvcnM/Lih7XG4gICAgICAgICAgICBhbGxTZWxlY3RvcnM6IGFsbFNlbGVjdG9ycyxcbiAgICAgICAgICAgIHByZXZpb3VzTXV0YXRvcnM6IHByZXZpb3VzUmVzdWx0LFxuICAgICAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgICAgICB9KSA/PyB7fTtcbiAgICAgICAgcmVzdWx0ID0gcHJldmlvdXNSZXN1bHQgPyB7IC4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHQgfSA6IHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICkgfHwge31cbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRJbml0aWFsU3RhdGUoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoKHByZXZpb3VzUmVzdWx0OiBhbnksIGZhY3RvcnkpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgZmFjdG9yeT8uaW5pdGlhbFN0YXRlPy4oe1xuICAgICAgICBwcmV2aW91c0luaXRpYWxTdGF0ZTogcHJldmlvdXNSZXN1bHQsXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICB9KSA/P1xuICAgICAgcHJldmlvdXNSZXN1bHQgPz9cbiAgICAgIHt9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGluaXRpYWxTdGF0ZTogYW55LFxuICBhbGxBY3Rpb25zOiBUcmFpdEFjdGlvbnMsXG4gIGFsbFNlbGVjdG9yczogVHJhaXRTZWxlY3RvcnM8YW55PixcbiAgYWxsTXV0YXRvcnM6IFRyYWl0U3RhdGVNdXRhdG9yczxhbnk+LFxuICBhbGxDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgeyBbcDogc3RyaW5nXTogYW55IH1cbikge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZShcbiAgICAoXG4gICAgICBwcmV2aW91c1Jlc3VsdDogKChzdGF0ZTogYW55LCBhY3Rpb246IEFjdGlvbikgPT4gYW55KSB8IHVuZGVmaW5lZCxcbiAgICAgIGZhY3RvcnlcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3Rvcnk/LnJlZHVjZXI/Lih7XG4gICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgYWxsU2VsZWN0b3JzLFxuICAgICAgICBhbGxNdXRhdG9ycyxcbiAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdCAmJiBwcmV2aW91c1Jlc3VsdFxuICAgICAgICA/IChzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhU3RhdGUgPSBwcmV2aW91c1Jlc3VsdChzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQoYVN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgOiByZXN1bHQgPz8gcHJldmlvdXNSZXN1bHQ7XG4gICAgfSxcbiAgICB1bmRlZmluZWRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxFZmZlY3RzKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGFsbEFjdGlvbnM6IFRyYWl0QWN0aW9ucyxcbiAgYWxsRmVhdHVyZVNlbGVjdG9yczogVHJhaXRTZWxlY3RvcnM8YW55PixcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoXG4gICAgKHByZXZpb3VzUmVzdWx0OiBUeXBlPFRyYWl0RWZmZWN0PltdIHwgdW5kZWZpbmVkLCBmYWN0b3J5KSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID1cbiAgICAgICAgZmFjdG9yeT8uZWZmZWN0cz8uKHtcbiAgICAgICAgICBhbGxBY3Rpb25zLFxuICAgICAgICAgIGFsbFNlbGVjdG9yczogYWxsRmVhdHVyZVNlbGVjdG9ycyxcbiAgICAgICAgICBhbGxDb25maWdzLFxuICAgICAgICB9KSA/PyBbXTtcbiAgICAgIHJlc3VsdCA9IHByZXZpb3VzUmVzdWx0ID8gWy4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHRdIDogcmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdG9yc0ZvckZlYXR1cmU8XG4gIFN0YXRlLFxuICBTIGV4dGVuZHMgVHJhaXRTZWxlY3RvcnM8U3RhdGU+LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBGIGV4dGVuZHMgTWVtb2l6ZWRTZWxlY3RvcjxvYmplY3QsIGFueT5cbj4oZmVhdHVyZVNlbGVjdDogRiwgc2VsZWN0b3JzOiBTKTogRmVhdHVyZVNlbGVjdG9yczxTdGF0ZSwgUz4ge1xuICBjb25zdCBzczogeyBba2V5IGluIGtleW9mIFNdPzogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wIGluIHNlbGVjdG9ycykge1xuICAgIHNzW3Byb3BdID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZVNlbGVjdCBhcyBhbnksIHNlbGVjdG9yc1twcm9wXSBhcyBhbnkpO1xuICB9XG4gIHJldHVybiBzcyBhcyBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBTPjtcbn1cblxuLyoqXG4gKiBDb21iaW5lIGEgbWFwIGVudGl0eUZlYXR1cmVGYWN0b3JpZXMgaW50byBvbmUsXG4gKiBncm91cGluZyB0aGUgYWN0aW9ucyBhbmQgc2VsZWN0b3JzIGJ5IHRoZSBrZXkgb2YgdGhlIHJlc3BlY3RpdmUgZW50aXR5RmVhdHVyZUZhY3RvcnlcbiAqIEBwYXJhbSB0cmFpdEZhY3Rvcmllc01hcFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgY2xpZW50c0ZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ2NsaWVudCcsIGVudGl0aWVzTmFtZTogJ2NsaWVudHMnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PENsaWVudD4oKSxcbiAqICAgYWRkQ3J1ZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RPcmRlckZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3RPcmRlcicgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3RPcmRlcj4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0RmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXRpZXNUcmFpdDxQcm9kdWN0PigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RDb21iaW5lZEZhY3RvcnkgPSBjb21iaW5lRW50aXR5RmVhdHVyZXMoe1xuICogICBwcm9kdWN0czogcHJvZHVjdEZlYXR1cmVGYWN0b3J5LFxuICogICBwcm9kdWN0T3JkZXJzOiBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSxcbiAqICAgY2xpZW50czogY2xpZW50c0ZlYXR1cmVGYWN0b3J5LFxuICogfSk7XG4gKlxuICogY29uc3QgY29tYmluZWRGZWF0dXJlID0gcHJvZHVjdENvbWJpbmVkRmFjdG9yeSh7XG4gKiAgICAgYWN0aW9uc0dyb3VwS2V5OiAnW0NvbWJpbmVkXScsXG4gKiAgICAgZmVhdHVyZVNlbGVjdG9yOiAnY29tYmluZWQnLFxuICogICB9KTtcbiAqXG4gKiAgIGNvbWJpbmVkRmVhdHVyZS5hY3Rpb25zLmNsaWVudC5sb2FkQ2xpZW50cygpO1xuICogICBjb21iaW5lZEZlYXR1cmUuYWN0aW9ucy5wcm9kdWN0LmxvYWRQcm9kdWN0cygpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUVudGl0eUZlYXR1cmVzPFxuICBUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueT4gfSxcbiAgSyBleHRlbmRzIGtleW9mIFQsXG4gIFN0YXRlIGV4dGVuZHMgeyBbUCBpbiBLXTogRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPFRbUF0+PiB9LFxuICBBIGV4dGVuZHMgeyBbUCBpbiBLXTogRXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtQXT4+IH0sXG4gIFMgZXh0ZW5kcyB7XG4gICAgW1AgaW4gS106IEZlYXR1cmVTZWxlY3RvcnM8U3RhdGUsIEV4dHJhY3RTZWxlY3RvcnNUeXBlPFJldHVyblR5cGU8VFtQXT4+PjtcbiAgfSxcbiAgUiBleHRlbmRzIChjb25maWc6IENvbmZpZzxTdGF0ZT4pID0+IHtcbiAgICBhY3Rpb25zOiBBO1xuICAgIHNlbGVjdG9yczogUztcbiAgICByZWR1Y2VyOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGU7XG4gICAgZWZmZWN0czogVHlwZTxhbnk+W107XG4gICAgaW5pdGlhbFN0YXRlOiBTdGF0ZTtcbiAgfVxuPih0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGNvbnN0IGFjdGlvbnM6IGFueSA9IHt9O1xuICAgIGNvbnN0IHNlbGVjdG9yczogYW55ID0ge307XG4gICAgY29uc3QgcmVkdWNlcnM6IGFueSA9IHt9O1xuICAgIGxldCBlZmZlY3RzOiBUeXBlPGFueT5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50aXR5RmVhdHVyZUZhY3RvcnldIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgdHJhaXRGYWN0b3JpZXNNYXBcbiAgICApKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgICBmZWF0dXJlU2VsZWN0b3IsXG4gICAgICAgIChzdGF0ZTogYW55KSA9PiBzdGF0ZVtrZXldXG4gICAgICApO1xuICAgICAgY29uc3QgZmVhdHVyZVRyYWl0cyA9IGVudGl0eUZlYXR1cmVGYWN0b3J5KHtcbiAgICAgICAgYWN0aW9uc0dyb3VwS2V5OiBjb25maWcuYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgICBmZWF0dXJlU2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgfSk7XG4gICAgICBhY3Rpb25zW2tleV0gPSBmZWF0dXJlVHJhaXRzLmFjdGlvbnM7XG4gICAgICBzZWxlY3RvcnNba2V5XSA9IGZlYXR1cmVUcmFpdHMuc2VsZWN0b3JzO1xuICAgICAgcmVkdWNlcnNba2V5XSA9IGZlYXR1cmVUcmFpdHMucmVkdWNlcjtcbiAgICAgIGVmZmVjdHMgPSBbLi4uZWZmZWN0cywgLi4uZmVhdHVyZVRyYWl0cy5lZmZlY3RzXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbnMsXG4gICAgICBzZWxlY3RvcnMsXG4gICAgICByZWR1Y2VyOiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpLFxuICAgICAgZWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBSO1xufVxuXG4vKipcbiAqIE1peCBhIG1hcCBlbnRpdHlGZWF0dXJlRmFjdG9yaWVzIGludG8gb25lLCBkaWZmZXJlbnQgZnJvbSBjb21iaW5lIHRoZSBhY3Rpb25zIGFuZCBzZWxlY3RvcnMgYSBtaXgsIG5vdCBncm91cCBieSBrZXkgbGlrZSBpbiBjb21iaW5lLCB0aGUga2V5cyBhcmUgc3RpbGwgdXNlXG4gKiBpbnRlcm5hbCBpbiB0aGUgcmVkdWNlcnMgYW5kIHNlbGVjdG9yIHRvIHNlcGFyYXRlIHRoZSBzdGF0ZVxuICogQHBhcmFtIHRyYWl0RmFjdG9yaWVzTWFwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBjbGllbnRzRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAnY2xpZW50JywgZW50aXRpZXNOYW1lOiAnY2xpZW50cycgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpLFxuICogICBhZGRDcnVkRW50aXRpZXNUcmFpdDxDbGllbnQ+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdE9yZGVyJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE1peGVkRmFjdG9yeSA9IG1peEVudGl0eUZlYXR1cmVzKHtcbiAqICAgcHJvZHVjdHM6IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSxcbiAqICAgcHJvZHVjdE9yZGVyczogcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnksXG4gKiAgIGNsaWVudHM6IGNsaWVudHNGZWF0dXJlRmFjdG9yeSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IG1peGVkRmVhdHVyZSA9IHByb2R1Y3RNaXhlZEZhY3Rvcnkoe1xuICogICAgIGFjdGlvbnNHcm91cEtleTogJ1tNaXhlZF0nLFxuICogICAgIGZlYXR1cmVTZWxlY3RvcjogJ21peGVkJyxcbiAqICAgfSk7XG4gKiBtaXhlZEZlYXR1cmUuYWN0aW9ucy5sb2FkQ2xpZW50cygpO1xuICogbWl4ZWRGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4RW50aXR5RmVhdHVyZXM8XG4gIFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IEVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55PiB9LFxuICBLIGV4dGVuZHMga2V5b2YgVCxcbiAgU3RhdGUgZXh0ZW5kcyB7IFtQIGluIEtdOiBFeHRyYWN0U3RhdGVUeXBlPFJldHVyblR5cGU8VFtQXT4+IH0sXG4gIEEgZXh0ZW5kcyBUcmFpdEFjdGlvbnMgJlxuICAgIFVuaW9uVG9JbnRlcnNlY3Rpb248RXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtLXT4+PixcbiAgUyBleHRlbmRzIFRyYWl0U2VsZWN0b3JzPGFueT4gJlxuICAgIFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gICAgICBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBFeHRyYWN0U2VsZWN0b3JzVHlwZTxSZXR1cm5UeXBlPFRbS10+Pj5cbiAgICA+LFxuICBSIGV4dGVuZHMgRW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnksIFN0YXRlLCBBLCBTPlxuPih0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGxldCBhY3Rpb25zOiBhbnkgPSB7fTtcbiAgICBsZXQgc2VsZWN0b3JzOiBhbnkgPSB7fTtcbiAgICBjb25zdCByZWR1Y2VyczogYW55ID0ge307XG4gICAgbGV0IGVmZmVjdHM6IFR5cGU8YW55PltdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRpdHlGZWF0dXJlRmFjdG9yeV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0cmFpdEZhY3Rvcmllc01hcFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgIGZlYXR1cmVTZWxlY3RvcixcbiAgICAgICAgKHN0YXRlOiBhbnkpID0+IHN0YXRlW2tleV1cbiAgICAgICk7XG4gICAgICBjb25zdCBmZWF0dXJlVHJhaXRzID0gZW50aXR5RmVhdHVyZUZhY3Rvcnkoe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICAgIGZlYXR1cmVTZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbnMgPSB7IC4uLmFjdGlvbnMsIC4uLmZlYXR1cmVUcmFpdHMuYWN0aW9ucyB9O1xuICAgICAgc2VsZWN0b3JzID0geyAuLi5zZWxlY3RvcnMsIC4uLmZlYXR1cmVUcmFpdHMuc2VsZWN0b3JzIH07XG4gICAgICByZWR1Y2Vyc1trZXldID0gZmVhdHVyZVRyYWl0cy5yZWR1Y2VyO1xuICAgICAgZWZmZWN0cyA9IFsuLi5lZmZlY3RzLCAuLi5mZWF0dXJlVHJhaXRzLmVmZmVjdHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIHNlbGVjdG9ycyxcbiAgICAgIHJlZHVjZXI6IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VycyksXG4gICAgICBlZmZlY3RzLFxuICAgIH07XG4gIH0pIGFzIFI7XG59XG5cbi8qKlxuICogQ29tYmluZXMgdGFyZ2V0VHJhaXRGYWN0b3J5IHdpdGggdGhlIHRyYWl0RmFjdG9yaWVzTWFwIHVzaW5nIHRoZSBrZXlzIGFzIHByb3BzIGZvciB0aGUgdGFyZ2V0VHJhaXRGYWN0b3J5IHN0YXRlLFxuICogYW5kIGdyb3VwaW5nIHRoZSBjb21iaW5lZCBhY3Rpb25zIGJ5IGtleVxuICogQHBhcmFtIHRhcmdldFRyYWl0RmFjdG9yeVxuICogQHBhcmFtIHRyYWl0RmFjdG9yaWVzTWFwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBjbGllbnRzRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAnY2xpZW50JywgZW50aXRpZXNOYW1lOiAnY2xpZW50cycgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpLFxuICogICBhZGRDcnVkRW50aXRpZXNUcmFpdDxDbGllbnQ+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdE9yZGVyJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdEFkZEVudGl0eVByb3BlcnRpZXNGYWN0b3J5ID0gYWRkRW50aXR5RmVhdHVyZXNQcm9wZXJ0aWVzKFxuICogICBwcm9kdWN0RmVhdHVyZUZhY3RvcnksXG4gKiAgIHtcbiAqICAgICBwcm9kdWN0T3JkZXJzOiBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSxcbiAqICAgICBjbGllbnRzOiBjbGllbnRzRmVhdHVyZUZhY3RvcnksXG4gKiAgIH1cbiAqICk7XG4gKlxuICogY29uc3QgY29tYmluZWRGZWF0dXJlID0gcHJvZHVjdEFkZEVudGl0eVByb3BlcnRpZXNGYWN0b3J5KHtcbiAqICAgICBhY3Rpb25zR3JvdXBLZXk6ICdbYWRkRW50aXR5RmVhdHVyZXNdJyxcbiAqICAgICBmZWF0dXJlU2VsZWN0b3I6ICdhZGRFbnRpdHlGZWF0dXJlcycsXG4gKiAgIH0pO1xuICpcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKiAgIGNvbWJpbmVkRmVhdHVyZS5hY3Rpb25zLmNsaWVudHMubG9hZENsaWVudHMoKTtcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMucHJvZHVjdE9yZGVycy5sb2FkUHJvZHVjdE9yZGVycygpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW50aXR5RmVhdHVyZXNQcm9wZXJ0aWVzPFxuICBGIGV4dGVuZHMgRW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnk+LFxuICBUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnksIGFueT4gfSxcbiAgSyBleHRlbmRzIGtleW9mIFQsXG4gIFN0YXRlIGV4dGVuZHMgRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPEY+PiAmIHtcbiAgICBbUCBpbiBLXTogRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPFRbUF0+PjtcbiAgfSxcbiAgQSBleHRlbmRzIEV4dHJhY3RBY3Rpb25zVHlwZTxSZXR1cm5UeXBlPEY+PiAmIHtcbiAgICBbUCBpbiBLXTogRXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtQXT4+O1xuICB9LFxuICBTIGV4dGVuZHMgRmVhdHVyZVNlbGVjdG9yczxTdGF0ZSwgRXh0cmFjdFNlbGVjdG9yc1R5cGU8UmV0dXJuVHlwZTxGPj4+ICYge1xuICAgIFtQIGluIEtdOiBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBFeHRyYWN0U2VsZWN0b3JzVHlwZTxSZXR1cm5UeXBlPFRbUF0+Pj47XG4gIH0sXG4gIFIgZXh0ZW5kcyAoY29uZmlnOiBDb25maWc8U3RhdGU+KSA9PiB7XG4gICAgYWN0aW9uczogQTtcbiAgICBzZWxlY3RvcnM6IFM7XG4gICAgcmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlO1xuICAgIGVmZmVjdHM6IFR5cGU8YW55PltdO1xuICAgIGluaXRpYWxTdGF0ZTogU3RhdGU7XG4gIH1cbj4odGFyZ2V0VHJhaXRGYWN0b3J5OiBGLCB0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGNvbnN0IHRhcmdldEZlYXR1cmVUcmFpdHMgPSB0YXJnZXRUcmFpdEZhY3Rvcnkoe1xuICAgICAgYWN0aW9uc0dyb3VwS2V5OiBjb25maWcuYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgZmVhdHVyZVNlbGVjdG9yOiBmZWF0dXJlU2VsZWN0b3IsXG4gICAgfSk7XG4gICAgY29uc3QgYWN0aW9uczogYW55ID0geyAuLi50YXJnZXRGZWF0dXJlVHJhaXRzLmFjdGlvbnMgfTtcbiAgICBjb25zdCBzZWxlY3RvcnM6IGFueSA9IHsgLi4udGFyZ2V0RmVhdHVyZVRyYWl0cy5zZWxlY3RvcnMgfTtcbiAgICBjb25zdCByZWR1Y2VyczogYW55ID0ge307XG4gICAgbGV0IGVmZmVjdHM6IFR5cGU8YW55PltdID0gWy4uLnRhcmdldEZlYXR1cmVUcmFpdHMuZWZmZWN0c107XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRpdHlGZWF0dXJlRmFjdG9yeV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0cmFpdEZhY3Rvcmllc01hcFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgIGZlYXR1cmVTZWxlY3RvcixcbiAgICAgICAgKHN0YXRlOiBhbnkpID0+IHN0YXRlW2tleV1cbiAgICAgICk7XG4gICAgICBjb25zdCBmZWF0dXJlVHJhaXRzID0gZW50aXR5RmVhdHVyZUZhY3Rvcnkoe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICAgIGZlYXR1cmVTZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbnNba2V5XSA9IGZlYXR1cmVUcmFpdHMuYWN0aW9ucztcbiAgICAgIHNlbGVjdG9yc1trZXldID0gZmVhdHVyZVRyYWl0cy5zZWxlY3RvcnM7XG4gICAgICByZWR1Y2Vyc1trZXldID0gZmVhdHVyZVRyYWl0cy5yZWR1Y2VyO1xuICAgICAgZWZmZWN0cyA9IFsuLi5lZmZlY3RzLCAuLi5mZWF0dXJlVHJhaXRzLmVmZmVjdHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIHNlbGVjdG9ycyxcbiAgICAgIHJlZHVjZXI6IHNldFByb3BlcnRpZXNSZWR1Y2VyKHRhcmdldEZlYXR1cmVUcmFpdHMucmVkdWNlciwgcmVkdWNlcnMpLFxuICAgICAgZWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBSO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaW1wbGVtZW50YXRpb24gIGEgVHJhaXRGYWN0b3J5XG4gKiBAcGFyYW0gZiBUcmFpdEZhY3RvcnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYWl0RmFjdG9yeTxcbiAgU3RhdGUgPSB7fSxcbiAgQSBleHRlbmRzIFRyYWl0QWN0aW9ucyA9IHt9LFxuICBTIGV4dGVuZHMgVHJhaXRTZWxlY3RvcnM8U3RhdGU+ID0ge30sXG4gIE0gZXh0ZW5kcyBUcmFpdFN0YXRlTXV0YXRvcnM8U3RhdGU+ID0ge30sXG4gIEtFWSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgQyA9IHVua25vd24sXG4gIEtDIGV4dGVuZHMgQWxsVHJhaXRDb25maWdzID0gS2V5ZWRDb25maWc8S0VZLCBDPlxuPihmOiB7XG4gIGtleTogS0VZO1xuICBjb25maWc/OiBDO1xuICBkZXBlbmRzPzogc3RyaW5nW107XG4gIGFjdGlvbnM/OiBUcmFpdEFjdGlvbnNGYWN0b3J5PEEsIEtDPjtcbiAgc2VsZWN0b3JzPzogVHJhaXRTZWxlY3RvcnNGYWN0b3J5PFN0YXRlLCBTLCBLQz47XG4gIGluaXRpYWxTdGF0ZT86IFRyYWl0SW5pdGlhbFN0YXRlRmFjdG9yeTxTdGF0ZSwgS0M+O1xuICBtdXRhdG9ycz86IFRyYWl0U3RhdGVNdXRhdG9yc0ZhY3Rvcnk8U3RhdGUsIE0sIEtDPjtcbiAgcmVkdWNlcj86IFRyYWl0UmVkdWNlckZhY3Rvcnk8U3RhdGUsIEEsIFMsIE0sIEtDPjtcbiAgZWZmZWN0cz86IFRyYWl0RWZmZWN0c0ZhY3Rvcnk8U3RhdGUsIEEsIFMsIEtDPjtcbn0pOiBUcmFpdEZhY3Rvcnk8U3RhdGUsIEEsIFMsIE0sIEtFWSwgQywgS0M+IHtcbiAgcmV0dXJuIGYgYXMgVHJhaXRGYWN0b3J5PFN0YXRlLCBBLCBTLCBNLCBLRVksIEMsIEtDPjtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29tYmluZSBzZWxlY3RvcnMgaW4gY29tcG9uZW50cyBhcyBtYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZpZXcgPSBjb21iaW5lU2VsZWN0b3JzKHtcbiAqICAgICBwcm9kdWN0czogUHJvZHVjdFNlbGVjdG9ycy5zZWxlY3RQcm9kdWN0c0N1cnJlbnRQYWdlLFxuICogICAgIGlzTG9hZGluZzogUHJvZHVjdFNlbGVjdG9ycy5pc0xvYWRpbmdQcm9kdWN0c0N1cnJlbnRQYWdlLFxuICogICAgIHNlbGVjdGVkUHJvZHVjdDogUHJvZHVjdFNlbGVjdG9ycy5zZWxlY3RQcm9kdWN0U2VsZWN0ZWQsXG4gKiAgICAgaXNMb2FkaW5nQ2hlY2tvdXQ6IFByb2R1Y3RTZWxlY3RvcnMuaXNMb2FkaW5nQ2hlY2tvdXQsXG4gKiAgICAgc2VsZWN0ZWRTb3J0OiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RzU29ydCxcbiAqICAgICBmaWx0ZXJzOiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RzRmlsdGVyLFxuICogICB9KTtcbiAqIEBwYXJhbSB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lU2VsZWN0b3JzPFxuICBUIGV4dGVuZHMgeyBbazogc3RyaW5nXTogTWVtb2l6ZWRTZWxlY3RvcjxhbnksIGFueT4gfVxuPih0OiBUKTogTWVtb2l6ZWRTZWxlY3RvcjxhbnksIHsgW2ogaW4ga2V5b2YgVF06IFJldHVyblR5cGU8VFtqXT4gfT4ge1xuICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3QudmFsdWVzKHQpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModCk7XG4gIGNvbnN0IHByb2plY3RvciA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICBrZXlzLnJlZHVjZSgoYWNjLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBhbnkpO1xuICByZXR1cm4gKGNyZWF0ZVNlbGVjdG9yIGFzIGFueSkuYXBwbHkobnVsbCwgWy4uLnNlbGVjdG9ycywgcHJvamVjdG9yXSk7XG59XG4iXX0=
@@ -138,10 +138,10 @@ export class TraitsLocalStore extends TraitEffect {
138
138
  ngOnDestroy() {
139
139
  this.traits.destroy();
140
140
  }
141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
142
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore }); }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
142
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore }); }
143
143
  }
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore, decorators: [{
145
145
  type: Injectable
146
- }], ctorParameters: function () { return []; } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXRzLWxvY2FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvbG9jYWwtc3RvcmUvdHJhaXRzLWxvY2FsLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFbEYsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FHOUIsUUFBa0IsRUFBRSxhQUFxQixFQUFFLFlBQWU7SUFDMUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxhQUFhLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBRTlELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixlQUFlLEVBQUUscUJBQXFCLENBQVEsV0FBVyxDQUFDO1FBQzFELGVBQWUsRUFBRSxJQUFJLFdBQVcsR0FBRztLQUNwQyxDQUFrQixDQUFDO0lBRXBCLE1BQU0sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sU0FBUyxHQUNiLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFN0UsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUM1QywyQkFBMkIsRUFDM0IsS0FBSyxDQUNOLENBQUM7SUFDRixJQUFJLENBQUMseUJBQXlCLEVBQUU7UUFDOUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN4QixTQUFTLEVBQUUsU0FBUztZQUNwQixNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzVCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFnQixDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELFNBQVMsT0FBTztRQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVEOzs7Ozs7O1dBT0c7UUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTztRQUNQLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxDQUFDLFdBQXdCO1lBQ2pDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBYUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRERztBQUVILE1BQU0sT0FBZ0IsZ0JBR3BCLFNBQVEsV0FBVztJQWNuQjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBSEYsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUlsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FDNUIsSUFBSSxDQUFDLFFBQVEsRUFDYixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsYUFBYSxDQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQzlDLENBQUM7SUFJRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQWpDbUIsZ0JBQWdCO21IQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeSwgRW50aXR5RmVhdHVyZUZhY3RvcnkgfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQgeyBjcmVhdGVGZWF0dXJlU2VsZWN0b3IsIFJlZHVjZXJNYW5hZ2VyLCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEFjdGlvbnMsIEVmZmVjdFNvdXJjZXMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IGdldERlc3Ryb3lBY3Rpb25OYW1lLCBUcmFpdEVmZmVjdCB9IGZyb20gJy4uL3RyYWl0LWVmZmVjdCc7XG5pbXBvcnQgeyBESVNBQkxFX0xPQ0FMX1RSQUlUX0VGRkVDVFMgfSBmcm9tICcuL2Rpc2FibGUtbG9jYWwtdHJhaXQtZWZmZWN0cy50b2tlbic7XG5cbmxldCBpZCA9IDA7XG5mdW5jdGlvbiB1bmlxdWVDb21wb25lbnRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbi8qKlxuICogQnVpbGRzIHRyYWl0RmFjdG9yeSBhbmQgcmVnaXN0ZXJzIGVmZmVjdHMgYW5kIHJlZHVjZXJzIHdpdGhcbiAqIGEgZ2VuZXJhdGVkIGNvbXBvbmVudCBpZCwgcmV0dXJucyBidWlsZCBhY3Rpb25zIGFuZCBzZWxlY3RvcnNcbiAqIGFuZCBhIGRlc3Ryb3kgbWV0aG9kIHRoYXQgd2lsbCB1bmVyZ2lzdGVyIHRoZSBlZmZlY3RzIGFuZCByZWR1Y2Vyc1xuICogd2hlbiBjYWxsZWQsIGFuZCBhIGFkZEVmZmVjdCB3aGljaCBjYW4gYmUgdXNlIHRvIHJlZ2lzdGVyIGV4dHJhIGVmZmVjdHNcbiAqXG4gKiBVc2VkIGluc2lkZSBUcmFpdHNMb2NhbFN0b3JlLCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgeW91clxuICogb3duIENvbXBvbmVudCBTZXJ2aWNlIHdpdGhvdXQgZXh0ZW5kaW5nIFRyYWl0c0xvY2FsU3RvcmVcbiAqIEBwYXJhbSBpbmplY3RvclxuICogQHBhcmFtIGNvbXBvbmVudE5hbWVcbiAqIEBwYXJhbSB0cmFpdEZhY3RvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxUcmFpdHM8XG4gIFN0YXRlLFxuICBGIGV4dGVuZHMgQmFzZUVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55LCBhbnk+XG4+KGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50TmFtZTogc3RyaW5nLCB0cmFpdEZhY3Rvcnk6IEYpIHtcbiAgY29uc3QgcmVkdWNlcnMgPSBpbmplY3Rvci5nZXQoUmVkdWNlck1hbmFnZXIpO1xuICBjb25zdCBlZmZlY3RzID0gaW5qZWN0b3IuZ2V0KEVmZmVjdFNvdXJjZXMpO1xuICBjb25zdCBzdG9yZSA9IGluamVjdG9yLmdldChTdG9yZSk7XG4gIGNvbnN0IGNvbXBvbmVudElkID0gYCR7Y29tcG9uZW50TmFtZX1fJHt1bmlxdWVDb21wb25lbnRJZCgpfWA7XG5cbiAgY29uc3QgdHJhaXRzID0gdHJhaXRGYWN0b3J5KHtcbiAgICBmZWF0dXJlU2VsZWN0b3I6IGNyZWF0ZUZlYXR1cmVTZWxlY3RvcjxTdGF0ZT4oY29tcG9uZW50SWQpLFxuICAgIGFjdGlvbnNHcm91cEtleTogYFske2NvbXBvbmVudElkfV1gLFxuICB9KSBhcyBSZXR1cm5UeXBlPEY+O1xuXG4gIHRyYWl0cy5yZWR1Y2VyICYmIHJlZHVjZXJzLmFkZFJlZHVjZXIoY29tcG9uZW50SWQsIHRyYWl0cy5yZWR1Y2VyKTtcblxuICBjb25zdCBwcm92aWRlcnMgPVxuICAgICh0cmFpdHMuZWZmZWN0cyAmJiBbLi4udHJhaXRzLmVmZmVjdHMubWFwKChlKSA9PiAoeyBwcm92aWRlOiBlIH0pKV0pIHx8IFtdO1xuXG4gIGNvbnN0IGRpc2FibGVMb2NhbFRyYWl0c0VmZmVjdHMgPSBpbmplY3Rvci5nZXQoXG4gICAgRElTQUJMRV9MT0NBTF9UUkFJVF9FRkZFQ1RTLFxuICAgIGZhbHNlXG4gICk7XG4gIGlmICghZGlzYWJsZUxvY2FsVHJhaXRzRWZmZWN0cykge1xuICAgIGNvbnN0IGkgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnMsXG4gICAgICBwYXJlbnQ6IGluamVjdG9yLFxuICAgIH0pO1xuXG4gICAgdHJhaXRzLmVmZmVjdHM/LmZvckVhY2goKGUpID0+IHtcbiAgICAgIGNvbnN0IGVmZmVjdCA9IGkuZ2V0KGUpIGFzIFRyYWl0RWZmZWN0O1xuICAgICAgZWZmZWN0LmNvbXBvbmVudElkID0gY29tcG9uZW50SWQ7XG4gICAgICBlZmZlY3RzLmFkZEVmZmVjdHMoZWZmZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goeyB0eXBlOiBnZXREZXN0cm95QWN0aW9uTmFtZShjb21wb25lbnRJZCkgfSk7XG4gICAgLyoqXG4gICAgICogQSBzZXJ2aWNlIHRoYXQgZXh0ZW5kcyBUcmFpdHNMb2NhbFN0b3JlIGFuZCBvdGhlciBjb21wb25lbnQgc2VydmljZSBhcmUgZGVzdHJveWVkXG4gICAgICogYmVmb3JlIHRoZSBjb21wb25lbnQgdGhhdCBkZXBlbmRzIG9uIHRoZW0sIHRoaXMgY2F1c2VzIHRoYXQgYW55IHN1YnNjcmlwdGlvbnNcbiAgICAgKiB0byBzZWxlY3RvcnMgb2YgdGhlIFRyYWl0c0xvY2FsU3RvcmUgY291bGQgZmFpbCBiZWNhdXNlIHRoZSBzdG9yZSBzdGF0ZSBpcyByZW1vdmVkIGJlZm9yZVxuICAgICAqIHRoZXkgYXJlIHVuc3Vic2NyaWJlIGJ5IHRoZSBvbkRlc3Ryb3kgb2YgdGhlIGNvbXBvbmVudC4gRXhlY3V0aW5nIHJlZHVjZXJzLnJlbW92ZVJlZHVjZXJcbiAgICAgKiBpbnNpZGUgc2V0VGltZW91dCBlbnN1cmVzIHRoZSBzdGF0ZSBpcyByZW1vdmUgYWZ0ZXIgdGhlIGNvbXBvbmVudCBvbkRlc3Ryb3kgd2FzIGNhbGxlZCxcbiAgICAgKiBhdm9pZGluZyB0aGUgYmVmb3JlIG1lbnRpb25lZCBwb3NzaWJsZSBpc3N1ZXMuXG4gICAgICovXG4gICAgc2V0VGltZW91dCgoKSA9PiByZWR1Y2Vycy5yZW1vdmVSZWR1Y2VyKGNvbXBvbmVudElkKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3ksXG4gICAgYWN0aW9uczogdHJhaXRzLmFjdGlvbnMsXG4gICAgc2VsZWN0b3JzOiB0cmFpdHMuc2VsZWN0b3JzLFxuICAgIGFkZEVmZmVjdHMobG9jYWxFZmZlY3Q6IFRyYWl0RWZmZWN0KSB7XG4gICAgICBsb2NhbEVmZmVjdC5jb21wb25lbnRJZCA9IGNvbXBvbmVudElkO1xuICAgICAgZWZmZWN0cy5hZGRFZmZlY3RzKGxvY2FsRWZmZWN0KTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGU8VD4gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsVHJhaXRzQ29uZmlnPFxuICBGIGV4dGVuZHMgQmFzZUVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55LCBhbnk+XG4+IHtcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICB0cmFpdHNGYWN0b3J5OiBGO1xufVxuXG4vKipcbiAqIENsYXNzIHVzZWQgdG8gY3JlYXRlIGxvY2FsIHRyYWl0cyBzZXJ2aWNlLCByZWNlaXZlcyBhIHRyYWl0IGZhY3RvcnksIHdoaWNoIHdpbGwgYmVcbiAqIGJ1aWx0IGFuZCBpdHMgcmVkdWNlcnMgYW5kIGVmZmVjdCByZWdpc3RlciB1c2luZyBhIGR5bmFtaWMgaWQgd2hlbiB0aGUgc2VydmljZSBpcyBidWlsdFxuICogYW5kIGdldCBkZXN0cm95ZWQgd2hlbiB0aGUgb25EZXN0cm95IGxpZmVjeWNsZSBtZXRob2Qgb2YgdGhlIHNlcnZpY2UgaXMgY2FsbGVkLCBpZiB0aGUgc2VydmljZVxuICogaGFzIGVmZmVjdHMgdGhpcy50cmFpdHMuYWRkRWZmZWN0cyh0aGlzKSBzaG91bGQgYmUgY2FsbCBpbiB0aGUgY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJvZHVjdEZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0eVRyYWl0PFByb2R1Y3Q+KCksXG4gKiApO1xuICpcbiAqIEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIFByb2R1Y3RzTG9jYWxUcmFpdHMgZXh0ZW5kcyBUcmFpdHNMb2NhbFN0b3JlPFxuICogICB0eXBlb2YgcHJvZHVjdEZlYXR1cmVGYWN0b3J5XG4gKiA+IHtcbiAqICAgbG9hZFByb2R1Y3RzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICogICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICAgIG9mVHlwZSh0aGlzLmxvY2FsQWN0aW9ucy5sb2FkUHJvZHVjdHMpLFxuICogICAgICAgc3dpdGNoTWFwKCgpID0+XG4gKiAgICAgICAgIC8vY2FsbCB5b3VyIHNlcnZpY2UgdG8gZ2V0IHRoZSBwcm9kdWN0cyBkYXRhXG4gKiAgICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZ2V0UHJvZHVjdHMoKS5waXBlKFxuICogICAgICAgICAgIG1hcCgocmVzKSA9PlxuICogICAgICAgICAgICAgdGhpcy5sb2NhbEFjdGlvbnMubG9hZFByb2R1Y3RzU3VjY2Vzcyh7IGVudGl0aWVzOiByZXMucmVzdWx0TGlzdCB9KVxuICogICAgICAgICAgICksXG4gKiAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih0aGlzLmxvY2FsQWN0aW9ucy5sb2FkUHJvZHVjdHNGYWlsKCkpKVxuICogICAgICAgICApXG4gKiAgICAgICApXG4gKiAgICAgKVxuICogICApO1xuICpcbiAqICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZSkge1xuICogICAgIHN1cGVyKGluamVjdG9yKTtcbiAqICAgICB0aGlzLnRyYWl0cy5hZGRFZmZlY3RzKHRoaXMpOyAvLyBJTVBPUlRBTlQhIGFkZCB0aGlzIGxpbmUgaWYgdGhlIHNlcnZpY2UgaGFzIGVmZmVjdHNcbiAqICAgfVxuICpcbiAqICAgc2V0dXAoKTogTG9jYWxUcmFpdHNDb25maWc8dHlwZW9mIHByb2R1Y3RGZWF0dXJlRmFjdG9yeT4ge1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICBjb21wb25lbnROYW1lOiAnUHJvZHVjdHNQaWNrZXJDb21wb25lbnQnLFxuICogICAgICAgdHJhaXRzRmFjdG9yeTogcHJvZHVjdEZlYXR1cmVGYWN0b3J5LFxuICogICAgIH07XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyB1c2UgaW4gY29tcG9uZW50IGxhdGVyXG4gKlxuICogQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdzb21lLWNvbXBvbmVudCcsXG4gKiAgIHRlbXBsYXRlOiBgPGRpdj4gc29tZSBjb250ZW50PC9kaXY+IGAsXG4gKiAgIHByb3ZpZGVyczogW1Byb2R1Y3RzTG9jYWxUcmFpdHNdLFxuICogICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgUHJvZHVjdFNlbGVjdERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlLCBwcml2YXRlIHRyYWl0czogUHJvZHVjdHNMb2NhbFRyYWl0cykge31cbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2godGhpcy50cmFpdHMubG9jYWxBY3Rpb25zLmxvYWRQcm9kdWN0cygpKTtcbiAqICAgfVxuICogfVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhaXRzTG9jYWxTdG9yZTxcbiAgICBGIGV4dGVuZHMgQmFzZUVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55LCBhbnk+XG4gID5cbiAgZXh0ZW5kcyBUcmFpdEVmZmVjdFxuICBpbXBsZW1lbnRzIE9uRGVzdHJveVxue1xuICB0cmFpdHM6IHtcbiAgICBhY3Rpb25zOiBSZXR1cm5UeXBlPEY+WydhY3Rpb25zJ107XG4gICAgc2VsZWN0b3JzOiBSZXR1cm5UeXBlPEY+WydzZWxlY3RvcnMnXTtcbiAgICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICAgIGFkZEVmZmVjdHM6IChsb2NhbEVmZmVjdDogVHJhaXRFZmZlY3QpID0+IHZvaWQ7XG4gIH07XG5cbiAgbG9jYWxBY3Rpb25zOiBSZXR1cm5UeXBlPEY+WydhY3Rpb25zJ107XG4gIGxvY2FsU2VsZWN0b3JzOiBSZXR1cm5UeXBlPEY+WydzZWxlY3RvcnMnXTtcbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5zZXR1cCgpO1xuICAgIHRoaXMudHJhaXRzID0gYnVpbGRMb2NhbFRyYWl0cyhcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICBjb25maWcuY29tcG9uZW50TmFtZSxcbiAgICAgIGNvbmZpZy50cmFpdHNGYWN0b3J5XG4gICAgKTtcbiAgICB0aGlzLmxvY2FsQWN0aW9ucyA9IHRoaXMudHJhaXRzLmFjdGlvbnM7XG4gICAgdGhpcy5sb2NhbFNlbGVjdG9ycyA9IHRoaXMudHJhaXRzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGFic3RyYWN0IHNldHVwKCk6IExvY2FsVHJhaXRzQ29uZmlnPEY+O1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudHJhaXRzLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
146
+ }], ctorParameters: () => [] });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXRzLWxvY2FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvbG9jYWwtc3RvcmUvdHJhaXRzLWxvY2FsLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFbEYsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FHOUIsUUFBa0IsRUFBRSxhQUFxQixFQUFFLFlBQWU7SUFDMUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxhQUFhLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBRTlELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixlQUFlLEVBQUUscUJBQXFCLENBQVEsV0FBVyxDQUFDO1FBQzFELGVBQWUsRUFBRSxJQUFJLFdBQVcsR0FBRztLQUNwQyxDQUFrQixDQUFDO0lBRXBCLE1BQU0sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sU0FBUyxHQUNiLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFN0UsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUM1QywyQkFBMkIsRUFDM0IsS0FBSyxDQUNOLENBQUM7SUFDRixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWdCLENBQUM7WUFDdkMsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDakMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLE9BQU87UUFDZCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RDs7Ozs7OztXQU9HO1FBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU87UUFDUCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFVBQVUsQ0FBQyxXQUF3QjtZQUNqQyxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUN0QyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQWFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0REc7QUFFSCxNQUFNLE9BQWdCLGdCQUdwQixTQUFRLFdBQVc7SUFjbkI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhGLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFJbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQzVCLElBQUksQ0FBQyxRQUFRLEVBQ2IsTUFBTSxDQUFDLGFBQWEsRUFDcEIsTUFBTSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBSUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0FqQ21CLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlRW50aXR5RmVhdHVyZUZhY3RvcnksIEVudGl0eUZlYXR1cmVGYWN0b3J5IH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBSZWR1Y2VyTWFuYWdlciwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBFZmZlY3RTb3VyY2VzIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBnZXREZXN0cm95QWN0aW9uTmFtZSwgVHJhaXRFZmZlY3QgfSBmcm9tICcuLi90cmFpdC1lZmZlY3QnO1xuaW1wb3J0IHsgRElTQUJMRV9MT0NBTF9UUkFJVF9FRkZFQ1RTIH0gZnJvbSAnLi9kaXNhYmxlLWxvY2FsLXRyYWl0LWVmZmVjdHMudG9rZW4nO1xuXG5sZXQgaWQgPSAwO1xuZnVuY3Rpb24gdW5pcXVlQ29tcG9uZW50SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0cmFpdEZhY3RvcnkgYW5kIHJlZ2lzdGVycyBlZmZlY3RzIGFuZCByZWR1Y2VycyB3aXRoXG4gKiBhIGdlbmVyYXRlZCBjb21wb25lbnQgaWQsIHJldHVybnMgYnVpbGQgYWN0aW9ucyBhbmQgc2VsZWN0b3JzXG4gKiBhbmQgYSBkZXN0cm95IG1ldGhvZCB0aGF0IHdpbGwgdW5lcmdpc3RlciB0aGUgZWZmZWN0cyBhbmQgcmVkdWNlcnNcbiAqIHdoZW4gY2FsbGVkLCBhbmQgYSBhZGRFZmZlY3Qgd2hpY2ggY2FuIGJlIHVzZSB0byByZWdpc3RlciBleHRyYSBlZmZlY3RzXG4gKlxuICogVXNlZCBpbnNpZGUgVHJhaXRzTG9jYWxTdG9yZSwgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHlvdXJcbiAqIG93biBDb21wb25lbnQgU2VydmljZSB3aXRob3V0IGV4dGVuZGluZyBUcmFpdHNMb2NhbFN0b3JlXG4gKiBAcGFyYW0gaW5qZWN0b3JcbiAqIEBwYXJhbSBjb21wb25lbnROYW1lXG4gKiBAcGFyYW0gdHJhaXRGYWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExvY2FsVHJhaXRzPFxuICBTdGF0ZSxcbiAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuPihpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudE5hbWU6IHN0cmluZywgdHJhaXRGYWN0b3J5OiBGKSB7XG4gIGNvbnN0IHJlZHVjZXJzID0gaW5qZWN0b3IuZ2V0KFJlZHVjZXJNYW5hZ2VyKTtcbiAgY29uc3QgZWZmZWN0cyA9IGluamVjdG9yLmdldChFZmZlY3RTb3VyY2VzKTtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3Rvci5nZXQoU3RvcmUpO1xuICBjb25zdCBjb21wb25lbnRJZCA9IGAke2NvbXBvbmVudE5hbWV9XyR7dW5pcXVlQ29tcG9uZW50SWQoKX1gO1xuXG4gIGNvbnN0IHRyYWl0cyA9IHRyYWl0RmFjdG9yeSh7XG4gICAgZmVhdHVyZVNlbGVjdG9yOiBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8U3RhdGU+KGNvbXBvbmVudElkKSxcbiAgICBhY3Rpb25zR3JvdXBLZXk6IGBbJHtjb21wb25lbnRJZH1dYCxcbiAgfSkgYXMgUmV0dXJuVHlwZTxGPjtcblxuICB0cmFpdHMucmVkdWNlciAmJiByZWR1Y2Vycy5hZGRSZWR1Y2VyKGNvbXBvbmVudElkLCB0cmFpdHMucmVkdWNlcik7XG5cbiAgY29uc3QgcHJvdmlkZXJzID1cbiAgICAodHJhaXRzLmVmZmVjdHMgJiYgWy4uLnRyYWl0cy5lZmZlY3RzLm1hcCgoZSkgPT4gKHsgcHJvdmlkZTogZSB9KSldKSB8fCBbXTtcblxuICBjb25zdCBkaXNhYmxlTG9jYWxUcmFpdHNFZmZlY3RzID0gaW5qZWN0b3IuZ2V0KFxuICAgIERJU0FCTEVfTE9DQUxfVFJBSVRfRUZGRUNUUyxcbiAgICBmYWxzZVxuICApO1xuICBpZiAoIWRpc2FibGVMb2NhbFRyYWl0c0VmZmVjdHMpIHtcbiAgICBjb25zdCBpID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogcHJvdmlkZXJzLFxuICAgICAgcGFyZW50OiBpbmplY3RvcixcbiAgICB9KTtcblxuICAgIHRyYWl0cy5lZmZlY3RzPy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICBjb25zdCBlZmZlY3QgPSBpLmdldChlKSBhcyBUcmFpdEVmZmVjdDtcbiAgICAgIGVmZmVjdC5jb21wb25lbnRJZCA9IGNvbXBvbmVudElkO1xuICAgICAgZWZmZWN0cy5hZGRFZmZlY3RzKGVmZmVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKHsgdHlwZTogZ2V0RGVzdHJveUFjdGlvbk5hbWUoY29tcG9uZW50SWQpIH0pO1xuICAgIC8qKlxuICAgICAqIEEgc2VydmljZSB0aGF0IGV4dGVuZHMgVHJhaXRzTG9jYWxTdG9yZSBhbmQgb3RoZXIgY29tcG9uZW50IHNlcnZpY2UgYXJlIGRlc3Ryb3llZFxuICAgICAqIGJlZm9yZSB0aGUgY29tcG9uZW50IHRoYXQgZGVwZW5kcyBvbiB0aGVtLCB0aGlzIGNhdXNlcyB0aGF0IGFueSBzdWJzY3JpcHRpb25zXG4gICAgICogdG8gc2VsZWN0b3JzIG9mIHRoZSBUcmFpdHNMb2NhbFN0b3JlIGNvdWxkIGZhaWwgYmVjYXVzZSB0aGUgc3RvcmUgc3RhdGUgaXMgcmVtb3ZlZCBiZWZvcmVcbiAgICAgKiB0aGV5IGFyZSB1bnN1YnNjcmliZSBieSB0aGUgb25EZXN0cm95IG9mIHRoZSBjb21wb25lbnQuIEV4ZWN1dGluZyByZWR1Y2Vycy5yZW1vdmVSZWR1Y2VyXG4gICAgICogaW5zaWRlIHNldFRpbWVvdXQgZW5zdXJlcyB0aGUgc3RhdGUgaXMgcmVtb3ZlIGFmdGVyIHRoZSBjb21wb25lbnQgb25EZXN0cm95IHdhcyBjYWxsZWQsXG4gICAgICogYXZvaWRpbmcgdGhlIGJlZm9yZSBtZW50aW9uZWQgcG9zc2libGUgaXNzdWVzLlxuICAgICAqL1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVkdWNlcnMucmVtb3ZlUmVkdWNlcihjb21wb25lbnRJZCkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95LFxuICAgIGFjdGlvbnM6IHRyYWl0cy5hY3Rpb25zLFxuICAgIHNlbGVjdG9yczogdHJhaXRzLnNlbGVjdG9ycyxcbiAgICBhZGRFZmZlY3RzKGxvY2FsRWZmZWN0OiBUcmFpdEVmZmVjdCkge1xuICAgICAgbG9jYWxFZmZlY3QuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICAgIGVmZmVjdHMuYWRkRWZmZWN0cyhsb2NhbEVmZmVjdCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQ+IGV4dGVuZHMgRnVuY3Rpb24ge1xuICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFRyYWl0c0NvbmZpZzxcbiAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuPiB7XG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZztcbiAgdHJhaXRzRmFjdG9yeTogRjtcbn1cblxuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBsb2NhbCB0cmFpdHMgc2VydmljZSwgcmVjZWl2ZXMgYSB0cmFpdCBmYWN0b3J5LCB3aGljaCB3aWxsIGJlXG4gKiBidWlsdCBhbmQgaXRzIHJlZHVjZXJzIGFuZCBlZmZlY3QgcmVnaXN0ZXIgdXNpbmcgYSBkeW5hbWljIGlkIHdoZW4gdGhlIHNlcnZpY2UgaXMgYnVpbHRcbiAqIGFuZCBnZXQgZGVzdHJveWVkIHdoZW4gdGhlIG9uRGVzdHJveSBsaWZlY3ljbGUgbWV0aG9kIG9mIHRoZSBzZXJ2aWNlIGlzIGNhbGxlZCwgaWYgdGhlIHNlcnZpY2VcbiAqIGhhcyBlZmZlY3RzIHRoaXMudHJhaXRzLmFkZEVmZmVjdHModGhpcykgc2hvdWxkIGJlIGNhbGwgaW4gdGhlIGNvbnN0cnVjdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdHlUcmFpdDxQcm9kdWN0PigpLFxuICogKTtcbiAqXG4gKiBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBQcm9kdWN0c0xvY2FsVHJhaXRzIGV4dGVuZHMgVHJhaXRzTG9jYWxTdG9yZTxcbiAqICAgdHlwZW9mIHByb2R1Y3RGZWF0dXJlRmFjdG9yeVxuICogPiB7XG4gKiAgIGxvYWRQcm9kdWN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAqICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gKiAgICAgICBvZlR5cGUodGhpcy5sb2NhbEFjdGlvbnMubG9hZFByb2R1Y3RzKSxcbiAqICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICogICAgICAgICAvL2NhbGwgeW91ciBzZXJ2aWNlIHRvIGdldCB0aGUgcHJvZHVjdHMgZGF0YVxuICogICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFByb2R1Y3RzKCkucGlwZShcbiAqICAgICAgICAgICBtYXAoKHJlcykgPT5cbiAqICAgICAgICAgICAgIHRoaXMubG9jYWxBY3Rpb25zLmxvYWRQcm9kdWN0c1N1Y2Nlc3MoeyBlbnRpdGllczogcmVzLnJlc3VsdExpc3QgfSlcbiAqICAgICAgICAgICApLFxuICogICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodGhpcy5sb2NhbEFjdGlvbnMubG9hZFByb2R1Y3RzRmFpbCgpKSlcbiAqICAgICAgICAgKVxuICogICAgICAgKVxuICogICAgIClcbiAqICAgKTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UpIHtcbiAqICAgICBzdXBlcihpbmplY3Rvcik7XG4gKiAgICAgdGhpcy50cmFpdHMuYWRkRWZmZWN0cyh0aGlzKTsgLy8gSU1QT1JUQU5UISBhZGQgdGhpcyBsaW5lIGlmIHRoZSBzZXJ2aWNlIGhhcyBlZmZlY3RzXG4gKiAgIH1cbiAqXG4gKiAgIHNldHVwKCk6IExvY2FsVHJhaXRzQ29uZmlnPHR5cGVvZiBwcm9kdWN0RmVhdHVyZUZhY3Rvcnk+IHtcbiAqICAgICByZXR1cm4ge1xuICogICAgICAgY29tcG9uZW50TmFtZTogJ1Byb2R1Y3RzUGlja2VyQ29tcG9uZW50JyxcbiAqICAgICAgIHRyYWl0c0ZhY3Rvcnk6IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSxcbiAqICAgICB9O1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gdXNlIGluIGNvbXBvbmVudCBsYXRlclxuICpcbiAqIENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnc29tZS1jb21wb25lbnQnLFxuICogICB0ZW1wbGF0ZTogYDxkaXY+IHNvbWUgY29udGVudDwvZGl2PiBgLFxuICogICBwcm92aWRlcnM6IFtQcm9kdWN0c0xvY2FsVHJhaXRzXSxcbiAqICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIFByb2R1Y3RTZWxlY3REaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSB0cmFpdHM6IFByb2R1Y3RzTG9jYWxUcmFpdHMpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHRoaXMudHJhaXRzLmxvY2FsQWN0aW9ucy5sb2FkUHJvZHVjdHMoKSk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYWl0c0xvY2FsU3RvcmU8XG4gICAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuICA+XG4gIGV4dGVuZHMgVHJhaXRFZmZlY3RcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgdHJhaXRzOiB7XG4gICAgYWN0aW9uczogUmV0dXJuVHlwZTxGPlsnYWN0aW9ucyddO1xuICAgIHNlbGVjdG9yczogUmV0dXJuVHlwZTxGPlsnc2VsZWN0b3JzJ107XG4gICAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgICBhZGRFZmZlY3RzOiAobG9jYWxFZmZlY3Q6IFRyYWl0RWZmZWN0KSA9PiB2b2lkO1xuICB9O1xuXG4gIGxvY2FsQWN0aW9uczogUmV0dXJuVHlwZTxGPlsnYWN0aW9ucyddO1xuICBsb2NhbFNlbGVjdG9yczogUmV0dXJuVHlwZTxGPlsnc2VsZWN0b3JzJ107XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dXAoKTtcbiAgICB0aGlzLnRyYWl0cyA9IGJ1aWxkTG9jYWxUcmFpdHMoXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgY29uZmlnLmNvbXBvbmVudE5hbWUsXG4gICAgICBjb25maWcudHJhaXRzRmFjdG9yeVxuICAgICk7XG4gICAgdGhpcy5sb2NhbEFjdGlvbnMgPSB0aGlzLnRyYWl0cy5hY3Rpb25zO1xuICAgIHRoaXMubG9jYWxTZWxlY3RvcnMgPSB0aGlzLnRyYWl0cy5zZWxlY3RvcnM7XG4gIH1cblxuICBhYnN0cmFjdCBzZXR1cCgpOiBMb2NhbFRyYWl0c0NvbmZpZzxGPjtcblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRyYWl0cy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -33,4 +33,4 @@ export function provideMockLocalTraits({ traitFactory, selectors, }) {
33
33
  },
34
34
  ];
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1tb2NrLWxvY2FsLXRyYWl0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS90ZXN0aW5nL3NyYy9wcm92aWRlLW1vY2stbG9jYWwtdHJhaXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCwyQkFBMkIsR0FDNUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRDs7Ozs7S0FLSztBQUNMLE1BQU0sVUFBVSxzQkFBc0IsQ0FFcEMsRUFDQSxZQUFZLEVBQ1osU0FBUyxHQU1WO0lBQ0MsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDeEQ7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLEdBQUcsRUFBRTtvQkFDZixPQUFPO2dCQUNULENBQUM7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUMzQixTQUFTLENBQUMsZ0JBQWdCLENBQ3hCLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQ3pCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUNqQixDQUNKLENBQUM7aUJBQ0g7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudGl0eUZlYXR1cmVGYWN0b3J5LFxuICBUcmFpdHNMb2NhbFN0b3JlLFxuICBESVNBQkxFX0xPQ0FMX1RSQUlUX0VGRkVDVFMsXG59IGZyb20gJ0BuZ3J4LXRyYWl0cy9jb3JlJztcbmltcG9ydCB7IEluamVjdG9yLCBQcm92aWRlciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWZmZWN0U291cmNlcyB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgTW9ja1N0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUvdGVzdGluZyc7XG5cbi8qXG4gKiBOT1RFOiBwcm92aWRlTW9ja1N0b3JlKHtpbml0aWFsU3RhdGV9KSBpbml0aWFsU3RhdGUgd2lsbCBiZSBpZ25vcmVkIHdpdGggbG9jYWwgdHJhaXRzIHN0b3JlIVxuICogT3ZlcnJpZGUgc2VsZWN0b3JzIGluc3RlYWRcbiAqXG4gKiBZb3Ugc3RpbGwgbmVlZCB0byBwcm92aWRlTW9ja1N0b3JlIGFuZCBwcm92aWRlTW9ja0FjdGlvbnNcbiAqICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU1vY2tMb2NhbFRyYWl0czxcbiAgVCBleHRlbmRzIFRyYWl0c0xvY2FsU3RvcmU8RW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnk+PlxuPih7XG4gIHRyYWl0RmFjdG9yeSxcbiAgc2VsZWN0b3JzLFxufToge1xuICB0cmFpdEZhY3Rvcnk6IFR5cGU8VD47XG4gIHNlbGVjdG9ycz86IHtcbiAgICBba2V5IGluIGtleW9mIFRbJ2xvY2FsU2VsZWN0b3JzJ11dPzogUmV0dXJuVHlwZTxUWydsb2NhbFNlbGVjdG9ycyddW2tleV0+O1xuICB9O1xufSk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogRElTQUJMRV9MT0NBTF9UUkFJVF9FRkZFQ1RTLCB1c2VWYWx1ZTogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVmZmVjdFNvdXJjZXMsXG4gICAgICB1c2VWYWx1ZToge1xuICAgICAgICBhZGRFZmZlY3RzOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IHRyYWl0RmFjdG9yeSxcbiAgICAgIGRlcHM6IFtJbmplY3RvciwgTW9ja1N0b3JlXSxcbiAgICAgIHVzZUZhY3Rvcnk6IChpbmplY3RvcjogSW5qZWN0b3IsIG1vY2tTdG9yZTogTW9ja1N0b3JlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYWl0ID0gbmV3IHRyYWl0RmFjdG9yeShpbmplY3Rvcik7XG4gICAgICAgIGlmIChzZWxlY3RvcnMpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhzZWxlY3RvcnMpLmZvckVhY2goXG4gICAgICAgICAgICAoa2V5KSA9PlxuICAgICAgICAgICAgICB0cmFpdC5sb2NhbFNlbGVjdG9ycz8uW2tleV0gJiZcbiAgICAgICAgICAgICAgbW9ja1N0b3JlLm92ZXJyaWRlU2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgdHJhaXQubG9jYWxTZWxlY3RvcnNba2V5XSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcnM/LltrZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFpdDtcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1tb2NrLWxvY2FsLXRyYWl0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS90ZXN0aW5nL3NyYy9wcm92aWRlLW1vY2stbG9jYWwtdHJhaXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCwyQkFBMkIsR0FDNUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRDs7Ozs7S0FLSztBQUNMLE1BQU0sVUFBVSxzQkFBc0IsQ0FFcEMsRUFDQSxZQUFZLEVBQ1osU0FBUyxHQU1WO0lBQ0MsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDeEQ7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLEdBQUcsRUFBRTtvQkFDZixPQUFPO2dCQUNULENBQUM7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7d0JBQzNCLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDeEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFDekIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ2pCLENBQ0osQ0FBQztnQkFDSixDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbnRpdHlGZWF0dXJlRmFjdG9yeSxcbiAgVHJhaXRzTG9jYWxTdG9yZSxcbiAgRElTQUJMRV9MT0NBTF9UUkFJVF9FRkZFQ1RTLFxufSBmcm9tICdAbmdyeC10cmFpdHMvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RvciwgUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVmZmVjdFNvdXJjZXMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IE1vY2tTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlL3Rlc3RpbmcnO1xuXG4vKlxuICogTk9URTogcHJvdmlkZU1vY2tTdG9yZSh7aW5pdGlhbFN0YXRlfSkgaW5pdGlhbFN0YXRlIHdpbGwgYmUgaWdub3JlZCB3aXRoIGxvY2FsIHRyYWl0cyBzdG9yZSFcbiAqIE92ZXJyaWRlIHNlbGVjdG9ycyBpbnN0ZWFkXG4gKlxuICogWW91IHN0aWxsIG5lZWQgdG8gcHJvdmlkZU1vY2tTdG9yZSBhbmQgcHJvdmlkZU1vY2tBY3Rpb25zXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNb2NrTG9jYWxUcmFpdHM8XG4gIFQgZXh0ZW5kcyBUcmFpdHNMb2NhbFN0b3JlPEVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55Pj5cbj4oe1xuICB0cmFpdEZhY3RvcnksXG4gIHNlbGVjdG9ycyxcbn06IHtcbiAgdHJhaXRGYWN0b3J5OiBUeXBlPFQ+O1xuICBzZWxlY3RvcnM/OiB7XG4gICAgW2tleSBpbiBrZXlvZiBUWydsb2NhbFNlbGVjdG9ycyddXT86IFJldHVyblR5cGU8VFsnbG9jYWxTZWxlY3RvcnMnXVtrZXldPjtcbiAgfTtcbn0pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7IHByb3ZpZGU6IERJU0FCTEVfTE9DQUxfVFJBSVRfRUZGRUNUUywgdXNlVmFsdWU6IHRydWUgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBFZmZlY3RTb3VyY2VzLFxuICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgYWRkRWZmZWN0czogKCkgPT4ge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiB0cmFpdEZhY3RvcnksXG4gICAgICBkZXBzOiBbSW5qZWN0b3IsIE1vY2tTdG9yZV0sXG4gICAgICB1c2VGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yLCBtb2NrU3RvcmU6IE1vY2tTdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFpdCA9IG5ldyB0cmFpdEZhY3RvcnkoaW5qZWN0b3IpO1xuICAgICAgICBpZiAoc2VsZWN0b3JzKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoc2VsZWN0b3JzKS5mb3JFYWNoKFxuICAgICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgICAgdHJhaXQubG9jYWxTZWxlY3RvcnM/LltrZXldICYmXG4gICAgICAgICAgICAgIG1vY2tTdG9yZS5vdmVycmlkZVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIHRyYWl0LmxvY2FsU2VsZWN0b3JzW2tleV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzPy5ba2V5XVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhaXQ7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG4iXX0=
@@ -18,13 +18,13 @@ export class TraitEffect {
18
18
  ? resolvedEffects$.pipe(takeUntil(this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))))
19
19
  : resolvedEffects$;
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect, decorators: [{
25
25
  type: Injectable
26
26
  }] });
27
27
  export function getDestroyActionName(id) {
28
28
  return `[${id}] Destroyed`;
29
29
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXQtZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvdHJhaXQtZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUlwQyxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVVLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxDQUFBLEtBQVUsQ0FBQSxDQUFDLENBQUM7S0FldEM7SUFiQyxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZ0JBQWlDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDckIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUNGO1lBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ3ZCLENBQUM7K0dBbEJVLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs7QUFzQlgsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQVU7SUFDN0MsT0FBTyxJQUFJLEVBQUUsYUFBYSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFjdGlvbnMsXG4gIG9mVHlwZSxcbiAgT25JZGVudGlmeUVmZmVjdHMsXG4gIE9uUnVuRWZmZWN0cyxcbn0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyYWl0RWZmZWN0IGltcGxlbWVudHMgT25JZGVudGlmeUVmZmVjdHMsIE9uUnVuRWZmZWN0cyB7XG4gIHByaXZhdGUgbmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJyc7XG4gIHByb3RlY3RlZCBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJvdGVjdGVkIHN0b3JlID0gaW5qZWN0KFN0b3JlPGFueT4pO1xuXG4gIG5ncnhPbklkZW50aWZ5RWZmZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJZCA/IHRoaXMubmFtZSArIHRoaXMuY29tcG9uZW50SWQgOiAnJztcbiAgfVxuXG4gIG5ncnhPblJ1bkVmZmVjdHMocmVzb2x2ZWRFZmZlY3RzJDogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SWRcbiAgICAgID8gcmVzb2x2ZWRFZmZlY3RzJC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZlR5cGUoZ2V0RGVzdHJveUFjdGlvbk5hbWUodGhpcy5jb21wb25lbnRJZCkpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiByZXNvbHZlZEVmZmVjdHMkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXN0cm95QWN0aW9uTmFtZShpZDogc3RyaW5nKSB7XG4gIHJldHVybiBgWyR7aWR9XSBEZXN0cm95ZWRgO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXQtZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvdHJhaXQtZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUlwQyxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVVLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxDQUFBLEtBQVUsQ0FBQSxDQUFDLENBQUM7S0FldEM7SUFiQyxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZ0JBQWlDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDckIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUNGO1lBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ3ZCLENBQUM7OEdBbEJVLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTs7QUFzQlgsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQVU7SUFDN0MsT0FBTyxJQUFJLEVBQUUsYUFBYSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFjdGlvbnMsXG4gIG9mVHlwZSxcbiAgT25JZGVudGlmeUVmZmVjdHMsXG4gIE9uUnVuRWZmZWN0cyxcbn0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyYWl0RWZmZWN0IGltcGxlbWVudHMgT25JZGVudGlmeUVmZmVjdHMsIE9uUnVuRWZmZWN0cyB7XG4gIHByaXZhdGUgbmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJyc7XG4gIHByb3RlY3RlZCBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJvdGVjdGVkIHN0b3JlID0gaW5qZWN0KFN0b3JlPGFueT4pO1xuXG4gIG5ncnhPbklkZW50aWZ5RWZmZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJZCA/IHRoaXMubmFtZSArIHRoaXMuY29tcG9uZW50SWQgOiAnJztcbiAgfVxuXG4gIG5ncnhPblJ1bkVmZmVjdHMocmVzb2x2ZWRFZmZlY3RzJDogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SWRcbiAgICAgID8gcmVzb2x2ZWRFZmZlY3RzJC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZlR5cGUoZ2V0RGVzdHJveUFjdGlvbk5hbWUodGhpcy5jb21wb25lbnRJZCkpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiByZXNvbHZlZEVmZmVjdHMkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXN0cm95QWN0aW9uTmFtZShpZDogc3RyaW5nKSB7XG4gIHJldHVybiBgWyR7aWR9XSBEZXN0cm95ZWRgO1xufVxuIl19
package/esm2022/util.mjs CHANGED
@@ -67,4 +67,4 @@ export function joinReducers(firstReducer, secondReducer) {
67
67
  return secondReducer(sourceState, action);
68
68
  };
69
69
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsU0FBYyxFQUNkLFVBQXNEO0lBRXRELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUF5QjtJQUM3QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFnQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxhQUErRCxFQUMvRCxRQUFXLEVBQ1gsZUFBdUU7SUFFdkUsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0wsR0FBRyxXQUFXO1lBQ2QsQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUMzRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGFBQStELEVBQy9ELGtCQUVDO0lBRUQsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixFQUFFO1lBQ3pDLFFBQVEsQ0FBQyxRQUFhLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FDcEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUNsQixNQUFNLENBQ1AsQ0FBQztTQUNIO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixZQUE4RCxFQUM5RCxhQUEyRDtJQUUzRCxPQUFPLFNBQVMsT0FBTyxDQUFDLEtBQVksRUFBRSxNQUF1QjtRQUMzRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sYUFBYSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVkdWNlclR5cGVzIH0gZnJvbSAnQG5ncngvc3RvcmUvc3JjL3JlZHVjZXJfY3JlYXRvcic7XG5pbXBvcnQgeyBBY3Rpb25DcmVhdG9yIH0gZnJvbSAnQG5ncngvc3RvcmUvc3JjL21vZGVscyc7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0SWY8U3RhdGU+KFxuICBjb25kaXRpb246IGFueSxcbiAgZ2V0RWxlbWVudDogKCkgPT4gUmVkdWNlclR5cGVzPFN0YXRlLCBBY3Rpb25DcmVhdG9yW10+XG4pOiBSZWR1Y2VyVHlwZXM8U3RhdGUsIEFjdGlvbkNyZWF0b3JbXT5bXSB7XG4gIHJldHVybiBjb25kaXRpb24gPyBbZ2V0RWxlbWVudCgpXSA6IFtdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTWFwKGE6IEFycmF5PHN0cmluZyB8IG51bWJlcj4pIHtcbiAgcmV0dXJuIGEucmVkdWNlKChhY3VtOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSwgdmFsdWUpID0+IHtcbiAgICBhY3VtW3ZhbHVlXSA9IHRydWU7XG4gICAgcmV0dXJuIGFjdW07XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvU2VudGVuY2UodGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHRleHQucmVwbGFjZSgvKFtBLVpdKS9nLCAnICQxJyk7XG4gIHJldHVybiByZXN1bHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN1bHQuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5UmVkdWNlciBpbiBzb3VyY2VSZWR1Y2VyIGluIGEgcHJvcGVydHkgb2YgdGhlIHNvdXJjZSBzdGF0ZSxcbiAqIEBwYXJhbSBzb3VyY2VSZWR1Y2VyXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eVJlZHVjZXJcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IG5ld1JlZHVjZXIgPSBzZXRQcm9wZXJ0eVJlZHVjZXIocHJvZHVjdHNSZWR1Y2VyLCAnc2VsZWN0ZWRQcm9kdWN0Jywgc2VsZWN0ZWRQcm9kdWN0UmVkdWNlcilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5UmVkdWNlcjxTdGF0ZSwgUCBleHRlbmRzIGtleW9mIFN0YXRlPihcbiAgc291cmNlUmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlLFxuICBwcm9wZXJ0eTogUCxcbiAgcHJvcGVydHlSZWR1Y2VyOiAoc3RhdGU6IFN0YXRlW1BdLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGVbUF1cbik6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSB7XG4gIHJldHVybiBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pOiBTdGF0ZSB7XG4gICAgY29uc3Qgc291cmNlU3RhdGUgPSBzb3VyY2VSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zb3VyY2VTdGF0ZSxcbiAgICAgIFtwcm9wZXJ0eV06IHByb3BlcnR5UmVkdWNlcihzb3VyY2VTdGF0ZVtwcm9wZXJ0eV0sIGFjdGlvbiksXG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXQgcHJvcGVydHlSZWR1Y2VycyBpbiBzb3VyY2VSZWR1Y2VyIGVhY2ggaW4gYSBwcm9wZXJ0eSBvZiB0aGUgc291cmNlIHN0YXRlLFxuICogQHBhcmFtIHNvdXJjZVJlZHVjZXJcbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BlcnR5UmVkdWNlclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgbmV3UmVkdWNlciA9IHNldFByb3BlcnR5UmVkdWNlcihwcm9kdWN0c1JlZHVjZXIsXG4gKiB7XG4gKiAgICBzZWxlY3RlZFByb2R1Y3Q6IHNlbGVjdGVkUHJvZHVjdFJlZHVjZXJcbiAqICAgIGZhdm9yaXRlUHJvZHVjdDogZmF2b3JpdGVQcm9kdWN0UmVkdWNlclxuICogfSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnRpZXNSZWR1Y2VyPFN0YXRlLCBQIGV4dGVuZHMga2V5b2YgU3RhdGU+KFxuICBzb3VyY2VSZWR1Y2VyOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGUsXG4gIHByb3BlcnRpZXNSZWR1Y2Vyczoge1xuICAgIFtrZXkgaW4gUF06IChzdGF0ZTogU3RhdGVbUF0sIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZVtQXTtcbiAgfVxuKTogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55Pik6IFN0YXRlIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc291cmNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB9O1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydGllc1JlZHVjZXJzKSB7XG4gICAgICBuZXdTdGF0ZVtwcm9wZXJ0eSBhcyBQXSA9IHByb3BlcnRpZXNSZWR1Y2Vyc1twcm9wZXJ0eV0oXG4gICAgICAgIG5ld1N0YXRlW3Byb3BlcnR5XSxcbiAgICAgICAgYWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG59XG5cbi8qKlxuICogam9pbnMgdHdvIHJlZHVjZXJzIHNvIHRoZSB3b3JrIGluIHRoZSBzYW1lIHN0YXRlXG4gKiBAcGFyYW0gZmlyc3RSZWR1Y2VyXG4gKiBAcGFyYW0gc2Vjb25kUmVkdWNlclxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblJlZHVjZXJzPFN0YXRlPihcbiAgZmlyc3RSZWR1Y2VyOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGUsXG4gIHNlY29uZFJlZHVjZXI6IChzdGF0ZTogYW55LCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gYW55XG4pOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGUge1xuICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KTogU3RhdGUge1xuICAgIGNvbnN0IHNvdXJjZVN0YXRlID0gZmlyc3RSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBzZWNvbmRSZWR1Y2VyKHNvdXJjZVN0YXRlLCBhY3Rpb24pO1xuICB9O1xufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsU0FBYyxFQUNkLFVBQXNEO0lBRXRELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUF5QjtJQUM3QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFnQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxhQUErRCxFQUMvRCxRQUFXLEVBQ1gsZUFBdUU7SUFFdkUsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0wsR0FBRyxXQUFXO1lBQ2QsQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUMzRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGFBQStELEVBQy9ELGtCQUVDO0lBRUQsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDMUMsUUFBUSxDQUFDLFFBQWEsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUNwRCxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQ2xCLE1BQU0sQ0FDUCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsWUFBOEQsRUFDOUQsYUFBMkQ7SUFFM0QsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxPQUFPLGFBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZHVjZXJUeXBlcyB9IGZyb20gJ0BuZ3J4L3N0b3JlL3NyYy9yZWR1Y2VyX2NyZWF0b3InO1xuaW1wb3J0IHsgQWN0aW9uQ3JlYXRvciB9IGZyb20gJ0BuZ3J4L3N0b3JlL3NyYy9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydElmPFN0YXRlPihcbiAgY29uZGl0aW9uOiBhbnksXG4gIGdldEVsZW1lbnQ6ICgpID0+IFJlZHVjZXJUeXBlczxTdGF0ZSwgQWN0aW9uQ3JlYXRvcltdPlxuKTogUmVkdWNlclR5cGVzPFN0YXRlLCBBY3Rpb25DcmVhdG9yW10+W10ge1xuICByZXR1cm4gY29uZGl0aW9uID8gW2dldEVsZW1lbnQoKV0gOiBbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b01hcChhOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSB7XG4gIHJldHVybiBhLnJlZHVjZSgoYWN1bTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0sIHZhbHVlKSA9PiB7XG4gICAgYWN1bVt2YWx1ZV0gPSB0cnVlO1xuICAgIHJldHVybiBhY3VtO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKG5hbWU6IHN0cmluZykge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1NlbnRlbmNlKHRleHQ6IHN0cmluZykge1xuICBjb25zdCByZXN1bHQgPSB0ZXh0LnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpO1xuICByZXR1cm4gcmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFNldCBwcm9wZXJ0eVJlZHVjZXIgaW4gc291cmNlUmVkdWNlciBpbiBhIHByb3BlcnR5IG9mIHRoZSBzb3VyY2Ugc3RhdGUsXG4gKiBAcGFyYW0gc291cmNlUmVkdWNlclxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlSZWR1Y2VyXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBuZXdSZWR1Y2VyID0gc2V0UHJvcGVydHlSZWR1Y2VyKHByb2R1Y3RzUmVkdWNlciwgJ3NlbGVjdGVkUHJvZHVjdCcsIHNlbGVjdGVkUHJvZHVjdFJlZHVjZXIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eVJlZHVjZXI8U3RhdGUsIFAgZXh0ZW5kcyBrZXlvZiBTdGF0ZT4oXG4gIHNvdXJjZVJlZHVjZXI6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSxcbiAgcHJvcGVydHk6IFAsXG4gIHByb3BlcnR5UmVkdWNlcjogKHN0YXRlOiBTdGF0ZVtQXSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlW1BdXG4pOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGUge1xuICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KTogU3RhdGUge1xuICAgIGNvbnN0IHNvdXJjZVN0YXRlID0gc291cmNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc291cmNlU3RhdGUsXG4gICAgICBbcHJvcGVydHldOiBwcm9wZXJ0eVJlZHVjZXIoc291cmNlU3RhdGVbcHJvcGVydHldLCBhY3Rpb24pLFxuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5UmVkdWNlcnMgaW4gc291cmNlUmVkdWNlciBlYWNoIGluIGEgcHJvcGVydHkgb2YgdGhlIHNvdXJjZSBzdGF0ZSxcbiAqIEBwYXJhbSBzb3VyY2VSZWR1Y2VyXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eVJlZHVjZXJcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IG5ld1JlZHVjZXIgPSBzZXRQcm9wZXJ0eVJlZHVjZXIocHJvZHVjdHNSZWR1Y2VyLFxuICoge1xuICogICAgc2VsZWN0ZWRQcm9kdWN0OiBzZWxlY3RlZFByb2R1Y3RSZWR1Y2VyXG4gKiAgICBmYXZvcml0ZVByb2R1Y3Q6IGZhdm9yaXRlUHJvZHVjdFJlZHVjZXJcbiAqIH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0aWVzUmVkdWNlcjxTdGF0ZSwgUCBleHRlbmRzIGtleW9mIFN0YXRlPihcbiAgc291cmNlUmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlLFxuICBwcm9wZXJ0aWVzUmVkdWNlcnM6IHtcbiAgICBba2V5IGluIFBdOiAoc3RhdGU6IFN0YXRlW1BdLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGVbUF07XG4gIH1cbik6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSB7XG4gIHJldHVybiBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pOiBTdGF0ZSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnNvdXJjZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikgfTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BlcnRpZXNSZWR1Y2Vycykge1xuICAgICAgbmV3U3RhdGVbcHJvcGVydHkgYXMgUF0gPSBwcm9wZXJ0aWVzUmVkdWNlcnNbcHJvcGVydHldKFxuICAgICAgICBuZXdTdGF0ZVtwcm9wZXJ0eV0sXG4gICAgICAgIGFjdGlvblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9O1xufVxuXG4vKipcbiAqIGpvaW5zIHR3byByZWR1Y2VycyBzbyB0aGUgd29yayBpbiB0aGUgc2FtZSBzdGF0ZVxuICogQHBhcmFtIGZpcnN0UmVkdWNlclxuICogQHBhcmFtIHNlY29uZFJlZHVjZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5SZWR1Y2VyczxTdGF0ZT4oXG4gIGZpcnN0UmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlLFxuICBzZWNvbmRSZWR1Y2VyOiAoc3RhdGU6IGFueSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IGFueVxuKTogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55Pik6IFN0YXRlIHtcbiAgICBjb25zdCBzb3VyY2VTdGF0ZSA9IGZpcnN0UmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICByZXR1cm4gc2Vjb25kUmVkdWNlcihzb3VyY2VTdGF0ZSwgYWN0aW9uKTtcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"ngrx-traits-core-testing.mjs","sources":["../../../../../libs/ngrx-traits/core/testing/src/provide-mock-local-traits.ts","../../../../../libs/ngrx-traits/core/testing/src/ngrx-traits-core-testing.ts"],"sourcesContent":["import {\n EntityFeatureFactory,\n TraitsLocalStore,\n DISABLE_LOCAL_TRAIT_EFFECTS,\n} from '@ngrx-traits/core';\nimport { Injector, Provider, Type } from '@angular/core';\nimport { EffectSources } from '@ngrx/effects';\nimport { MockStore } from '@ngrx/store/testing';\n\n/*\n * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!\n * Override selectors instead\n *\n * You still need to provideMockStore and provideMockActions\n * */\nexport function provideMockLocalTraits<\n T extends TraitsLocalStore<EntityFeatureFactory<any, any>>\n>({\n traitFactory,\n selectors,\n}: {\n traitFactory: Type<T>;\n selectors?: {\n [key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;\n };\n}): Provider[] {\n return [\n { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },\n {\n provide: EffectSources,\n useValue: {\n addEffects: () => {\n return;\n },\n },\n },\n {\n provide: traitFactory,\n deps: [Injector, MockStore],\n useFactory: (injector: Injector, mockStore: MockStore) => {\n const trait = new traitFactory(injector);\n if (selectors) {\n Object.keys(selectors).forEach(\n (key) =>\n trait.localSelectors?.[key] &&\n mockStore.overrideSelector(\n trait.localSelectors[key],\n selectors?.[key]\n )\n );\n }\n return trait;\n },\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AASA;;;;;AAKK;SACW,sBAAsB,CAEpC,EACA,YAAY,EACZ,SAAS,GAMV,EAAA;IACC,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;AACxD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAK;oBACf,OAAO;iBACR;AACF,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3B,YAAA,UAAU,EAAE,CAAC,QAAkB,EAAE,SAAoB,KAAI;AACvD,gBAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,gBAAA,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAC5B,CAAC,GAAG,KACF,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;AAC3B,wBAAA,SAAS,CAAC,gBAAgB,CACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EACzB,SAAS,GAAG,GAAG,CAAC,CACjB,CACJ,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC;aACd;AACF,SAAA;KACF,CAAC;AACJ;;ACvDA;;AAEG;;;;"}
1
+ {"version":3,"file":"ngrx-traits-core-testing.mjs","sources":["../../../../../libs/ngrx-traits/core/testing/src/provide-mock-local-traits.ts","../../../../../libs/ngrx-traits/core/testing/src/ngrx-traits-core-testing.ts"],"sourcesContent":["import {\n EntityFeatureFactory,\n TraitsLocalStore,\n DISABLE_LOCAL_TRAIT_EFFECTS,\n} from '@ngrx-traits/core';\nimport { Injector, Provider, Type } from '@angular/core';\nimport { EffectSources } from '@ngrx/effects';\nimport { MockStore } from '@ngrx/store/testing';\n\n/*\n * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!\n * Override selectors instead\n *\n * You still need to provideMockStore and provideMockActions\n * */\nexport function provideMockLocalTraits<\n T extends TraitsLocalStore<EntityFeatureFactory<any, any>>\n>({\n traitFactory,\n selectors,\n}: {\n traitFactory: Type<T>;\n selectors?: {\n [key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;\n };\n}): Provider[] {\n return [\n { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },\n {\n provide: EffectSources,\n useValue: {\n addEffects: () => {\n return;\n },\n },\n },\n {\n provide: traitFactory,\n deps: [Injector, MockStore],\n useFactory: (injector: Injector, mockStore: MockStore) => {\n const trait = new traitFactory(injector);\n if (selectors) {\n Object.keys(selectors).forEach(\n (key) =>\n trait.localSelectors?.[key] &&\n mockStore.overrideSelector(\n trait.localSelectors[key],\n selectors?.[key]\n )\n );\n }\n return trait;\n },\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AASA;;;;;AAKK;SACW,sBAAsB,CAEpC,EACA,YAAY,EACZ,SAAS,GAMV,EAAA;IACC,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;AACxD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAK;oBACf,OAAO;iBACR;AACF,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3B,YAAA,UAAU,EAAE,CAAC,QAAkB,EAAE,SAAoB,KAAI;AACvD,gBAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAC5B,CAAC,GAAG,KACF,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;AAC3B,wBAAA,SAAS,CAAC,gBAAgB,CACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EACzB,SAAS,GAAG,GAAG,CAAC,CACjB,CACJ,CAAC;iBACH;AACD,gBAAA,OAAO,KAAK,CAAC;aACd;AACF,SAAA;KACF,CAAC;AACJ;;ACvDA;;AAEG;;;;"}
@@ -517,10 +517,10 @@ class TraitEffect {
517
517
  ? resolvedEffects$.pipe(takeUntil(this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))))
518
518
  : resolvedEffects$;
519
519
  }
520
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
521
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect }); }
520
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
521
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect }); }
522
522
  }
523
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitEffect, decorators: [{
523
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitEffect, decorators: [{
524
524
  type: Injectable
525
525
  }] });
526
526
  function getDestroyActionName(id) {
@@ -667,12 +667,12 @@ class TraitsLocalStore extends TraitEffect {
667
667
  ngOnDestroy() {
668
668
  this.traits.destroy();
669
669
  }
670
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
671
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore }); }
670
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
671
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore }); }
672
672
  }
673
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TraitsLocalStore, decorators: [{
673
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TraitsLocalStore, decorators: [{
674
674
  type: Injectable
675
- }], ctorParameters: function () { return []; } });
675
+ }], ctorParameters: () => [] });
676
676
 
677
677
  function hash(key) {
678
678
  return JSON.stringify(key, (_, val) => typeof val == 'object'
@@ -915,11 +915,11 @@ function invalidaSubKeys(state) {
915
915
  }
916
916
 
917
917
  class CacheModule {
918
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
919
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }
920
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }
918
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
919
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }
920
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }
921
921
  }
922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CacheModule, decorators: [{
922
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CacheModule, decorators: [{
923
923
  type: NgModule,
924
924
  args: [{
925
925
  imports: [StoreModule.forFeature('cache', cacheReducer)],
@@ -1 +1 @@
1
- {"version":3,"file":"ngrx-traits-core.mjs","sources":["../../../../../libs/ngrx-traits/core/src/lib/util.ts","../../../../../libs/ngrx-traits/core/src/lib/create-entity-feature.ts","../../../../../libs/ngrx-traits/core/src/lib/trait-effect.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/disable-local-trait-effects.token.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/traits-local-store.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.models.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.selectors.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.actions.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.service.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.reducer.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.module.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/index.ts","../../../../../libs/ngrx-traits/core/src/lib/ngrx-traits-core.ts"],"sourcesContent":["import { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } from '@ngrx/store';\n\nexport function insertIf<State>(\n condition: any,\n getElement: () => ReducerTypes<State, ActionCreator[]>\n): ReducerTypes<State, ActionCreator[]>[] {\n return condition ? [getElement()] : [];\n}\nexport function toMap(a: Array<string | number>) {\n return a.reduce((acum: { [key: string]: boolean }, value) => {\n acum[value] = true;\n return acum;\n }, {});\n}\n\nexport function capitalize(name: string) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function camelCaseToSentence(text: string) {\n const result = text.replace(/([A-Z])/g, ' $1');\n return result.charAt(0).toUpperCase() + result.slice(1);\n}\n\n/**\n * Set propertyReducer in sourceReducer in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer, 'selectedProduct', selectedProductReducer)\n */\nexport function setPropertyReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n property: P,\n propertyReducer: (state: State[P], action: ActionType<any>) => State[P]\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = sourceReducer(state, action);\n return {\n ...sourceState,\n [property]: propertyReducer(sourceState[property], action),\n };\n };\n}\n\n/**\n * Set propertyReducers in sourceReducer each in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer,\n * {\n * selectedProduct: selectedProductReducer\n * favoriteProduct: favoriteProductReducer\n * })\n */\nexport function setPropertiesReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n propertiesReducers: {\n [key in P]: (state: State[P], action: ActionType<any>) => State[P];\n }\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const newState = { ...sourceReducer(state, action) };\n for (const property in propertiesReducers) {\n newState[property as P] = propertiesReducers[property](\n newState[property],\n action\n );\n }\n return newState;\n };\n}\n\n/**\n * joins two reducers so the work in the same state\n * @param firstReducer\n * @param secondReducer\n */\nexport function joinReducers<State>(\n firstReducer: (state: State, action: ActionType<any>) => State,\n secondReducer: (state: any, action: ActionType<any>) => any\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = firstReducer(state, action);\n return secondReducer(sourceState, action);\n };\n}\n","import {\n Config,\n ExtractActionsType,\n ExtractSelectorsType,\n ExtractStateType,\n EntityFeatureFactory,\n FeatureSelectors,\n KeyedConfig,\n TraitActions,\n TraitFactory,\n TraitSelectors,\n TraitStateMutators,\n UnionToIntersection,\n TraitActionsFactory,\n TraitSelectorsFactory,\n TraitInitialStateFactory,\n TraitStateMutatorsFactory,\n TraitReducerFactory,\n TraitEffectsFactory,\n AllTraitConfigs,\n} from './model';\nimport {\n Action,\n ActionType,\n combineReducers,\n createFeatureSelector,\n createReducer,\n createSelector,\n MemoizedSelector,\n} from '@ngrx/store';\nimport { TraitEffect } from './trait-effect';\nimport { Type } from './local-store';\nimport { capitalize, setPropertiesReducer } from './util';\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n {\n entityName,\n entitiesName,\n }: { entityName: EntityName; entitiesName?: EntitiesName },\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects.\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n *\n * productsFeature.actions.loadProducts();\n */\nexport function createEntityFeatureFactory<F extends readonly TraitFactory[]>(\n ...traits: F\n): EntityFeatureFactory<\n 'Entity',\n 'Entities',\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n namesOrFactory:\n | { entityName: EntityName; entitiesName?: EntitiesName }\n | TraitFactory,\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n> {\n return ((config: Config<any, any>) => {\n const { entityName, entitiesName } =\n 'entityName' in namesOrFactory\n ? (namesOrFactory as {\n entityName: EntityName;\n entitiesName?: EntitiesName;\n })\n : { entityName: 'Entity', entitiesName: 'Entities' };\n\n const singular = capitalize(entityName);\n const plural = entitiesName\n ? capitalize(entitiesName)\n : capitalize(entityName + 's');\n\n const sortedTraits = sortTraits(\n 'entityName' in namesOrFactory ? [...traits] : [namesOrFactory, ...traits]\n );\n\n const allConfigs = buildAllConfigs(sortedTraits);\n\n const allActions = buildAllActions(\n sortedTraits,\n config.actionsGroupKey,\n singular,\n plural,\n allConfigs\n );\n\n const allSelectors = buildAllSelectors(sortedTraits, allConfigs);\n\n const allMutators = buildAllMutators(\n sortedTraits,\n allSelectors,\n allConfigs\n );\n\n const initialState = buildInitialState(sortedTraits, allConfigs);\n\n const reducer = buildReducer(\n sortedTraits,\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs\n );\n\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<ExtractStateType<F>>(config.featureSelector)\n : config.featureSelector;\n\n const allFeatureSelectors =\n allSelectors && getSelectorsForFeature(featureSelector, allSelectors);\n\n const allEffects = buildAllEffects(\n sortedTraits,\n allActions,\n allFeatureSelectors,\n allConfigs\n );\n\n return {\n actions: entityName\n ? renameProps(allActions, singular, plural)\n : allActions,\n selectors: entityName\n ? renameProps(allFeatureSelectors, singular, plural)\n : allSelectors,\n initialState,\n reducer: reducer ?? createReducer(initialState),\n effects: allEffects,\n };\n }) as EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n >;\n}\n\nfunction renameProps(target: any, entityName: string, entitiesName: string) {\n const result = {} as any;\n for (const [key, value] of Object.entries(target)) {\n const newKey = key\n .replace('Entities', entitiesName)\n .replace('Entity', entityName);\n result[newKey] = value;\n }\n return result;\n}\n\nfunction sortTraits(\n traits: TraitFactory<any, any, any, any>[]\n): TraitFactory<any, any, any, any>[] {\n const sortedTraits: TraitFactory<any, any, any, any>[] = [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n if (!trait.depends?.length) {\n sortedTraits.push(trait);\n continue;\n }\n if (trait.depends.length > 1)\n for (const d of trait.depends) {\n const isTraitPresent = traits.some((tr) => tr.key === d);\n if (isTraitPresent) {\n trait.depends = [d];\n break;\n }\n }\n if (trait.depends.length > 1)\n throw Error('could not find dependencies ' + trait.depends.join(' '));\n const isDependencyAlreadyAdded = sortedTraits.some(\n (tr) => tr.key === trait?.depends?.[0]\n );\n\n if (isDependencyAlreadyAdded) sortedTraits.push(trait);\n else {\n // move trait to the end\n delete traits[i];\n traits.push(trait);\n }\n }\n return sortedTraits;\n}\n\nfunction buildAllConfigs(sortedTraits: TraitFactory<any, any, any, any>[]) {\n return sortedTraits.reduce((acc: KeyedConfig<string, any>, factory) => {\n acc[factory.key] = factory.config;\n return acc;\n }, {});\n}\n\nfunction buildAllActions(\n sortedTraits: TraitFactory<any, any, any, any>[],\n actionsGroupKey: string,\n entityName: string,\n entitiesName: string,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitActions, factory) => {\n let result =\n factory?.actions?.({\n actionsGroupKey: actionsGroupKey,\n entityName,\n entitiesName,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllSelectors(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitSelectors<any>, factory) => {\n let result =\n factory?.selectors?.({\n previousSelectors: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllMutators(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return (\n sortedTraits.reduce(\n (previousResult: TraitStateMutators<any> | undefined, factory) => {\n let result =\n factory?.mutators?.({\n allSelectors: allSelectors,\n previousMutators: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n },\n {}\n ) || {}\n );\n}\n\nfunction buildInitialState(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: any, factory) => {\n const result =\n factory?.initialState?.({\n previousInitialState: previousResult,\n allConfigs,\n }) ??\n previousResult ??\n {};\n return result;\n }, {});\n}\n\nfunction buildReducer(\n sortedTraits: TraitFactory<any, any, any, any>[],\n initialState: any,\n allActions: TraitActions,\n allSelectors: TraitSelectors<any>,\n allMutators: TraitStateMutators<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (\n previousResult: ((state: any, action: Action) => any) | undefined,\n factory\n ) => {\n const result = factory?.reducer?.({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n });\n return result && previousResult\n ? (state = initialState, action) => {\n const aState = previousResult(state, action);\n return result(aState, action);\n }\n : result ?? previousResult;\n },\n undefined\n );\n}\n\nfunction buildAllEffects(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allActions: TraitActions,\n allFeatureSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (previousResult: Type<TraitEffect>[] | undefined, factory) => {\n let result =\n factory?.effects?.({\n allActions,\n allSelectors: allFeatureSelectors,\n allConfigs,\n }) ?? [];\n result = previousResult ? [...previousResult, ...result] : result;\n return result;\n },\n []\n );\n}\n\nfunction getSelectorsForFeature<\n State,\n S extends TraitSelectors<State>,\n // eslint-disable-next-line @typescript-eslint/ban-types\n F extends MemoizedSelector<object, any>\n>(featureSelect: F, selectors: S): FeatureSelectors<State, S> {\n const ss: { [key in keyof S]?: any } = {};\n for (const prop in selectors) {\n ss[prop] = createSelector(featureSelect as any, selectors[prop] as any);\n }\n return ss as FeatureSelectors<State, S>;\n}\n\n/**\n * Combine a map entityFeatureFactories into one,\n * grouping the actions and selectors by the key of the respective entityFeatureFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productCombinedFactory = combineEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const combinedFeature = productCombinedFactory({\n * actionsGroupKey: '[Combined]',\n * featureSelector: 'combined',\n * });\n *\n * combinedFeature.actions.client.loadClients();\n * combinedFeature.actions.product.loadProducts();\n */\nexport function combineEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const actions: any = {};\n const selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Mix a map entityFeatureFactories into one, different from combine the actions and selectors a mix, not group by key like in combine, the keys are still use\n * internal in the reducers and selector to separate the state\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productMixedFactory = mixEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const mixedFeature = productMixedFactory({\n * actionsGroupKey: '[Mixed]',\n * featureSelector: 'mixed',\n * });\n * mixedFeature.actions.loadClients();\n * mixedFeature.actions.loadProducts();\n *\n */\nexport function mixEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends TraitActions &\n UnionToIntersection<ExtractActionsType<ReturnType<T[K]>>>,\n S extends TraitSelectors<any> &\n UnionToIntersection<\n FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[K]>>>\n >,\n R extends EntityFeatureFactory<any, any, State, A, S>\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n let actions: any = {};\n let selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions = { ...actions, ...featureTraits.actions };\n selectors = { ...selectors, ...featureTraits.selectors };\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Combines targetTraitFactory with the traitFactoriesMap using the keys as props for the targetTraitFactory state,\n * and grouping the combined actions by key\n * @param targetTraitFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productAddEntityPropertiesFactory = addEntityFeaturesProperties(\n * productFeatureFactory,\n * {\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * }\n * );\n *\n * const combinedFeature = productAddEntityPropertiesFactory({\n * actionsGroupKey: '[addEntityFeatures]',\n * featureSelector: 'addEntityFeatures',\n * });\n *\n * combinedFeature.actions.loadProducts();\n * combinedFeature.actions.clients.loadClients();\n * combinedFeature.actions.productOrders.loadProductOrders();\n */\nexport function addEntityFeaturesProperties<\n F extends EntityFeatureFactory<any, any>,\n T extends { [key: string]: EntityFeatureFactory<any, any, any, any, any> },\n K extends keyof T,\n State extends ExtractStateType<ReturnType<F>> & {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> & {\n [P in K]: ExtractActionsType<ReturnType<T[P]>>;\n },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> & {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(targetTraitFactory: F, traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const targetFeatureTraits = targetTraitFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: featureSelector,\n });\n const actions: any = { ...targetFeatureTraits.actions };\n const selectors: any = { ...targetFeatureTraits.selectors };\n const reducers: any = {};\n let effects: Type<any>[] = [...targetFeatureTraits.effects];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: setPropertiesReducer(targetFeatureTraits.reducer, reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Helper function to create an implementation a TraitFactory\n * @param f TraitFactory implementation\n */\nexport function createTraitFactory<\n State = {},\n A extends TraitActions = {},\n S extends TraitSelectors<State> = {},\n M extends TraitStateMutators<State> = {},\n KEY extends string = string,\n C = unknown,\n KC extends AllTraitConfigs = KeyedConfig<KEY, C>\n>(f: {\n key: KEY;\n config?: C;\n depends?: string[];\n actions?: TraitActionsFactory<A, KC>;\n selectors?: TraitSelectorsFactory<State, S, KC>;\n initialState?: TraitInitialStateFactory<State, KC>;\n mutators?: TraitStateMutatorsFactory<State, M, KC>;\n reducer?: TraitReducerFactory<State, A, S, M, KC>;\n effects?: TraitEffectsFactory<State, A, S, KC>;\n}): TraitFactory<State, A, S, M, KEY, C, KC> {\n return f as TraitFactory<State, A, S, M, KEY, C, KC>;\n}\n\n/**\n * Helper function to combine selectors in components as map\n *\n * @example\n *\n * view = combineSelectors({\n * products: ProductSelectors.selectProductsCurrentPage,\n * isLoading: ProductSelectors.isLoadingProductsCurrentPage,\n * selectedProduct: ProductSelectors.selectProductSelected,\n * isLoadingCheckout: ProductSelectors.isLoadingCheckout,\n * selectedSort: ProductSelectors.selectProductsSort,\n * filters: ProductSelectors.selectProductsFilter,\n * });\n * @param t\n */\nexport function combineSelectors<\n T extends { [k: string]: MemoizedSelector<any, any> }\n>(t: T): MemoizedSelector<any, { [j in keyof T]: ReturnType<T[j]> }> {\n const selectors = Object.values(t);\n const keys = Object.keys(t);\n const projector = (...args: any[]) =>\n keys.reduce((acc, key, index) => {\n acc[key] = args[index];\n return acc;\n }, {} as any);\n return (createSelector as any).apply(null, [...selectors, projector]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n Actions,\n ofType,\n OnIdentifyEffects,\n OnRunEffects,\n} from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class TraitEffect implements OnIdentifyEffects, OnRunEffects {\n private name = this.constructor.name;\n public componentId = '';\n protected actions$ = inject(Actions);\n protected store = inject(Store<any>);\n\n ngrxOnIdentifyEffects() {\n return this.componentId ? this.name + this.componentId : '';\n }\n\n ngrxOnRunEffects(resolvedEffects$: Observable<any>) {\n return this.componentId\n ? resolvedEffects$.pipe(\n takeUntil(\n this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))\n )\n )\n : resolvedEffects$;\n }\n}\n\nexport function getDestroyActionName(id: string) {\n return `[${id}] Destroyed`;\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * @ignore\n * @internal\n */\nexport const DISABLE_LOCAL_TRAIT_EFFECTS = new InjectionToken<boolean>(\n 'disableLocalTraitEffects'\n);\n","import { inject, Injectable, Injector, OnDestroy } from '@angular/core';\nimport { BaseEntityFeatureFactory, EntityFeatureFactory } from '../model';\nimport { createFeatureSelector, ReducerManager, Store } from '@ngrx/store';\nimport { Actions, EffectSources } from '@ngrx/effects';\nimport { getDestroyActionName, TraitEffect } from '../trait-effect';\nimport { DISABLE_LOCAL_TRAIT_EFFECTS } from './disable-local-trait-effects.token';\n\nlet id = 0;\nfunction uniqueComponentId() {\n return id++;\n}\n\n/**\n * Builds traitFactory and registers effects and reducers with\n * a generated component id, returns build actions and selectors\n * and a destroy method that will unergister the effects and reducers\n * when called, and a addEffect which can be use to register extra effects\n *\n * Used inside TraitsLocalStore, can be used to create your\n * own Component Service without extending TraitsLocalStore\n * @param injector\n * @param componentName\n * @param traitFactory\n */\nexport function buildLocalTraits<\n State,\n F extends BaseEntityFeatureFactory<any, any, any>\n>(injector: Injector, componentName: string, traitFactory: F) {\n const reducers = injector.get(ReducerManager);\n const effects = injector.get(EffectSources);\n const store = injector.get(Store);\n const componentId = `${componentName}_${uniqueComponentId()}`;\n\n const traits = traitFactory({\n featureSelector: createFeatureSelector<State>(componentId),\n actionsGroupKey: `[${componentId}]`,\n }) as ReturnType<F>;\n\n traits.reducer && reducers.addReducer(componentId, traits.reducer);\n\n const providers =\n (traits.effects && [...traits.effects.map((e) => ({ provide: e }))]) || [];\n\n const disableLocalTraitsEffects = injector.get(\n DISABLE_LOCAL_TRAIT_EFFECTS,\n false\n );\n if (!disableLocalTraitsEffects) {\n const i = Injector.create({\n providers: providers,\n parent: injector,\n });\n\n traits.effects?.forEach((e) => {\n const effect = i.get(e) as TraitEffect;\n effect.componentId = componentId;\n effects.addEffects(effect);\n });\n }\n\n function destroy() {\n store.dispatch({ type: getDestroyActionName(componentId) });\n /**\n * A service that extends TraitsLocalStore and other component service are destroyed\n * before the component that depends on them, this causes that any subscriptions\n * to selectors of the TraitsLocalStore could fail because the store state is removed before\n * they are unsubscribe by the onDestroy of the component. Executing reducers.removeReducer\n * inside setTimeout ensures the state is remove after the component onDestroy was called,\n * avoiding the before mentioned possible issues.\n */\n setTimeout(() => reducers.removeReducer(componentId));\n }\n\n return {\n destroy,\n actions: traits.actions,\n selectors: traits.selectors,\n addEffects(localEffect: TraitEffect) {\n localEffect.componentId = componentId;\n effects.addEffects(localEffect);\n },\n };\n}\n\nexport interface Type<T> extends Function {\n new (...args: any[]): T;\n}\n\nexport interface LocalTraitsConfig<\n F extends BaseEntityFeatureFactory<any, any, any>\n> {\n componentName: string;\n traitsFactory: F;\n}\n\n/**\n * Class used to create local traits service, receives a trait factory, which will be\n * built and its reducers and effect register using a dynamic id when the service is built\n * and get destroyed when the onDestroy lifecycle method of the service is called, if the service\n * has effects this.traits.addEffects(this) should be call in the constructor\n *\n * @example\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * );\n *\n * Injectable()\n * export class ProductsLocalTraits extends TraitsLocalStore<\n * typeof productFeatureFactory\n * > {\n * loadProducts$ = createEffect(() =>\n * this.actions$.pipe(\n * ofType(this.localActions.loadProducts),\n * switchMap(() =>\n * //call your service to get the products data\n * this.productService.getProducts().pipe(\n * map((res) =>\n * this.localActions.loadProductsSuccess({ entities: res.resultList })\n * ),\n * catchError(() => of(this.localActions.loadProductsFail()))\n * )\n * )\n * )\n * );\n *\n * constructor(injector: Injector, private productService: ProductService) {\n * super(injector);\n * this.traits.addEffects(this); // IMPORTANT! add this line if the service has effects\n * }\n *\n * setup(): LocalTraitsConfig<typeof productFeatureFactory> {\n * return {\n * componentName: 'ProductsPickerComponent',\n * traitsFactory: productFeatureFactory,\n * };\n * }\n * }\n *\n * // use in component later\n *\n * Component({\n * selector: 'some-component',\n * template: `<div> some content</div> `,\n * providers: [ProductsLocalTraits],\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * })\n * export class ProductSelectDialogComponent implements OnInit {\n * constructor(private store: Store, private traits: ProductsLocalTraits) {}\n *\n * ngOnInit() {\n * this.store.dispatch(this.traits.localActions.loadProducts());\n * }\n * }\n */\n@Injectable()\nexport abstract class TraitsLocalStore<\n F extends BaseEntityFeatureFactory<any, any, any>\n >\n extends TraitEffect\n implements OnDestroy\n{\n traits: {\n actions: ReturnType<F>['actions'];\n selectors: ReturnType<F>['selectors'];\n destroy: () => void;\n addEffects: (localEffect: TraitEffect) => void;\n };\n\n localActions: ReturnType<F>['actions'];\n localSelectors: ReturnType<F>['selectors'];\n private injector = inject(Injector);\n\n public constructor() {\n super();\n const config = this.setup();\n this.traits = buildLocalTraits(\n this.injector,\n config.componentName,\n config.traitsFactory\n );\n this.localActions = this.traits.actions;\n this.localSelectors = this.traits.selectors;\n }\n\n abstract setup(): LocalTraitsConfig<F>;\n\n ngOnDestroy() {\n this.traits.destroy();\n }\n}\n","export type CacheKey = string | (string | object)[];\n\nexport interface CacheData {\n value: any;\n date: number;\n invalid: boolean;\n hitCount: number;\n}\nexport interface CacheKeys {\n keys?: { [key: string]: CacheKeys };\n data?: CacheData;\n}\n\nexport type CacheState = CacheKeys;\n\nexport interface CacheConfig {\n expires: number;\n}\nfunction hash(key: string | object): string {\n return JSON.stringify(key, (_, val) =>\n typeof val == 'object'\n ? Object.keys(val)\n .sort()\n .reduce((result, k) => {\n result[k] = val[k];\n return result;\n }, {} as any)\n : val\n );\n}\n\nexport function hashKey(key: CacheKey): string[] {\n return typeof key === 'string'\n ? [key]\n : key.map((k) => {\n return typeof k === 'string' ? k : hash(k);\n });\n}\n\nexport function getCacheValue(\n keys: string[],\n state: CacheState\n): CacheData | undefined {\n let parent: CacheKeys | undefined = state;\n for (const key of keys) {\n parent = parent?.keys?.[key];\n if (!parent) return undefined;\n }\n return parent?.data;\n}\n\nexport function isCacheValid(cache: CacheData, exp: number) {\n return !cache.invalid && Date.now() <= cache.date + exp;\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { CacheKey, CacheState, getCacheValue, hashKey } from './cache.models';\n\nexport const cacheStateSelector = createFeatureSelector<CacheState>('cache');\n\nexport const selectCache = (key: CacheKey) =>\n createSelector(cacheStateSelector, (state) =>\n getCacheValue(hashKey(key), state)\n );\n","import { createAction, props } from '@ngrx/store';\nimport { CacheKey } from './cache.models';\n\nexport const cache = createAction(\n '[Cache] Cache',\n props<{\n key: CacheKey;\n value: any;\n date: number;\n maxCacheSize?: number;\n expires?: number;\n }>()\n);\nexport const hitCache = createAction(\n '[Cache] Hit Cache',\n props<{ key: CacheKey }>()\n);\nexport const invalidateCache = createAction(\n '[Cache] Invalidate Cache',\n props<{ key: CacheKey }>()\n);\nexport const deleteCache = createAction(\n '[Cache] Delete Cache',\n props<{ key: CacheKey }>()\n);\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, of } from 'rxjs';\nimport { CacheData, CacheKey, isCacheValid } from './cache.models';\nimport { selectCache } from './cache.selectors';\nimport { concatMap, first, tap } from 'rxjs/operators';\nimport * as CacheActions from './cache.actions';\n\n/**\n * Cache the result of source parameter using the provided key, when call\n * again if the cache is valid (exist and is not expired or invalidated)\n * it will return the cache value without calling again source\n * @example\n * // cache for 3 min\n * loadStores$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(ProductStoreActions.loadStores),\n * exhaustMap(() =>\n * cache({\n * key: ['stores'],\n * store: this.store,\n * source: this.storeService.getStores(),\n * expire: 1000 * 60 * 3 // optional param , cache forever if not present\n * }).pipe(\n * map((res) => ProductStoreActions.loadStoresSuccess({ entities: res })),\n * catchError(() => of(ProductStoreActions.loadStoresFail()))\n * )\n * )\n * );\n * });\n * // cache top 10, for 3 mins\n * loadDepartments$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(this.localActions.loadDepartments),\n * concatLatestFrom(() =>\n * this.store.select(this.localSelectors.selectDepartmentsFilter)\n * ),\n * exhaustMap(([_, filters]) =>\n * cache({\n * key: ['stores','departments',{ storeId: filters!.storeId },\n * store: this.store,\n * source: this.storeService.getStoreDepartments(filters!.storeId),\n * expires: 1000 * 60 * 3,\n * maxCacheSize: 10,\n * }).pipe(\n * map((res) =>\n * this.localActions.loadDepartmentsSuccess({\n * entities: res,\n * })\n * ),\n * catchError(() => of(this.localActions.loadDepartmentsFail()))\n * )\n * )\n * );\n * });\n *\n * @param options - configuration\n * @param options.store - required ngrx store\n * @param options.key - key can be string, array of string or array of string with plain objects\n * @param options.source - called when cache is invalid\n * @param options.expires - time to expire the cache valued, if not present is infinite\n * @param options.maxCacheSize - max number of keys to store , only works if last key is variable\n */\nexport function cache<T>({\n store,\n key,\n source,\n expires,\n maxCacheSize,\n skip,\n}: {\n store: Store;\n key: CacheKey;\n source: Observable<T>;\n expires?: number;\n maxCacheSize?: number;\n skip?: boolean;\n}) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(\n first(),\n concatMap((cache) =>\n cache && !skip && isCacheValid(cache, exp)\n ? of(cache.value).pipe(\n tap(() => store.dispatch(CacheActions.hitCache({ key })))\n )\n : source.pipe(\n tap((value) =>\n store.dispatch(\n CacheActions.cache({\n key,\n date: Date.now(),\n value,\n maxCacheSize,\n })\n )\n )\n )\n )\n );\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n CacheData,\n CacheKeys,\n CacheState,\n hashKey,\n isCacheValid,\n} from './cache.models';\nimport * as CacheActions from './cache.actions';\n\nexport const initialState: CacheState = {\n keys: {},\n};\n\nexport const cacheReducer = createReducer(\n initialState,\n on(CacheActions.cache, (state, { key, value, date, maxCacheSize }) =>\n setCacheValue(\n hashKey(key),\n { value, date, invalid: false },\n state,\n maxCacheSize\n )\n ),\n on(CacheActions.invalidateCache, (state, { key }) => {\n const k = hashKey(key);\n return invalidateCache(k, state);\n }),\n on(CacheActions.deleteCache, (state, { key }) => {\n const k = hashKey(key);\n return deleteCacheValue(k, state);\n }),\n on(CacheActions.hitCache, (state, { key }) => {\n const k = hashKey(key);\n return increaseCacheHitCount(k, state);\n })\n);\n\nfunction setCacheValue(\n keys: string[],\n value: Omit<CacheData, 'hitCount'>,\n state: CacheState,\n maxCacheSize?: number,\n expires?: number\n) {\n const newState = { ...state };\n let cache = newState;\n let lastCache: CacheKeys | undefined = undefined;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cache.keys = cache?.keys ? { ...cache?.keys } : {};\n let v = cache.keys[key];\n v = v ? { ...v } : {};\n cache.keys[key] = v;\n lastCache = cache;\n cache = v;\n }\n cache.data = cache.data\n ? { ...value, hitCount: cache.data.hitCount + 1 }\n : { ...value, hitCount: 1 };\n\n if (\n maxCacheSize &&\n lastCache?.keys &&\n Object.keys(lastCache.keys).length > maxCacheSize\n ) {\n const entries = findLessHitOrOldestCacheEntries(\n lastCache,\n expires ?? Infinity,\n maxCacheSize\n );\n if (entries && entries.length) {\n for (const [key] of entries) {\n delete lastCache.keys[key];\n }\n }\n }\n return newState;\n}\n\nfunction findLessHitOrOldestCacheEntries(\n state: CacheKeys,\n expires: number,\n maxCacheSize: number\n) {\n if (!state.keys) return undefined;\n const entries = Object.entries(state.keys);\n // find the newest key;\n const [newestKey] = entries.reduce((a, b) => {\n const aDate = a[1].data?.date ?? 0;\n const bDate = b[1].data?.date ?? 0;\n return aDate > bDate ? a : b;\n });\n const sorted = entries.sort(([aKey, aValue], [bKey, bValue]) => {\n // ensures the newest key always wins\n if (aKey === newestKey) return -1;\n if (bKey === newestKey) return 1;\n const aValid = aValue.data && isCacheValid(aValue.data, expires) ? 1 : 0;\n const bValid = bValue.data && isCacheValid(bValue.data, expires) ? 1 : 0;\n const diffValid = aValid - bValid;\n const diffHit = (aValue.data?.hitCount ?? 0) - (bValue.data?.hitCount ?? 0);\n const diffDate = (aValue.data?.date ?? 0) - (bValue.data?.date ?? 0);\n return (\n -1 * (diffValid === 0 ? (diffHit === 0 ? diffDate : diffHit) : diffValid)\n );\n });\n return sorted.slice(maxCacheSize);\n}\n\nfunction deleteCacheValue(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache.keys[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (cache.data) delete cache.data;\n else if (cache.keys) delete cache.keys;\n return newState;\n}\n\nfunction invalidateCache(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n cache && invalidaSubKeys(cache);\n return newState;\n}\n\nfunction increaseCacheHitCount(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (!cache.data) return state;\n cache.data = { ...cache.data, hitCount: cache.data.hitCount + 1 };\n return newState;\n}\n\nfunction invalidaSubKeys(state: CacheKeys) {\n if (state.data) {\n state.data = { ...state.data, invalid: true };\n }\n if (state.keys) {\n state.keys = { ...state.keys };\n for (const key in state.keys) {\n state.keys[key] = invalidaSubKeys({ ...state.keys[key] });\n }\n }\n return state;\n}\n","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\nimport { cacheReducer } from './cache.reducer';\n\n@NgModule({\n imports: [StoreModule.forFeature('cache', cacheReducer)],\n providers: [],\n})\nexport class CacheModule {}\n","export * from './cache.service';\nexport * from './cache.module';\nimport { invalidateCache, deleteCache } from './cache.actions';\nimport { selectCache } from './cache.selectors';\nexport const CacheActions = { invalidateCache, deleteCache };\nexport const CacheSelectors = { getCache: selectCache };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache"],"mappings":"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"}
1
+ {"version":3,"file":"ngrx-traits-core.mjs","sources":["../../../../../libs/ngrx-traits/core/src/lib/util.ts","../../../../../libs/ngrx-traits/core/src/lib/create-entity-feature.ts","../../../../../libs/ngrx-traits/core/src/lib/trait-effect.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/disable-local-trait-effects.token.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/traits-local-store.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.models.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.selectors.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.actions.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.service.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.reducer.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.module.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/index.ts","../../../../../libs/ngrx-traits/core/src/lib/ngrx-traits-core.ts"],"sourcesContent":["import { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } from '@ngrx/store';\n\nexport function insertIf<State>(\n condition: any,\n getElement: () => ReducerTypes<State, ActionCreator[]>\n): ReducerTypes<State, ActionCreator[]>[] {\n return condition ? [getElement()] : [];\n}\nexport function toMap(a: Array<string | number>) {\n return a.reduce((acum: { [key: string]: boolean }, value) => {\n acum[value] = true;\n return acum;\n }, {});\n}\n\nexport function capitalize(name: string) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function camelCaseToSentence(text: string) {\n const result = text.replace(/([A-Z])/g, ' $1');\n return result.charAt(0).toUpperCase() + result.slice(1);\n}\n\n/**\n * Set propertyReducer in sourceReducer in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer, 'selectedProduct', selectedProductReducer)\n */\nexport function setPropertyReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n property: P,\n propertyReducer: (state: State[P], action: ActionType<any>) => State[P]\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = sourceReducer(state, action);\n return {\n ...sourceState,\n [property]: propertyReducer(sourceState[property], action),\n };\n };\n}\n\n/**\n * Set propertyReducers in sourceReducer each in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer,\n * {\n * selectedProduct: selectedProductReducer\n * favoriteProduct: favoriteProductReducer\n * })\n */\nexport function setPropertiesReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n propertiesReducers: {\n [key in P]: (state: State[P], action: ActionType<any>) => State[P];\n }\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const newState = { ...sourceReducer(state, action) };\n for (const property in propertiesReducers) {\n newState[property as P] = propertiesReducers[property](\n newState[property],\n action\n );\n }\n return newState;\n };\n}\n\n/**\n * joins two reducers so the work in the same state\n * @param firstReducer\n * @param secondReducer\n */\nexport function joinReducers<State>(\n firstReducer: (state: State, action: ActionType<any>) => State,\n secondReducer: (state: any, action: ActionType<any>) => any\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = firstReducer(state, action);\n return secondReducer(sourceState, action);\n };\n}\n","import {\n Config,\n ExtractActionsType,\n ExtractSelectorsType,\n ExtractStateType,\n EntityFeatureFactory,\n FeatureSelectors,\n KeyedConfig,\n TraitActions,\n TraitFactory,\n TraitSelectors,\n TraitStateMutators,\n UnionToIntersection,\n TraitActionsFactory,\n TraitSelectorsFactory,\n TraitInitialStateFactory,\n TraitStateMutatorsFactory,\n TraitReducerFactory,\n TraitEffectsFactory,\n AllTraitConfigs,\n} from './model';\nimport {\n Action,\n ActionType,\n combineReducers,\n createFeatureSelector,\n createReducer,\n createSelector,\n MemoizedSelector,\n} from '@ngrx/store';\nimport { TraitEffect } from './trait-effect';\nimport { Type } from './local-store';\nimport { capitalize, setPropertiesReducer } from './util';\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n {\n entityName,\n entitiesName,\n }: { entityName: EntityName; entitiesName?: EntitiesName },\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects.\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n *\n * productsFeature.actions.loadProducts();\n */\nexport function createEntityFeatureFactory<F extends readonly TraitFactory[]>(\n ...traits: F\n): EntityFeatureFactory<\n 'Entity',\n 'Entities',\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n namesOrFactory:\n | { entityName: EntityName; entitiesName?: EntitiesName }\n | TraitFactory,\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n> {\n return ((config: Config<any, any>) => {\n const { entityName, entitiesName } =\n 'entityName' in namesOrFactory\n ? (namesOrFactory as {\n entityName: EntityName;\n entitiesName?: EntitiesName;\n })\n : { entityName: 'Entity', entitiesName: 'Entities' };\n\n const singular = capitalize(entityName);\n const plural = entitiesName\n ? capitalize(entitiesName)\n : capitalize(entityName + 's');\n\n const sortedTraits = sortTraits(\n 'entityName' in namesOrFactory ? [...traits] : [namesOrFactory, ...traits]\n );\n\n const allConfigs = buildAllConfigs(sortedTraits);\n\n const allActions = buildAllActions(\n sortedTraits,\n config.actionsGroupKey,\n singular,\n plural,\n allConfigs\n );\n\n const allSelectors = buildAllSelectors(sortedTraits, allConfigs);\n\n const allMutators = buildAllMutators(\n sortedTraits,\n allSelectors,\n allConfigs\n );\n\n const initialState = buildInitialState(sortedTraits, allConfigs);\n\n const reducer = buildReducer(\n sortedTraits,\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs\n );\n\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<ExtractStateType<F>>(config.featureSelector)\n : config.featureSelector;\n\n const allFeatureSelectors =\n allSelectors && getSelectorsForFeature(featureSelector, allSelectors);\n\n const allEffects = buildAllEffects(\n sortedTraits,\n allActions,\n allFeatureSelectors,\n allConfigs\n );\n\n return {\n actions: entityName\n ? renameProps(allActions, singular, plural)\n : allActions,\n selectors: entityName\n ? renameProps(allFeatureSelectors, singular, plural)\n : allSelectors,\n initialState,\n reducer: reducer ?? createReducer(initialState),\n effects: allEffects,\n };\n }) as EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n >;\n}\n\nfunction renameProps(target: any, entityName: string, entitiesName: string) {\n const result = {} as any;\n for (const [key, value] of Object.entries(target)) {\n const newKey = key\n .replace('Entities', entitiesName)\n .replace('Entity', entityName);\n result[newKey] = value;\n }\n return result;\n}\n\nfunction sortTraits(\n traits: TraitFactory<any, any, any, any>[]\n): TraitFactory<any, any, any, any>[] {\n const sortedTraits: TraitFactory<any, any, any, any>[] = [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n if (!trait.depends?.length) {\n sortedTraits.push(trait);\n continue;\n }\n if (trait.depends.length > 1)\n for (const d of trait.depends) {\n const isTraitPresent = traits.some((tr) => tr.key === d);\n if (isTraitPresent) {\n trait.depends = [d];\n break;\n }\n }\n if (trait.depends.length > 1)\n throw Error('could not find dependencies ' + trait.depends.join(' '));\n const isDependencyAlreadyAdded = sortedTraits.some(\n (tr) => tr.key === trait?.depends?.[0]\n );\n\n if (isDependencyAlreadyAdded) sortedTraits.push(trait);\n else {\n // move trait to the end\n delete traits[i];\n traits.push(trait);\n }\n }\n return sortedTraits;\n}\n\nfunction buildAllConfigs(sortedTraits: TraitFactory<any, any, any, any>[]) {\n return sortedTraits.reduce((acc: KeyedConfig<string, any>, factory) => {\n acc[factory.key] = factory.config;\n return acc;\n }, {});\n}\n\nfunction buildAllActions(\n sortedTraits: TraitFactory<any, any, any, any>[],\n actionsGroupKey: string,\n entityName: string,\n entitiesName: string,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitActions, factory) => {\n let result =\n factory?.actions?.({\n actionsGroupKey: actionsGroupKey,\n entityName,\n entitiesName,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllSelectors(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitSelectors<any>, factory) => {\n let result =\n factory?.selectors?.({\n previousSelectors: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllMutators(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return (\n sortedTraits.reduce(\n (previousResult: TraitStateMutators<any> | undefined, factory) => {\n let result =\n factory?.mutators?.({\n allSelectors: allSelectors,\n previousMutators: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n },\n {}\n ) || {}\n );\n}\n\nfunction buildInitialState(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: any, factory) => {\n const result =\n factory?.initialState?.({\n previousInitialState: previousResult,\n allConfigs,\n }) ??\n previousResult ??\n {};\n return result;\n }, {});\n}\n\nfunction buildReducer(\n sortedTraits: TraitFactory<any, any, any, any>[],\n initialState: any,\n allActions: TraitActions,\n allSelectors: TraitSelectors<any>,\n allMutators: TraitStateMutators<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (\n previousResult: ((state: any, action: Action) => any) | undefined,\n factory\n ) => {\n const result = factory?.reducer?.({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n });\n return result && previousResult\n ? (state = initialState, action) => {\n const aState = previousResult(state, action);\n return result(aState, action);\n }\n : result ?? previousResult;\n },\n undefined\n );\n}\n\nfunction buildAllEffects(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allActions: TraitActions,\n allFeatureSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (previousResult: Type<TraitEffect>[] | undefined, factory) => {\n let result =\n factory?.effects?.({\n allActions,\n allSelectors: allFeatureSelectors,\n allConfigs,\n }) ?? [];\n result = previousResult ? [...previousResult, ...result] : result;\n return result;\n },\n []\n );\n}\n\nfunction getSelectorsForFeature<\n State,\n S extends TraitSelectors<State>,\n // eslint-disable-next-line @typescript-eslint/ban-types\n F extends MemoizedSelector<object, any>\n>(featureSelect: F, selectors: S): FeatureSelectors<State, S> {\n const ss: { [key in keyof S]?: any } = {};\n for (const prop in selectors) {\n ss[prop] = createSelector(featureSelect as any, selectors[prop] as any);\n }\n return ss as FeatureSelectors<State, S>;\n}\n\n/**\n * Combine a map entityFeatureFactories into one,\n * grouping the actions and selectors by the key of the respective entityFeatureFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productCombinedFactory = combineEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const combinedFeature = productCombinedFactory({\n * actionsGroupKey: '[Combined]',\n * featureSelector: 'combined',\n * });\n *\n * combinedFeature.actions.client.loadClients();\n * combinedFeature.actions.product.loadProducts();\n */\nexport function combineEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const actions: any = {};\n const selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Mix a map entityFeatureFactories into one, different from combine the actions and selectors a mix, not group by key like in combine, the keys are still use\n * internal in the reducers and selector to separate the state\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productMixedFactory = mixEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const mixedFeature = productMixedFactory({\n * actionsGroupKey: '[Mixed]',\n * featureSelector: 'mixed',\n * });\n * mixedFeature.actions.loadClients();\n * mixedFeature.actions.loadProducts();\n *\n */\nexport function mixEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends TraitActions &\n UnionToIntersection<ExtractActionsType<ReturnType<T[K]>>>,\n S extends TraitSelectors<any> &\n UnionToIntersection<\n FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[K]>>>\n >,\n R extends EntityFeatureFactory<any, any, State, A, S>\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n let actions: any = {};\n let selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions = { ...actions, ...featureTraits.actions };\n selectors = { ...selectors, ...featureTraits.selectors };\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Combines targetTraitFactory with the traitFactoriesMap using the keys as props for the targetTraitFactory state,\n * and grouping the combined actions by key\n * @param targetTraitFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productAddEntityPropertiesFactory = addEntityFeaturesProperties(\n * productFeatureFactory,\n * {\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * }\n * );\n *\n * const combinedFeature = productAddEntityPropertiesFactory({\n * actionsGroupKey: '[addEntityFeatures]',\n * featureSelector: 'addEntityFeatures',\n * });\n *\n * combinedFeature.actions.loadProducts();\n * combinedFeature.actions.clients.loadClients();\n * combinedFeature.actions.productOrders.loadProductOrders();\n */\nexport function addEntityFeaturesProperties<\n F extends EntityFeatureFactory<any, any>,\n T extends { [key: string]: EntityFeatureFactory<any, any, any, any, any> },\n K extends keyof T,\n State extends ExtractStateType<ReturnType<F>> & {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> & {\n [P in K]: ExtractActionsType<ReturnType<T[P]>>;\n },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> & {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(targetTraitFactory: F, traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const targetFeatureTraits = targetTraitFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: featureSelector,\n });\n const actions: any = { ...targetFeatureTraits.actions };\n const selectors: any = { ...targetFeatureTraits.selectors };\n const reducers: any = {};\n let effects: Type<any>[] = [...targetFeatureTraits.effects];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: setPropertiesReducer(targetFeatureTraits.reducer, reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Helper function to create an implementation a TraitFactory\n * @param f TraitFactory implementation\n */\nexport function createTraitFactory<\n State = {},\n A extends TraitActions = {},\n S extends TraitSelectors<State> = {},\n M extends TraitStateMutators<State> = {},\n KEY extends string = string,\n C = unknown,\n KC extends AllTraitConfigs = KeyedConfig<KEY, C>\n>(f: {\n key: KEY;\n config?: C;\n depends?: string[];\n actions?: TraitActionsFactory<A, KC>;\n selectors?: TraitSelectorsFactory<State, S, KC>;\n initialState?: TraitInitialStateFactory<State, KC>;\n mutators?: TraitStateMutatorsFactory<State, M, KC>;\n reducer?: TraitReducerFactory<State, A, S, M, KC>;\n effects?: TraitEffectsFactory<State, A, S, KC>;\n}): TraitFactory<State, A, S, M, KEY, C, KC> {\n return f as TraitFactory<State, A, S, M, KEY, C, KC>;\n}\n\n/**\n * Helper function to combine selectors in components as map\n *\n * @example\n *\n * view = combineSelectors({\n * products: ProductSelectors.selectProductsCurrentPage,\n * isLoading: ProductSelectors.isLoadingProductsCurrentPage,\n * selectedProduct: ProductSelectors.selectProductSelected,\n * isLoadingCheckout: ProductSelectors.isLoadingCheckout,\n * selectedSort: ProductSelectors.selectProductsSort,\n * filters: ProductSelectors.selectProductsFilter,\n * });\n * @param t\n */\nexport function combineSelectors<\n T extends { [k: string]: MemoizedSelector<any, any> }\n>(t: T): MemoizedSelector<any, { [j in keyof T]: ReturnType<T[j]> }> {\n const selectors = Object.values(t);\n const keys = Object.keys(t);\n const projector = (...args: any[]) =>\n keys.reduce((acc, key, index) => {\n acc[key] = args[index];\n return acc;\n }, {} as any);\n return (createSelector as any).apply(null, [...selectors, projector]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n Actions,\n ofType,\n OnIdentifyEffects,\n OnRunEffects,\n} from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class TraitEffect implements OnIdentifyEffects, OnRunEffects {\n private name = this.constructor.name;\n public componentId = '';\n protected actions$ = inject(Actions);\n protected store = inject(Store<any>);\n\n ngrxOnIdentifyEffects() {\n return this.componentId ? this.name + this.componentId : '';\n }\n\n ngrxOnRunEffects(resolvedEffects$: Observable<any>) {\n return this.componentId\n ? resolvedEffects$.pipe(\n takeUntil(\n this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))\n )\n )\n : resolvedEffects$;\n }\n}\n\nexport function getDestroyActionName(id: string) {\n return `[${id}] Destroyed`;\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * @ignore\n * @internal\n */\nexport const DISABLE_LOCAL_TRAIT_EFFECTS = new InjectionToken<boolean>(\n 'disableLocalTraitEffects'\n);\n","import { inject, Injectable, Injector, OnDestroy } from '@angular/core';\nimport { BaseEntityFeatureFactory, EntityFeatureFactory } from '../model';\nimport { createFeatureSelector, ReducerManager, Store } from '@ngrx/store';\nimport { Actions, EffectSources } from '@ngrx/effects';\nimport { getDestroyActionName, TraitEffect } from '../trait-effect';\nimport { DISABLE_LOCAL_TRAIT_EFFECTS } from './disable-local-trait-effects.token';\n\nlet id = 0;\nfunction uniqueComponentId() {\n return id++;\n}\n\n/**\n * Builds traitFactory and registers effects and reducers with\n * a generated component id, returns build actions and selectors\n * and a destroy method that will unergister the effects and reducers\n * when called, and a addEffect which can be use to register extra effects\n *\n * Used inside TraitsLocalStore, can be used to create your\n * own Component Service without extending TraitsLocalStore\n * @param injector\n * @param componentName\n * @param traitFactory\n */\nexport function buildLocalTraits<\n State,\n F extends BaseEntityFeatureFactory<any, any, any>\n>(injector: Injector, componentName: string, traitFactory: F) {\n const reducers = injector.get(ReducerManager);\n const effects = injector.get(EffectSources);\n const store = injector.get(Store);\n const componentId = `${componentName}_${uniqueComponentId()}`;\n\n const traits = traitFactory({\n featureSelector: createFeatureSelector<State>(componentId),\n actionsGroupKey: `[${componentId}]`,\n }) as ReturnType<F>;\n\n traits.reducer && reducers.addReducer(componentId, traits.reducer);\n\n const providers =\n (traits.effects && [...traits.effects.map((e) => ({ provide: e }))]) || [];\n\n const disableLocalTraitsEffects = injector.get(\n DISABLE_LOCAL_TRAIT_EFFECTS,\n false\n );\n if (!disableLocalTraitsEffects) {\n const i = Injector.create({\n providers: providers,\n parent: injector,\n });\n\n traits.effects?.forEach((e) => {\n const effect = i.get(e) as TraitEffect;\n effect.componentId = componentId;\n effects.addEffects(effect);\n });\n }\n\n function destroy() {\n store.dispatch({ type: getDestroyActionName(componentId) });\n /**\n * A service that extends TraitsLocalStore and other component service are destroyed\n * before the component that depends on them, this causes that any subscriptions\n * to selectors of the TraitsLocalStore could fail because the store state is removed before\n * they are unsubscribe by the onDestroy of the component. Executing reducers.removeReducer\n * inside setTimeout ensures the state is remove after the component onDestroy was called,\n * avoiding the before mentioned possible issues.\n */\n setTimeout(() => reducers.removeReducer(componentId));\n }\n\n return {\n destroy,\n actions: traits.actions,\n selectors: traits.selectors,\n addEffects(localEffect: TraitEffect) {\n localEffect.componentId = componentId;\n effects.addEffects(localEffect);\n },\n };\n}\n\nexport interface Type<T> extends Function {\n new (...args: any[]): T;\n}\n\nexport interface LocalTraitsConfig<\n F extends BaseEntityFeatureFactory<any, any, any>\n> {\n componentName: string;\n traitsFactory: F;\n}\n\n/**\n * Class used to create local traits service, receives a trait factory, which will be\n * built and its reducers and effect register using a dynamic id when the service is built\n * and get destroyed when the onDestroy lifecycle method of the service is called, if the service\n * has effects this.traits.addEffects(this) should be call in the constructor\n *\n * @example\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * );\n *\n * Injectable()\n * export class ProductsLocalTraits extends TraitsLocalStore<\n * typeof productFeatureFactory\n * > {\n * loadProducts$ = createEffect(() =>\n * this.actions$.pipe(\n * ofType(this.localActions.loadProducts),\n * switchMap(() =>\n * //call your service to get the products data\n * this.productService.getProducts().pipe(\n * map((res) =>\n * this.localActions.loadProductsSuccess({ entities: res.resultList })\n * ),\n * catchError(() => of(this.localActions.loadProductsFail()))\n * )\n * )\n * )\n * );\n *\n * constructor(injector: Injector, private productService: ProductService) {\n * super(injector);\n * this.traits.addEffects(this); // IMPORTANT! add this line if the service has effects\n * }\n *\n * setup(): LocalTraitsConfig<typeof productFeatureFactory> {\n * return {\n * componentName: 'ProductsPickerComponent',\n * traitsFactory: productFeatureFactory,\n * };\n * }\n * }\n *\n * // use in component later\n *\n * Component({\n * selector: 'some-component',\n * template: `<div> some content</div> `,\n * providers: [ProductsLocalTraits],\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * })\n * export class ProductSelectDialogComponent implements OnInit {\n * constructor(private store: Store, private traits: ProductsLocalTraits) {}\n *\n * ngOnInit() {\n * this.store.dispatch(this.traits.localActions.loadProducts());\n * }\n * }\n */\n@Injectable()\nexport abstract class TraitsLocalStore<\n F extends BaseEntityFeatureFactory<any, any, any>\n >\n extends TraitEffect\n implements OnDestroy\n{\n traits: {\n actions: ReturnType<F>['actions'];\n selectors: ReturnType<F>['selectors'];\n destroy: () => void;\n addEffects: (localEffect: TraitEffect) => void;\n };\n\n localActions: ReturnType<F>['actions'];\n localSelectors: ReturnType<F>['selectors'];\n private injector = inject(Injector);\n\n public constructor() {\n super();\n const config = this.setup();\n this.traits = buildLocalTraits(\n this.injector,\n config.componentName,\n config.traitsFactory\n );\n this.localActions = this.traits.actions;\n this.localSelectors = this.traits.selectors;\n }\n\n abstract setup(): LocalTraitsConfig<F>;\n\n ngOnDestroy() {\n this.traits.destroy();\n }\n}\n","export type CacheKey = string | (string | object)[];\n\nexport interface CacheData {\n value: any;\n date: number;\n invalid: boolean;\n hitCount: number;\n}\nexport interface CacheKeys {\n keys?: { [key: string]: CacheKeys };\n data?: CacheData;\n}\n\nexport type CacheState = CacheKeys;\n\nexport interface CacheConfig {\n expires: number;\n}\nfunction hash(key: string | object): string {\n return JSON.stringify(key, (_, val) =>\n typeof val == 'object'\n ? Object.keys(val)\n .sort()\n .reduce((result, k) => {\n result[k] = val[k];\n return result;\n }, {} as any)\n : val\n );\n}\n\nexport function hashKey(key: CacheKey): string[] {\n return typeof key === 'string'\n ? [key]\n : key.map((k) => {\n return typeof k === 'string' ? k : hash(k);\n });\n}\n\nexport function getCacheValue(\n keys: string[],\n state: CacheState\n): CacheData | undefined {\n let parent: CacheKeys | undefined = state;\n for (const key of keys) {\n parent = parent?.keys?.[key];\n if (!parent) return undefined;\n }\n return parent?.data;\n}\n\nexport function isCacheValid(cache: CacheData, exp: number) {\n return !cache.invalid && Date.now() <= cache.date + exp;\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { CacheKey, CacheState, getCacheValue, hashKey } from './cache.models';\n\nexport const cacheStateSelector = createFeatureSelector<CacheState>('cache');\n\nexport const selectCache = (key: CacheKey) =>\n createSelector(cacheStateSelector, (state) =>\n getCacheValue(hashKey(key), state)\n );\n","import { createAction, props } from '@ngrx/store';\nimport { CacheKey } from './cache.models';\n\nexport const cache = createAction(\n '[Cache] Cache',\n props<{\n key: CacheKey;\n value: any;\n date: number;\n maxCacheSize?: number;\n expires?: number;\n }>()\n);\nexport const hitCache = createAction(\n '[Cache] Hit Cache',\n props<{ key: CacheKey }>()\n);\nexport const invalidateCache = createAction(\n '[Cache] Invalidate Cache',\n props<{ key: CacheKey }>()\n);\nexport const deleteCache = createAction(\n '[Cache] Delete Cache',\n props<{ key: CacheKey }>()\n);\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, of } from 'rxjs';\nimport { CacheData, CacheKey, isCacheValid } from './cache.models';\nimport { selectCache } from './cache.selectors';\nimport { concatMap, first, tap } from 'rxjs/operators';\nimport * as CacheActions from './cache.actions';\n\n/**\n * Cache the result of source parameter using the provided key, when call\n * again if the cache is valid (exist and is not expired or invalidated)\n * it will return the cache value without calling again source\n * @example\n * // cache for 3 min\n * loadStores$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(ProductStoreActions.loadStores),\n * exhaustMap(() =>\n * cache({\n * key: ['stores'],\n * store: this.store,\n * source: this.storeService.getStores(),\n * expire: 1000 * 60 * 3 // optional param , cache forever if not present\n * }).pipe(\n * map((res) => ProductStoreActions.loadStoresSuccess({ entities: res })),\n * catchError(() => of(ProductStoreActions.loadStoresFail()))\n * )\n * )\n * );\n * });\n * // cache top 10, for 3 mins\n * loadDepartments$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(this.localActions.loadDepartments),\n * concatLatestFrom(() =>\n * this.store.select(this.localSelectors.selectDepartmentsFilter)\n * ),\n * exhaustMap(([_, filters]) =>\n * cache({\n * key: ['stores','departments',{ storeId: filters!.storeId },\n * store: this.store,\n * source: this.storeService.getStoreDepartments(filters!.storeId),\n * expires: 1000 * 60 * 3,\n * maxCacheSize: 10,\n * }).pipe(\n * map((res) =>\n * this.localActions.loadDepartmentsSuccess({\n * entities: res,\n * })\n * ),\n * catchError(() => of(this.localActions.loadDepartmentsFail()))\n * )\n * )\n * );\n * });\n *\n * @param options - configuration\n * @param options.store - required ngrx store\n * @param options.key - key can be string, array of string or array of string with plain objects\n * @param options.source - called when cache is invalid\n * @param options.expires - time to expire the cache valued, if not present is infinite\n * @param options.maxCacheSize - max number of keys to store , only works if last key is variable\n */\nexport function cache<T>({\n store,\n key,\n source,\n expires,\n maxCacheSize,\n skip,\n}: {\n store: Store;\n key: CacheKey;\n source: Observable<T>;\n expires?: number;\n maxCacheSize?: number;\n skip?: boolean;\n}) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(\n first(),\n concatMap((cache) =>\n cache && !skip && isCacheValid(cache, exp)\n ? of(cache.value).pipe(\n tap(() => store.dispatch(CacheActions.hitCache({ key })))\n )\n : source.pipe(\n tap((value) =>\n store.dispatch(\n CacheActions.cache({\n key,\n date: Date.now(),\n value,\n maxCacheSize,\n })\n )\n )\n )\n )\n );\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n CacheData,\n CacheKeys,\n CacheState,\n hashKey,\n isCacheValid,\n} from './cache.models';\nimport * as CacheActions from './cache.actions';\n\nexport const initialState: CacheState = {\n keys: {},\n};\n\nexport const cacheReducer = createReducer(\n initialState,\n on(CacheActions.cache, (state, { key, value, date, maxCacheSize }) =>\n setCacheValue(\n hashKey(key),\n { value, date, invalid: false },\n state,\n maxCacheSize\n )\n ),\n on(CacheActions.invalidateCache, (state, { key }) => {\n const k = hashKey(key);\n return invalidateCache(k, state);\n }),\n on(CacheActions.deleteCache, (state, { key }) => {\n const k = hashKey(key);\n return deleteCacheValue(k, state);\n }),\n on(CacheActions.hitCache, (state, { key }) => {\n const k = hashKey(key);\n return increaseCacheHitCount(k, state);\n })\n);\n\nfunction setCacheValue(\n keys: string[],\n value: Omit<CacheData, 'hitCount'>,\n state: CacheState,\n maxCacheSize?: number,\n expires?: number\n) {\n const newState = { ...state };\n let cache = newState;\n let lastCache: CacheKeys | undefined = undefined;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cache.keys = cache?.keys ? { ...cache?.keys } : {};\n let v = cache.keys[key];\n v = v ? { ...v } : {};\n cache.keys[key] = v;\n lastCache = cache;\n cache = v;\n }\n cache.data = cache.data\n ? { ...value, hitCount: cache.data.hitCount + 1 }\n : { ...value, hitCount: 1 };\n\n if (\n maxCacheSize &&\n lastCache?.keys &&\n Object.keys(lastCache.keys).length > maxCacheSize\n ) {\n const entries = findLessHitOrOldestCacheEntries(\n lastCache,\n expires ?? Infinity,\n maxCacheSize\n );\n if (entries && entries.length) {\n for (const [key] of entries) {\n delete lastCache.keys[key];\n }\n }\n }\n return newState;\n}\n\nfunction findLessHitOrOldestCacheEntries(\n state: CacheKeys,\n expires: number,\n maxCacheSize: number\n) {\n if (!state.keys) return undefined;\n const entries = Object.entries(state.keys);\n // find the newest key;\n const [newestKey] = entries.reduce((a, b) => {\n const aDate = a[1].data?.date ?? 0;\n const bDate = b[1].data?.date ?? 0;\n return aDate > bDate ? a : b;\n });\n const sorted = entries.sort(([aKey, aValue], [bKey, bValue]) => {\n // ensures the newest key always wins\n if (aKey === newestKey) return -1;\n if (bKey === newestKey) return 1;\n const aValid = aValue.data && isCacheValid(aValue.data, expires) ? 1 : 0;\n const bValid = bValue.data && isCacheValid(bValue.data, expires) ? 1 : 0;\n const diffValid = aValid - bValid;\n const diffHit = (aValue.data?.hitCount ?? 0) - (bValue.data?.hitCount ?? 0);\n const diffDate = (aValue.data?.date ?? 0) - (bValue.data?.date ?? 0);\n return (\n -1 * (diffValid === 0 ? (diffHit === 0 ? diffDate : diffHit) : diffValid)\n );\n });\n return sorted.slice(maxCacheSize);\n}\n\nfunction deleteCacheValue(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache.keys[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (cache.data) delete cache.data;\n else if (cache.keys) delete cache.keys;\n return newState;\n}\n\nfunction invalidateCache(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n cache && invalidaSubKeys(cache);\n return newState;\n}\n\nfunction increaseCacheHitCount(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (!cache.data) return state;\n cache.data = { ...cache.data, hitCount: cache.data.hitCount + 1 };\n return newState;\n}\n\nfunction invalidaSubKeys(state: CacheKeys) {\n if (state.data) {\n state.data = { ...state.data, invalid: true };\n }\n if (state.keys) {\n state.keys = { ...state.keys };\n for (const key in state.keys) {\n state.keys[key] = invalidaSubKeys({ ...state.keys[key] });\n }\n }\n return state;\n}\n","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\nimport { cacheReducer } from './cache.reducer';\n\n@NgModule({\n imports: [StoreModule.forFeature('cache', cacheReducer)],\n providers: [],\n})\nexport class CacheModule {}\n","export * from './cache.service';\nexport * from './cache.module';\nimport { invalidateCache, deleteCache } from './cache.actions';\nimport { selectCache } from './cache.selectors';\nexport const CacheActions = { invalidateCache, deleteCache };\nexport const CacheSelectors = { getCache: selectCache };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache"],"mappings":";;;;;;;;AAIgB,SAAA,QAAQ,CACtB,SAAc,EACd,UAAsD,EAAA;AAEtD,IAAA,OAAO,SAAS,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;AACzC,CAAC;AACK,SAAU,KAAK,CAAC,CAAyB,EAAA;IAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAgC,EAAE,KAAK,KAAI;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACb,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAEK,SAAU,UAAU,CAAC,IAAY,EAAA;AACrC,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAEK,SAAU,mBAAmB,CAAC,IAAY,EAAA;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC/C,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;AASG;SACa,kBAAkB,CAChC,aAA+D,EAC/D,QAAW,EACX,eAAuE,EAAA;AAEvE,IAAA,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,MAAuB,EAAA;QAC3D,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;AACL,YAAA,GAAG,WAAW;YACd,CAAC,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;SAC3D,CAAC;AACJ,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;AAaG;AACa,SAAA,oBAAoB,CAClC,aAA+D,EAC/D,kBAEC,EAAA;AAED,IAAA,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,MAAuB,EAAA;QAC3D,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACrD,QAAA,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE;AACzC,YAAA,QAAQ,CAAC,QAAa,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CACpD,QAAQ,CAAC,QAAQ,CAAC,EAClB,MAAM,CACP,CAAC;SACH;AACD,QAAA,OAAO,QAAQ,CAAC;AAClB,KAAC,CAAC;AACJ,CAAC;AAED;;;;AAIG;AACa,SAAA,YAAY,CAC1B,YAA8D,EAC9D,aAA2D,EAAA;AAE3D,IAAA,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,MAAuB,EAAA;QAC3D,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,QAAA,OAAO,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC5C,KAAC,CAAC;AACJ;;ACkBA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;SACa,0BAA0B,CAKxC,cAEgB,EAChB,GAAG,MAAS,EAAA;AAQZ,IAAA,QAAQ,CAAC,MAAwB,KAAI;QACnC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAChC,YAAY,IAAI,cAAc;AAC5B,cAAG,cAGC;cACF,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAEzD,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,YAAY;AACzB,cAAE,UAAU,CAAC,YAAY,CAAC;AAC1B,cAAE,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAEjC,MAAM,YAAY,GAAG,UAAU,CAC7B,YAAY,IAAI,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAC3E,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;AAEjD,QAAA,MAAM,UAAU,GAAG,eAAe,CAChC,YAAY,EACZ,MAAM,CAAC,eAAe,EACtB,QAAQ,EACR,MAAM,EACN,UAAU,CACX,CAAC;QAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEjE,MAAM,WAAW,GAAG,gBAAgB,CAClC,YAAY,EACZ,YAAY,EACZ,UAAU,CACX,CAAC;QAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEjE,QAAA,MAAM,OAAO,GAAG,YAAY,CAC1B,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,CACX,CAAC;AAEF,QAAA,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;AACxC,cAAE,qBAAqB,CAAsB,MAAM,CAAC,eAAe,CAAC;AACpE,cAAE,MAAM,CAAC,eAAe,CAAC;QAE7B,MAAM,mBAAmB,GACvB,YAAY,IAAI,sBAAsB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAExE,QAAA,MAAM,UAAU,GAAG,eAAe,CAChC,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,UAAU,CACX,CAAC;QAEF,OAAO;AACL,YAAA,OAAO,EAAE,UAAU;kBACf,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;AAC3C,kBAAE,UAAU;AACd,YAAA,SAAS,EAAE,UAAU;kBACjB,WAAW,CAAC,mBAAmB,EAAE,QAAQ,EAAE,MAAM,CAAC;AACpD,kBAAE,YAAY;YAChB,YAAY;AACZ,YAAA,OAAO,EAAE,OAAO,IAAI,aAAa,CAAC,YAAY,CAAC;AAC/C,YAAA,OAAO,EAAE,UAAU;SACpB,CAAC;AACJ,KAAC,EAMC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAW,EAAE,UAAkB,EAAE,YAAoB,EAAA;IACxE,MAAM,MAAM,GAAG,EAAS,CAAC;AACzB,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjD,MAAM,MAAM,GAAG,GAAG;AACf,aAAA,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;AACjC,aAAA,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACjC,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;KACxB;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,MAA0C,EAAA;IAE1C,MAAM,YAAY,GAAuC,EAAE,CAAC;AAC5D,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;AAC1B,YAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,SAAS;SACV;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAC1B,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;AAC7B,gBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACzD,IAAI,cAAc,EAAE;AAClB,oBAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM;iBACP;aACF;AACH,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAC1B,YAAA,MAAM,KAAK,CAAC,8BAA8B,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,wBAAwB,GAAG,YAAY,CAAC,IAAI,CAChD,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CACvC,CAAC;AAEF,QAAA,IAAI,wBAAwB;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClD;;AAEH,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;KACF;AACD,IAAA,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,eAAe,CAAC,YAAgD,EAAA;IACvE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,GAA6B,EAAE,OAAO,KAAI;QACpE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AAClC,QAAA,OAAO,GAAG,CAAC;KACZ,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,eAAe,CACtB,YAAgD,EAChD,eAAuB,EACvB,UAAkB,EAClB,YAAoB,EACpB,UAAsD,EAAA;IAEtD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,cAA4B,EAAE,OAAO,KAAI;AACnE,QAAA,IAAI,MAAM,GACR,OAAO,EAAE,OAAO,GAAG;AACjB,YAAA,eAAe,EAAE,eAAe;YAChC,UAAU;YACV,YAAY;YACZ,UAAU;SACX,CAAC,IAAI,EAAE,CAAC;AACX,QAAA,MAAM,GAAG,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AACpE,QAAA,OAAO,MAAM,CAAC;KACf,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,iBAAiB,CACxB,YAAgD,EAChD,UAAsD,EAAA;IAEtD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,cAAmC,EAAE,OAAO,KAAI;AAC1E,QAAA,IAAI,MAAM,GACR,OAAO,EAAE,SAAS,GAAG;AACnB,YAAA,iBAAiB,EAAE,cAAc;YACjC,UAAU;SACX,CAAC,IAAI,EAAE,CAAC;AACX,QAAA,MAAM,GAAG,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AACpE,QAAA,OAAO,MAAM,CAAC;KACf,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,gBAAgB,CACvB,YAAgD,EAChD,YAAiC,EACjC,UAAsD,EAAA;IAEtD,QACE,YAAY,CAAC,MAAM,CACjB,CAAC,cAAmD,EAAE,OAAO,KAAI;AAC/D,QAAA,IAAI,MAAM,GACR,OAAO,EAAE,QAAQ,GAAG;AAClB,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,gBAAgB,EAAE,cAAc;YAChC,UAAU;SACX,CAAC,IAAI,EAAE,CAAC;AACX,QAAA,MAAM,GAAG,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AACpE,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,EACD,EAAE,CACH,IAAI,EAAE,EACP;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,YAAgD,EAChD,UAAsD,EAAA;IAEtD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,cAAmB,EAAE,OAAO,KAAI;AAC1D,QAAA,MAAM,MAAM,GACV,OAAO,EAAE,YAAY,GAAG;AACtB,YAAA,oBAAoB,EAAE,cAAc;YACpC,UAAU;SACX,CAAC;YACF,cAAc;AACd,YAAA,EAAE,CAAC;AACL,QAAA,OAAO,MAAM,CAAC;KACf,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,YAAY,CACnB,YAAgD,EAChD,YAAiB,EACjB,UAAwB,EACxB,YAAiC,EACjC,WAAoC,EACpC,UAAsD,EAAA;IAEtD,OAAO,YAAY,CAAC,MAAM,CACxB,CACE,cAAiE,EACjE,OAAO,KACL;AACF,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG;YAChC,YAAY;YACZ,UAAU;YACV,YAAY;YACZ,WAAW;YACX,UAAU;AACX,SAAA,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,cAAc;cAC3B,CAAC,KAAK,GAAG,YAAY,EAAE,MAAM,KAAI;gBAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,gBAAA,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aAC/B;AACH,cAAE,MAAM,IAAI,cAAc,CAAC;KAC9B,EACD,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,YAAgD,EAChD,UAAwB,EACxB,mBAAwC,EACxC,UAAsD,EAAA;IAEtD,OAAO,YAAY,CAAC,MAAM,CACxB,CAAC,cAA+C,EAAE,OAAO,KAAI;AAC3D,QAAA,IAAI,MAAM,GACR,OAAO,EAAE,OAAO,GAAG;YACjB,UAAU;AACV,YAAA,YAAY,EAAE,mBAAmB;YACjC,UAAU;SACX,CAAC,IAAI,EAAE,CAAC;AACX,QAAA,MAAM,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAClE,QAAA,OAAO,MAAM,CAAC;KACf,EACD,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAK7B,aAAgB,EAAE,SAAY,EAAA;IAC9B,MAAM,EAAE,GAA+B,EAAE,CAAC;AAC1C,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,QAAA,EAAE,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,aAAoB,EAAE,SAAS,CAAC,IAAI,CAAQ,CAAC,CAAC;KACzE;AACD,IAAA,OAAO,EAAgC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;AACG,SAAU,qBAAqB,CAenC,iBAAoB,EAAA;AACpB,IAAA,QAAQ,CAAC,MAAwB,KAAI;AACnC,QAAA,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;AACxC,cAAE,qBAAqB,CAAM,MAAM,CAAC,eAAe,CAAC;AACpD,cAAE,MAAM,CAAC,eAAe,CAAC;QAC7B,MAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,MAAM,SAAS,GAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,GAAgB,EAAE,CAAC;AAC9B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,oBAAoB,CAAC,IAAI,MAAM,CAAC,OAAO,CACtD,iBAAiB,CAClB,EAAE;AACD,YAAA,MAAM,QAAQ,GAAG,cAAc,CAC7B,eAAe,EACf,CAAC,KAAU,KAAK,KAAK,CAAC,GAAG,CAAC,CAC3B,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC;gBACzC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,eAAe,EAAE,QAAQ;AAC1B,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;AACrC,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC;AACzC,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;SAClD;QACD,OAAO;YACL,OAAO;YACP,SAAS;AACT,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;YAClC,OAAO;SACR,CAAC;AACJ,KAAC,EAAO;AACV,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;AACG,SAAU,iBAAiB,CAW/B,iBAAoB,EAAA;AACpB,IAAA,QAAQ,CAAC,MAAwB,KAAI;AACnC,QAAA,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;AACxC,cAAE,qBAAqB,CAAM,MAAM,CAAC,eAAe,CAAC;AACpD,cAAE,MAAM,CAAC,eAAe,CAAC;QAC7B,IAAI,OAAO,GAAQ,EAAE,CAAC;QACtB,IAAI,SAAS,GAAQ,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,GAAgB,EAAE,CAAC;AAC9B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,oBAAoB,CAAC,IAAI,MAAM,CAAC,OAAO,CACtD,iBAAiB,CAClB,EAAE;AACD,YAAA,MAAM,QAAQ,GAAG,cAAc,CAC7B,eAAe,EACf,CAAC,KAAU,KAAK,KAAK,CAAC,GAAG,CAAC,CAC3B,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC;gBACzC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,eAAe,EAAE,QAAQ;AAC1B,aAAA,CAAC,CAAC;YACH,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;YACnD,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;AACzD,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;SAClD;QACD,OAAO;YACL,OAAO;YACP,SAAS;AACT,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;YAClC,OAAO;SACR,CAAC;AACJ,KAAC,EAAO;AACV,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;AACa,SAAA,2BAA2B,CAoBzC,kBAAqB,EAAE,iBAAoB,EAAA;AAC3C,IAAA,QAAQ,CAAC,MAAwB,KAAI;AACnC,QAAA,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;AACxC,cAAE,qBAAqB,CAAM,MAAM,CAAC,eAAe,CAAC;AACpD,cAAE,MAAM,CAAC,eAAe,CAAC;QAC7B,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;YAC7C,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,eAAe,EAAE,eAAe;AACjC,SAAA,CAAC,CAAC;QACH,MAAM,OAAO,GAAQ,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,SAAS,GAAQ,EAAE,GAAG,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,GAAgB,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,oBAAoB,CAAC,IAAI,MAAM,CAAC,OAAO,CACtD,iBAAiB,CAClB,EAAE;AACD,YAAA,MAAM,QAAQ,GAAG,cAAc,CAC7B,eAAe,EACf,CAAC,KAAU,KAAK,KAAK,CAAC,GAAG,CAAC,CAC3B,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC;gBACzC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,eAAe,EAAE,QAAQ;AAC1B,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;AACrC,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC;AACzC,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;SAClD;QACD,OAAO;YACL,OAAO;YACP,SAAS;YACT,OAAO,EAAE,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;YACpE,OAAO;SACR,CAAC;AACJ,KAAC,EAAO;AACV,CAAC;AAED;;;AAGG;AACG,SAAU,kBAAkB,CAQhC,CAUD,EAAA;AACC,IAAA,OAAO,CAA6C,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;AAcG;AACG,SAAU,gBAAgB,CAE9B,CAAI,EAAA;IACJ,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,IAAW,KAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,KAAI;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,OAAO,GAAG,CAAC;KACZ,EAAE,EAAS,CAAC,CAAC;AAChB,IAAA,OAAQ,cAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACxE;;MCxuBa,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9B,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AACd,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,EAAC,KAAU,EAAC,CAAC;AAetC,KAAA;IAbC,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KAC7D;AAED,IAAA,gBAAgB,CAAC,gBAAiC,EAAA;QAChD,OAAO,IAAI,CAAC,WAAW;cACnB,gBAAgB,CAAC,IAAI,CACnB,SAAS,CACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACnE,CACF;cACD,gBAAgB,CAAC;KACtB;8GAlBU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAX,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;AAsBL,SAAU,oBAAoB,CAAC,EAAU,EAAA;IAC7C,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,WAAA,CAAa,CAAC;AAC7B;;ACjCA;;;AAGG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAC3D,0BAA0B;;ACA5B,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,SAAS,iBAAiB,GAAA;IACxB,OAAO,EAAE,EAAE,CAAC;AACd,CAAC;AAED;;;;;;;;;;;AAWG;SACa,gBAAgB,CAG9B,QAAkB,EAAE,aAAqB,EAAE,YAAe,EAAA;IAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,CAAG,EAAA,aAAa,IAAI,iBAAiB,EAAE,EAAE,CAAC;IAE9D,MAAM,MAAM,GAAG,YAAY,CAAC;AAC1B,QAAA,eAAe,EAAE,qBAAqB,CAAQ,WAAW,CAAC;QAC1D,eAAe,EAAE,CAAI,CAAA,EAAA,WAAW,CAAG,CAAA,CAAA;AACpC,KAAA,CAAkB,CAAC;AAEpB,IAAA,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnE,IAAA,MAAM,SAAS,GACb,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7E,MAAM,yBAAyB,GAAG,QAAQ,CAAC,GAAG,CAC5C,2BAA2B,EAC3B,KAAK,CACN,CAAC;IACF,IAAI,CAAC,yBAAyB,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AACxB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,MAAM,EAAE,QAAQ;AACjB,SAAA,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;YAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAgB,CAAC;AACvC,YAAA,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACjC,YAAA,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,OAAO,GAAA;AACd,QAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC5D;;;;;;;AAOG;QACH,UAAU,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;KACvD;IAED,OAAO;QACL,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,QAAA,UAAU,CAAC,WAAwB,EAAA;AACjC,YAAA,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;AACtC,YAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SACjC;KACF,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DG;AAEG,MAAgB,gBAGpB,SAAQ,WAAW,CAAA;AAcnB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAHF,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAIlC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAC5B,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,aAAa,CACrB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KAC7C;IAID,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;KACvB;8GAjCmB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;;;AC1IX,SAAS,IAAI,CAAC,GAAoB,EAAA;AAChC,IAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAChC,OAAO,GAAG,IAAI,QAAQ;AACpB,UAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,aAAA,IAAI,EAAE;AACN,aAAA,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,KAAI;YACpB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,OAAO,MAAM,CAAC;SACf,EAAE,EAAS,CAAC;UACf,GAAG,CACR,CAAC;AACJ,CAAC;AAEK,SAAU,OAAO,CAAC,GAAa,EAAA;IACnC,OAAO,OAAO,GAAG,KAAK,QAAQ;UAC1B,CAAC,GAAG,CAAC;UACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACZ,YAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;AACT,CAAC;AAEe,SAAA,aAAa,CAC3B,IAAc,EACd,KAAiB,EAAA;IAEjB,IAAI,MAAM,GAA0B,KAAK,CAAC;AAC1C,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,GAAG,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS,CAAC;KAC/B;IACD,OAAO,MAAM,EAAE,IAAI,CAAC;AACtB,CAAC;AAEe,SAAA,YAAY,CAAC,KAAgB,EAAE,GAAW,EAAA;AACxD,IAAA,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;AAC1D;;AClDO,MAAM,kBAAkB,GAAG,qBAAqB,CAAa,OAAO,CAAC,CAAC;AAEtE,MAAM,WAAW,GAAG,CAAC,GAAa,KACvC,cAAc,CAAC,kBAAkB,EAAE,CAAC,KAAK,KACvC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CACnC;;ACLI,MAAMA,OAAK,GAAG,YAAY,CAC/B,eAAe,EACf,KAAK,EAMD,CACL,CAAC;AACK,MAAM,QAAQ,GAAG,YAAY,CAClC,mBAAmB,EACnB,KAAK,EAAqB,CAC3B,CAAC;AACK,MAAMC,iBAAe,GAAG,YAAY,CACzC,0BAA0B,EAC1B,KAAK,EAAqB,CAC3B,CAAC;AACK,MAAM,WAAW,GAAG,YAAY,CACrC,sBAAsB,EACtB,KAAK,EAAqB,CAC3B;;AChBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDG;AACa,SAAA,KAAK,CAAI,EACvB,KAAK,EACL,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,EACZ,IAAI,GAQL,EAAA;AACC,IAAA,MAAM,GAAG,GAAG,OAAO,IAAI,QAAQ,CAAC;AAChC,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACxC,KAAK,EAAE,EACP,SAAS,CAAC,CAAC,KAAK,KACd,KAAK,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;AACxC,UAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAClB,GAAG,CAAC,MAAM,KAAK,CAAC,QAAQ,CAACC,QAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAC1D;AACH,UAAE,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,QAAQ,CACZC,OAAkB,CAAC;YACjB,GAAG;AACH,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK;YACL,YAAY;AACb,SAAA,CAAC,CACH,CACF,CACF,CACN,CACF,CAAC;AACJ;;AC1FO,MAAM,YAAY,GAAe;AACtC,IAAA,IAAI,EAAE,EAAE;CACT,CAAC;AAEK,MAAM,YAAY,GAAG,aAAa,CACvC,YAAY,EACZ,EAAE,CAACA,OAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAC/D,aAAa,CACX,OAAO,CAAC,GAAG,CAAC,EACZ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAC/B,KAAK,EACL,YAAY,CACb,CACF,EACD,EAAE,CAACC,iBAA4B,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAI;AAClD,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,IAAA,OAAO,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,EACF,EAAE,CAACC,WAAwB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAI;AAC9C,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,IAAA,OAAO,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC,EACF,EAAE,CAACH,QAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAI;AAC3C,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,IAAA,OAAO,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC,CACH,CAAC;AAEF,SAAS,aAAa,CACpB,IAAc,EACd,KAAkC,EAClC,KAAiB,EACjB,YAAqB,EACrB,OAAgB,EAAA;AAEhB,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC;IACrB,IAAI,SAAS,GAA0B,SAAS,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;AACtB,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,GAAG,KAAK,CAAC;QAClB,KAAK,GAAG,CAAC,CAAC;KACX;AACD,IAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AACrB,UAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;UAC/C,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAE9B,IAAA,IACE,YAAY;AACZ,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,YAAY,EACjD;AACA,QAAA,MAAM,OAAO,GAAG,+BAA+B,CAC7C,SAAS,EACT,OAAO,IAAI,QAAQ,EACnB,YAAY,CACb,CAAC;AACF,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;AAC7B,YAAA,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE;AAC3B,gBAAA,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC5B;SACF;KACF;AACD,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAgB,EAChB,OAAe,EACf,YAAoB,EAAA;IAEpB,IAAI,CAAC,KAAK,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAE3C,IAAA,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC1C,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;AACnC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QACnC,OAAO,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,KAAC,CAAC,CAAC;AACH,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;;QAE7D,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzE,QAAA,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,QACE,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC,EACzE;AACJ,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,KAAiB,EAAA;AACzD,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC;AACrB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QAC9B,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AACrB,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,GAAG,CAAC,CAAC;KACX;IACD,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;SAC7B,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;AACvC,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,IAAc,EAAE,KAAiB,EAAA;AACxD,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC;AACrB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/B,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AACrB,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,GAAG,CAAC,CAAC;KACX;AACD,IAAA,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAc,EAAE,KAAiB,EAAA;AAC9D,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC;AACrB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/B,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AACrB,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,GAAG,CAAC,CAAC;KACX;IACD,IAAI,CAAC,KAAK,CAAC,IAAI;AAAE,QAAA,OAAO,KAAK,CAAC;AAC9B,IAAA,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;AAClE,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAAgB,EAAA;AACvC,IAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,QAAA,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC/C;AACD,IAAA,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC5B,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC3D;KACF;AACD,IAAA,OAAO,KAAK,CAAC;AACf;;MClKa,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAX,WAAW,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,EAAA;+GAAX,WAAW,EAAA,OAAA,EAAA,CAHZ,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAG5C,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACxD,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA,CAAA;;;MCHY,YAAY,GAAG,mBAAED,iBAAe,EAAE,WAAW,GAAG;MAChD,cAAc,GAAG,EAAE,QAAQ,EAAE,WAAW;;ACLrD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "$schema": "./node_modules/ng-packagr/package.schema.json",
3
3
  "name": "@ngrx-traits/core",
4
- "version": "16.0.0",
4
+ "version": "17.0.1",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
7
- "@angular/core": "^15.2.10",
8
- "@ngrx/effects": "^15.3.0",
9
- "@ngrx/entity": "^15.3.0",
10
- "@ngrx/store": "^15.3.0",
7
+ "@angular/core": "^17.1.0",
8
+ "@ngrx/effects": "^17.1.1",
9
+ "@ngrx/entity": "^17.1.1",
10
+ "@ngrx/store": "^17.1.1",
11
11
  "rxjs": "^7.8.1"
12
12
  },
13
13
  "repository": {