@ethlete/core 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +3 -3
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +3 -3
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +3 -3
  4. package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +19 -7
  5. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +3 -3
  6. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +3 -3
  7. package/esm2022/lib/directives/delayable/delayable.directive.mjs +3 -3
  8. package/esm2022/lib/directives/is-active-element/is-active-element.directive.mjs +3 -3
  9. package/esm2022/lib/directives/let/let.directive.mjs +3 -3
  10. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +3 -3
  11. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
  12. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +3 -3
  13. package/esm2022/lib/directives/repeat/repeat.directive.mjs +3 -3
  14. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +3 -3
  15. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
  16. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +3 -3
  17. package/esm2022/lib/directives/seo/seo.directive.mjs +3 -3
  18. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +3 -3
  19. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +3 -3
  20. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +3 -3
  21. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +3 -3
  22. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  24. package/esm2022/lib/services/click-observer.service.mjs +6 -6
  25. package/esm2022/lib/services/content-observer.service.mjs +6 -6
  26. package/esm2022/lib/services/focus-visible.service.mjs +3 -3
  27. package/esm2022/lib/services/resize-observer.service.mjs +6 -6
  28. package/esm2022/lib/services/router-state.service.mjs +17 -14
  29. package/esm2022/lib/services/viewport.service.mjs +3 -3
  30. package/fesm2022/ethlete-core.mjs +124 -109
  31. package/fesm2022/ethlete-core.mjs.map +1 -1
  32. package/lib/directives/animated-overlay/animated-overlay.directive.d.ts +8 -3
  33. package/lib/services/router-state.service.d.ts +49 -14
  34. package/package.json +6 -6
@@ -7,11 +7,11 @@ class MutationObserverFactory {
7
7
  create(callback) {
8
8
  return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' }); }
12
12
  }
13
13
  export { MutationObserverFactory };
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MutationObserverFactory, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MutationObserverFactory, decorators: [{
15
15
  type: Injectable,
16
16
  args: [{ providedIn: 'root' }]
17
17
  }] });
@@ -70,11 +70,11 @@ class ContentObserverService {
70
70
  this._observedElements.delete(element);
71
71
  }
72
72
  }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
74
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ContentObserverService, providedIn: 'root' }); }
73
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
74
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ContentObserverService, providedIn: 'root' }); }
75
75
  }
76
76
  export { ContentObserverService };
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ContentObserverService, decorators: [{
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ContentObserverService, decorators: [{
78
78
  type: Injectable,
79
79
  args: [{ providedIn: 'root' }]
80
80
  }], ctorParameters: function () { return [{ type: MutationObserverFactory }]; } });
@@ -22,11 +22,11 @@ class FocusVisibleService {
22
22
  onPointerDown() {
23
23
  this._hadKeyboardEvent = false;
24
24
  }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: FocusVisibleService, providedIn: 'root' }); }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: FocusVisibleService, providedIn: 'root' }); }
27
27
  }
28
28
  export { FocusVisibleService };
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: FocusVisibleService, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: FocusVisibleService, decorators: [{
30
30
  type: Injectable,
31
31
  args: [{
32
32
  providedIn: 'root',
@@ -7,11 +7,11 @@ class ResizeObserverFactory {
7
7
  create(callback) {
8
8
  return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' }); }
12
12
  }
13
13
  export { ResizeObserverFactory };
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverFactory, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverFactory, decorators: [{
15
15
  type: Injectable,
16
16
  args: [{ providedIn: 'root' }]
17
17
  }] });
@@ -66,11 +66,11 @@ class ResizeObserverService {
66
66
  this._observedElements.delete(element);
67
67
  }
68
68
  }
69
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverService, providedIn: 'root' }); }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverService, providedIn: 'root' }); }
71
71
  }
72
72
  export { ResizeObserverService };
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ResizeObserverService, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResizeObserverService, decorators: [{
74
74
  type: Injectable,
75
75
  args: [{ providedIn: 'root' }]
76
76
  }], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
@@ -3,14 +3,13 @@ import { NavigationEnd, Router } from '@angular/router';
3
3
  import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, map, pairwise, shareReplay, } from 'rxjs';
4
4
  import { equal } from '../utils';
5
5
  import * as i0 from "@angular/core";
6
+ const ET_DISABLE_SCROLL_TOP = Symbol('ET_DISABLE_SCROLL_TOP');
7
+ const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');
8
+ const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = Symbol('ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE');
6
9
  export const routerDisableScrollTop = (config = {}) => {
7
- if (!config.asReturnRoute) {
8
- return {
9
- disableScrollTop: true,
10
- };
11
- }
12
10
  return {
13
- disableScrollTopAsReturnRoute: true,
11
+ ...(!config.asReturnRoute ? { [ET_DISABLE_SCROLL_TOP]: true } : { [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: true }),
12
+ ...(config.onPathParamChange ? { [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]: true } : {}),
14
13
  };
15
14
  };
16
15
  export const ET_PROPERTY_REMOVED = Symbol('ET_PROPERTY_REMOVED');
@@ -110,7 +109,7 @@ class RouterStateService {
110
109
  combineLatest([this._state$.pipe(pairwise()), this._route$.pipe(pairwise())])
111
110
  .pipe(debounceTime(1))
112
111
  .subscribe(([[prevState, currState], [prevRoute, currRoute]]) => {
113
- const sameUrlNavigation = prevRoute === currRoute && equal(prevState.pathParams, currState.pathParams);
112
+ const sameUrlNavigation = prevRoute === currRoute;
114
113
  const didFragmentChange = prevState.fragment !== currState.fragment;
115
114
  if (sameUrlNavigation) {
116
115
  const allQueryParams = [
@@ -133,10 +132,14 @@ class RouterStateService {
133
132
  }
134
133
  }
135
134
  else {
136
- if (!(currState.data['disableScrollTopAsReturnRoute'] && prevState.data['disableScrollTop']) &&
137
- !currState.data['disableScrollTop']) {
138
- (config.scrollElement ?? document.documentElement).scrollTop = 0;
135
+ const viaReturnRoute = currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];
136
+ const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];
137
+ const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];
138
+ if (viaReturnRoute || explicitly || pathParamsChange) {
139
+ return;
139
140
  }
141
+ const el = config.scrollElement ?? document.documentElement;
142
+ el.scrollTop = 0;
140
143
  }
141
144
  });
142
145
  }
@@ -163,14 +166,14 @@ class RouterStateService {
163
166
  }
164
167
  return changes;
165
168
  }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
167
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: RouterStateService, providedIn: 'root' }); }
169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
170
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: RouterStateService, providedIn: 'root' }); }
168
171
  }
169
172
  export { RouterStateService };
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: RouterStateService, decorators: [{
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: RouterStateService, decorators: [{
171
174
  type: Injectable,
172
175
  args: [{
173
176
  providedIn: 'root',
174
177
  }]
175
178
  }], ctorParameters: function () { return []; } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yb3V0ZXItc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQVEsYUFBYSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFFSCxRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFakMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxTQUFzQyxFQUFFLEVBQUUsRUFBRTtJQUNqRixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtRQUN6QixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsNkJBQTZCLEVBQUUsSUFBSTtLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFakUsTUFHYSxrQkFBa0I7SUFvQjdCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNS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O2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7U0FFUCxrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGEsIE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHBhaXJ3aXNlLFxuICBzaGFyZVJlcGxheSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBlcXVhbCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHJvdXRlckRpc2FibGVTY3JvbGxUb3AgPSAoY29uZmlnOiB7IGFzUmV0dXJuUm91dGU/OiBib29sZWFuIH0gPSB7fSkgPT4ge1xuICBpZiAoIWNvbmZpZy5hc1JldHVyblJvdXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVTY3JvbGxUb3A6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGlzYWJsZVNjcm9sbFRvcEFzUmV0dXJuUm91dGU6IHRydWUsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgRVRfUFJPUEVSVFlfUkVNT1ZFRCA9IFN5bWJvbCgnRVRfUFJPUEVSVFlfUkVNT1ZFRCcpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUm91dGVyU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaXNTY3JvbGxUb3BPbk5hdmlnYXRpb25FbmFibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJy8nKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBkYXRhOiBEYXRhO1xuICAgIHBhdGhQYXJhbXM6IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtczogUGFyYW1zO1xuICAgIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZyYWdtZW50OiBzdHJpbmcgfCBudWxsO1xuICB9Pih7XG4gICAgdGl0bGU6IG51bGwsXG4gICAgZnJhZ21lbnQ6IG51bGwsXG4gICAgZGF0YToge30sXG4gICAgcGF0aFBhcmFtczoge30sXG4gICAgcXVlcnlQYXJhbXM6IHt9LFxuICB9KTtcblxuICBnZXQgcm91dGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgfVxuXG4gIGdldCByb3V0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGEpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLmRhdGE7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucGF0aFBhcmFtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmdldFZhbHVlKCkucGF0aFBhcmFtcztcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucXVlcnlQYXJhbXMpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5xdWVyeVBhcmFtcztcbiAgfVxuXG4gIGdldCB0aXRsZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUudGl0bGUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS50aXRsZTtcbiAgfVxuXG4gIGdldCBmcmFnbWVudCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZnJhZ21lbnQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGZyYWdtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5mcmFnbWVudDtcbiAgfVxuXG4gIGdldCBkYXRhQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXMkLnBpcGUoXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKCh2KSA9PiB0aGlzLl9maW5kQ2hhbmdlcyh2KSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFBhcmFtcyQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS51cmwgPT09IGIudXJsKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdXJsIH0gPSBldmVudDtcblxuICAgICAgICAgIGNvbnN0IHVybFdpdGhvdXRRdWVyeVBhcmFtcyA9IHVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgIGNvbnN0IHdpdGhvdXRGcmFnbWVudCA9IHVybFdpdGhvdXRRdWVyeVBhcmFtcy5zcGxpdCgnIycpWzBdO1xuXG4gICAgICAgICAgcmV0dXJuIHdpdGhvdXRGcmFnbWVudDtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuX3JvdXRlJCk7XG5cbiAgICB0aGlzLl9yb3V0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGxldCByb3V0ZSA9IHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gICAgICAgICAgd2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRhdGEsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHRpdGxlLCBmcmFnbWVudCB9ID0gcm91dGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5fc3RhdGUkKTtcbiAgfVxuXG4gIGVuYWJsZVNjcm9sbEVuaGFuY2VtZW50cyhcbiAgICBjb25maWc6IHtcbiAgICAgIHNjcm9sbEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICAgIHF1ZXJ5UGFyYW1UcmlnZ2VyTGlzdD86IHN0cmluZ1tdO1xuICAgICAgZnJhZ21lbnQ/OiB7XG4gICAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICBzbW9vdGg/OiBib29sZWFuO1xuICAgICAgfTtcbiAgICB9ID0ge30sXG4gICkge1xuICAgIGlmICh0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3RhdGUkLnBpcGUocGFpcndpc2UoKSksIHRoaXMuX3JvdXRlJC5waXBlKHBhaXJ3aXNlKCkpXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtbcHJldlN0YXRlLCBjdXJyU3RhdGVdLCBbcHJldlJvdXRlLCBjdXJyUm91dGVdXSkgPT4ge1xuICAgICAgICBjb25zdCBzYW1lVXJsTmF2aWdhdGlvbiA9IHByZXZSb3V0ZSA9PT0gY3VyclJvdXRlICYmIGVxdWFsKHByZXZTdGF0ZS5wYXRoUGFyYW1zLCBjdXJyU3RhdGUucGF0aFBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGRpZEZyYWdtZW50Q2hhbmdlID0gcHJldlN0YXRlLmZyYWdtZW50ICE9PSBjdXJyU3RhdGUuZnJhZ21lbnQ7XG5cbiAgICAgICAgaWYgKHNhbWVVcmxOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgY29uc3QgYWxsUXVlcnlQYXJhbXMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KE9iamVjdC5rZXlzKHByZXZTdGF0ZS5xdWVyeVBhcmFtcykuY29uY2F0KE9iamVjdC5rZXlzKGN1cnJTdGF0ZS5xdWVyeVBhcmFtcykpKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZFF1ZXJ5UGFyYW1zID0gYWxsUXVlcnlQYXJhbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gY3VyclN0YXRlLnF1ZXJ5UGFyYW1zW2tleV0gIT09IHByZXZTdGF0ZS5xdWVyeVBhcmFtc1trZXldLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWNvbmZpZy5xdWVyeVBhcmFtVHJpZ2dlckxpc3Q/Lmxlbmd0aCAmJiAhZGlkRnJhZ21lbnRDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYXNlUXVlcnlQYXJhbXMgPSBjaGFuZ2VkUXVlcnlQYXJhbXMuc29tZSgoa2V5KSA9PiBjb25maWcucXVlcnlQYXJhbVRyaWdnZXJMaXN0Py5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICBjb25zdCBjYXNlRnJhZ21lbnQgPSBkaWRGcmFnbWVudENoYW5nZSAmJiBjb25maWcuZnJhZ21lbnQ/LmVuYWJsZWQ7XG5cbiAgICAgICAgICBpZiAoY2FzZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAoY29uZmlnLnNjcm9sbEVsZW1lbnQgPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2FzZUZyYWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjdXJyU3RhdGUuZnJhZ21lbnQgPz8gJycpO1xuXG4gICAgICAgICAgICBpZiAoZnJhZ21lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGZyYWdtZW50RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiBjb25maWcuZnJhZ21lbnQ/LnNtb290aCA/ICdzbW9vdGgnIDogJ2F1dG8nIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKGN1cnJTdGF0ZS5kYXRhWydkaXNhYmxlU2Nyb2xsVG9wQXNSZXR1cm5Sb3V0ZSddICYmIHByZXZTdGF0ZS5kYXRhWydkaXNhYmxlU2Nyb2xsVG9wJ10pICYmXG4gICAgICAgICAgICAhY3VyclN0YXRlLmRhdGFbJ2Rpc2FibGVTY3JvbGxUb3AnXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgKGNvbmZpZy5zY3JvbGxFbGVtZW50ID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0UXVlcnlQYXJhbTxUID0gc3RyaW5nIHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLnF1ZXJ5UGFyYW1zW2tleV0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0UGF0aFBhcmFtPFQgPSBzdHJpbmcgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucGF0aFBhcmFtc1trZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdERhdGE8VCA9IHVua25vd24+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZGF0YVtrZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBlcXVhbChhLCBiKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRDaGFuZ2VzPFQgZXh0ZW5kcyBbUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+XSwgSiBleHRlbmRzIFBhcnRpYWw8VFtudW1iZXJdPj4oW1xuICAgIHByZXZpb3VzLFxuICAgIGN1cnJlbnQsXG4gIF06IFQpIHtcbiAgICBjb25zdCBjaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQ8a2V5b2YgdHlwZW9mIHByZXZpb3VzICYga2V5b2YgdHlwZW9mIGN1cnJlbnQ+KFtcbiAgICAgIC4uLk9iamVjdC5rZXlzKHByZXZpb3VzKSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKGN1cnJlbnQpLFxuICAgIF0pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykge1xuICAgICAgaWYgKCFlcXVhbChwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0pKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGN1cnJlbnRba2V5XSA9PT0gdW5kZWZpbmVkID8gRVRfUFJPUEVSVFlfUkVNT1ZFRCA6IGN1cnJlbnRba2V5XTtcblxuICAgICAgICBjaGFuZ2VzW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXMgYXMgSjtcbiAgfVxufVxuIl19
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yb3V0ZXItc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQVEsYUFBYSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFFSCxRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFakMsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUM5RCxNQUFNLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBQzlGLE1BQU0sMENBQTBDLEdBQUcsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7QUFnQnhHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsU0FBdUMsRUFBRSxFQUFFLEVBQUU7SUFDbEYsT0FBTztRQUNMLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsSCxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsMENBQTBDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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LFFBQVEsQ0FBQztZQUN4QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUN2QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUU1RSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3BCO1NBQ0Y7UUFFRCxPQUFPLE9BQVksQ0FBQztJQUN0QixDQUFDOzhHQXpQVSxrQkFBa0I7a0hBQWxCLGtCQUFrQixjQUZqQixNQUFNOztTQUVQLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YSwgTmF2aWdhdGlvbkVuZCwgUGFyYW1zLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgcGFpcndpc2UsXG4gIHNoYXJlUmVwbGF5LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBFVF9ESVNBQkxFX1NDUk9MTF9UT1AgPSBTeW1ib2woJ0VUX0RJU0FCTEVfU0NST0xMX1RPUCcpO1xuY29uc3QgRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURSA9IFN5bWJvbCgnRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURScpO1xuY29uc3QgRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFID0gU3ltYm9sKCdFVF9ESVNBQkxFX1NDUk9MTF9UT1BfT05fUEFUSF9QQVJBTV9DSEFOR0UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJEaXNhYmxlU2Nyb2xsVG9wQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBzY3JvbGwgdG8gdG9wIE9OTFkgd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gdGhpcyByb3V0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFzUmV0dXJuUm91dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgc2Nyb2xsIHRvIHRvcCB3aGVuIGEgcGF0aCBwYXJhbSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb25QYXRoUGFyYW1DaGFuZ2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgcm91dGVyRGlzYWJsZVNjcm9sbFRvcCA9IChjb25maWc6IFJvdXRlckRpc2FibGVTY3JvbGxUb3BDb25maWcgPSB7fSkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLighY29uZmlnLmFzUmV0dXJuUm91dGUgPyB7IFtFVF9ESVNBQkxFX1NDUk9MTF9UT1BdOiB0cnVlIH0gOiB7IFtFVF9ESVNBQkxFX1NDUk9MTF9UT1BfQVNfUkVUVVJOX1JPVVRFXTogdHJ1ZSB9KSxcbiAgICAuLi4oY29uZmlnLm9uUGF0aFBhcmFtQ2hhbmdlID8geyBbRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFXTogdHJ1ZSB9IDoge30pLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IEVUX1BST1BFUlRZX1JFTU9WRUQgPSBTeW1ib2woJ0VUX1BST1BFUlRZX1JFTU9WRUQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxFbmhhbmNlbWVudHNDb25maWcge1xuICAvKipcbiAgICogVGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIHNjcm9sbEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBxdWVyeSBwYXJhbXMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIHNjcm9sbCB0byB0b3AuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBleGFtcGxlIFsncGFnZSddIC8vIHdpbGwgc2Nyb2xsIHRvIHRvcCB3aGVuIHRoZSBwYWdlIHF1ZXJ5IHBhcmFtIGNoYW5nZXNcbiAgICovXG4gIHF1ZXJ5UGFyYW1UcmlnZ2VyTGlzdD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlnIGZvciBmcmFnbWVudCBzY3JvbGxpbmcuXG4gICAqL1xuICBmcmFnbWVudD86IHtcbiAgICAvKipcbiAgICAgKiBFbmFibGUgZnJhZ21lbnQgc2Nyb2xsaW5nIChzY3JvbGwgdG8gZWxlbWVudCB3aXRoIGlkKVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2Ugc21vb3RoIHNjcm9sbGluZyBvciBub3QuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBzbW9vdGg/OiBib29sZWFuO1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUm91dGVyU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaXNTY3JvbGxUb3BPbk5hdmlnYXRpb25FbmFibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJy8nKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBkYXRhOiBEYXRhO1xuICAgIHBhdGhQYXJhbXM6IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtczogUGFyYW1zO1xuICAgIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZyYWdtZW50OiBzdHJpbmcgfCBudWxsO1xuICB9Pih7XG4gICAgdGl0bGU6IG51bGwsXG4gICAgZnJhZ21lbnQ6IG51bGwsXG4gICAgZGF0YToge30sXG4gICAgcGF0aFBhcmFtczoge30sXG4gICAgcXVlcnlQYXJhbXM6IHt9LFxuICB9KTtcblxuICBnZXQgcm91dGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgfVxuXG4gIGdldCByb3V0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGEpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLmRhdGE7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucGF0aFBhcmFtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmdldFZhbHVlKCkucGF0aFBhcmFtcztcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucXVlcnlQYXJhbXMpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5xdWVyeVBhcmFtcztcbiAgfVxuXG4gIGdldCB0aXRsZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUudGl0bGUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS50aXRsZTtcbiAgfVxuXG4gIGdldCBmcmFnbWVudCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZnJhZ21lbnQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGZyYWdtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5mcmFnbWVudDtcbiAgfVxuXG4gIGdldCBkYXRhQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXMkLnBpcGUoXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKCh2KSA9PiB0aGlzLl9maW5kQ2hhbmdlcyh2KSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFBhcmFtcyQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS51cmwgPT09IGIudXJsKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdXJsIH0gPSBldmVudDtcblxuICAgICAgICAgIGNvbnN0IHVybFdpdGhvdXRRdWVyeVBhcmFtcyA9IHVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgIGNvbnN0IHdpdGhvdXRGcmFnbWVudCA9IHVybFdpdGhvdXRRdWVyeVBhcmFtcy5zcGxpdCgnIycpWzBdO1xuXG4gICAgICAgICAgcmV0dXJuIHdpdGhvdXRGcmFnbWVudDtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuX3JvdXRlJCk7XG5cbiAgICB0aGlzLl9yb3V0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGxldCByb3V0ZSA9IHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gICAgICAgICAgd2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRhdGEsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHRpdGxlLCBmcmFnbWVudCB9ID0gcm91dGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5fc3RhdGUkKTtcbiAgfVxuXG4gIGVuYWJsZVNjcm9sbEVuaGFuY2VtZW50cyhjb25maWc6IFNjcm9sbEVuaGFuY2VtZW50c0NvbmZpZyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX2lzU2Nyb2xsVG9wT25OYXZpZ2F0aW9uRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2Nyb2xsVG9wT25OYXZpZ2F0aW9uRW5hYmxlZCA9IHRydWU7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zdGF0ZSQucGlwZShwYWlyd2lzZSgpKSwgdGhpcy5fcm91dGUkLnBpcGUocGFpcndpc2UoKSldKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW1twcmV2U3RhdGUsIGN1cnJTdGF0ZV0sIFtwcmV2Um91dGUsIGN1cnJSb3V0ZV1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbWVVcmxOYXZpZ2F0aW9uID0gcHJldlJvdXRlID09PSBjdXJyUm91dGU7XG4gICAgICAgIGNvbnN0IGRpZEZyYWdtZW50Q2hhbmdlID0gcHJldlN0YXRlLmZyYWdtZW50ICE9PSBjdXJyU3RhdGUuZnJhZ21lbnQ7XG5cbiAgICAgICAgaWYgKHNhbWVVcmxOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgY29uc3QgYWxsUXVlcnlQYXJhbXMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KE9iamVjdC5rZXlzKHByZXZTdGF0ZS5xdWVyeVBhcmFtcykuY29uY2F0KE9iamVjdC5rZXlzKGN1cnJTdGF0ZS5xdWVyeVBhcmFtcykpKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZFF1ZXJ5UGFyYW1zID0gYWxsUXVlcnlQYXJhbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gY3VyclN0YXRlLnF1ZXJ5UGFyYW1zW2tleV0gIT09IHByZXZTdGF0ZS5xdWVyeVBhcmFtc1trZXldLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWNvbmZpZy5xdWVyeVBhcmFtVHJpZ2dlckxpc3Q/Lmxlbmd0aCAmJiAhZGlkRnJhZ21lbnRDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYXNlUXVlcnlQYXJhbXMgPSBjaGFuZ2VkUXVlcnlQYXJhbXMuc29tZSgoa2V5KSA9PiBjb25maWcucXVlcnlQYXJhbVRyaWdnZXJMaXN0Py5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICBjb25zdCBjYXNlRnJhZ21lbnQgPSBkaWRGcmFnbWVudENoYW5nZSAmJiBjb25maWcuZnJhZ21lbnQ/LmVuYWJsZWQ7XG5cbiAgICAgICAgICBpZiAoY2FzZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAoY29uZmlnLnNjcm9sbEVsZW1lbnQgPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2FzZUZyYWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjdXJyU3RhdGUuZnJhZ21lbnQgPz8gJycpO1xuXG4gICAgICAgICAgICBpZiAoZnJhZ21lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGZyYWdtZW50RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiBjb25maWcuZnJhZ21lbnQ/LnNtb290aCA/ICdzbW9vdGgnIDogJ2F1dG8nIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2aWFSZXR1cm5Sb3V0ZSA9XG4gICAgICAgICAgICBjdXJyU3RhdGUuZGF0YVtFVF9ESVNBQkxFX1NDUk9MTF9UT1BfQVNfUkVUVVJOX1JPVVRFXSAmJiBwcmV2U3RhdGUuZGF0YVtFVF9ESVNBQkxFX1NDUk9MTF9UT1BdO1xuICAgICAgICAgIGNvbnN0IGV4cGxpY2l0bHkgPSBjdXJyU3RhdGUuZGF0YVtFVF9ESVNBQkxFX1NDUk9MTF9UT1BdO1xuICAgICAgICAgIGNvbnN0IHBhdGhQYXJhbXNDaGFuZ2UgPSBjdXJyU3RhdGUuZGF0YVtFVF9ESVNBQkxFX1NDUk9MTF9UT1BfT05fUEFUSF9QQVJBTV9DSEFOR0VdO1xuXG4gICAgICAgICAgaWYgKHZpYVJldHVyblJvdXRlIHx8IGV4cGxpY2l0bHkgfHwgcGF0aFBhcmFtc0NoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVsID0gY29uZmlnLnNjcm9sbEVsZW1lbnQgPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0UXVlcnlQYXJhbTxUID0gc3RyaW5nIHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLnF1ZXJ5UGFyYW1zW2tleV0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0UGF0aFBhcmFtPFQgPSBzdHJpbmcgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucGF0aFBhcmFtc1trZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdERhdGE8VCA9IHVua25vd24+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZGF0YVtrZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBlcXVhbChhLCBiKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRDaGFuZ2VzPFQgZXh0ZW5kcyBbUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+XSwgSiBleHRlbmRzIFBhcnRpYWw8VFtudW1iZXJdPj4oW1xuICAgIHByZXZpb3VzLFxuICAgIGN1cnJlbnQsXG4gIF06IFQpIHtcbiAgICBjb25zdCBjaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQ8a2V5b2YgdHlwZW9mIHByZXZpb3VzICYga2V5b2YgdHlwZW9mIGN1cnJlbnQ+KFtcbiAgICAgIC4uLk9iamVjdC5rZXlzKHByZXZpb3VzKSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKGN1cnJlbnQpLFxuICAgIF0pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykge1xuICAgICAgaWYgKCFlcXVhbChwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0pKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGN1cnJlbnRba2V5XSA9PT0gdW5kZWZpbmVkID8gRVRfUFJPUEVSVFlfUkVNT1ZFRCA6IGN1cnJlbnRba2V5XTtcblxuICAgICAgICBjaGFuZ2VzW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXMgYXMgSjtcbiAgfVxufVxuIl19
@@ -204,8 +204,8 @@ class ViewportService {
204
204
  }
205
205
  return 'xs';
206
206
  }
207
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable }); }
208
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ViewportService, providedIn: 'root' }); }
207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable }); }
208
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ViewportService, providedIn: 'root' }); }
209
209
  }
210
210
  __decorate([
211
211
  Memo(),
@@ -224,7 +224,7 @@ __decorate([
224
224
  __metadata("design:returntype", void 0)
225
225
  ], ViewportService.prototype, "_buildMediaQuery", null);
226
226
  export { ViewportService };
227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: ViewportService, decorators: [{
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ViewportService, decorators: [{
228
228
  type: Injectable,
229
229
  args: [{
230
230
  providedIn: 'root',