@ecodev/natural 56.0.4 → 57.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.
@@ -1,9 +1,9 @@
1
1
  import { DOCUMENT } from '@angular/common';
2
2
  import { Inject, Injectable, InjectionToken, LOCALE_ID } from '@angular/core';
3
3
  import { NavigationEnd, PRIMARY_OUTLET } from '@angular/router';
4
- import { filter, startWith } from 'rxjs/operators';
5
4
  import { NaturalDialogTriggerComponent } from '../../dialog-trigger/dialog-trigger.component';
6
- import { combineLatest, Observable, of } from 'rxjs';
5
+ import { combineLatest, filter, map, Observable, of, startWith, switchMap } from 'rxjs';
6
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/router";
9
9
  import * as i2 from "@angular/platform-browser";
@@ -38,16 +38,20 @@ export class NaturalSeoService {
38
38
  combineLatest({
39
39
  config: configToken instanceof Observable ? configToken.pipe(startWith(this.config)) : of(configToken),
40
40
  navigationEnd: this.router.events.pipe(filter(event => event instanceof NavigationEnd)),
41
- }).subscribe(({ config }) => {
41
+ })
42
+ .pipe(takeUntilDestroyed(), switchMap(({ config }) => {
42
43
  this.config = config;
43
44
  const root = this.router.routerState.root.snapshot;
44
45
  this.routeData = this.getRouteData(root);
45
46
  const seo = this.routeData.seo ?? { title: '' };
46
47
  const dialogRouteData = this.getDialogRouteData(root);
47
48
  const dialogSeo = dialogRouteData?.seo;
48
- let basic = this.toBasic(seo, this.routeData);
49
- if (dialogRouteData && dialogSeo) {
50
- const dialogBasic = this.toBasic(dialogSeo, dialogRouteData);
49
+ const basic = this.toBasic(seo, this.routeData);
50
+ const dialogBasic = dialogRouteData && dialogSeo ? this.toBasic(dialogSeo, dialogRouteData) : of(null);
51
+ return combineLatest({ basic, dialogBasic });
52
+ }))
53
+ .subscribe(({ basic, dialogBasic }) => {
54
+ if (dialogBasic) {
51
55
  basic = {
52
56
  ...dialogBasic,
53
57
  title: this.join([dialogBasic.title, basic.title]),
@@ -97,7 +101,7 @@ export class NaturalSeoService {
97
101
  const urlTree = this.router.parseUrl(this.router.url);
98
102
  // need better like something recursive ?
99
103
  if (urlTree.root.hasChildren()) {
100
- const segments = urlTree.root.children.primary.segments;
104
+ const segments = urlTree.root.children.primary?.segments;
101
105
  if (segments && segments.length > 0) {
102
106
  url += '/' + segments.map(segment => segment.path).join('/');
103
107
  }
@@ -200,20 +204,23 @@ export class NaturalSeoService {
200
204
  }
201
205
  toBasic(seo, routeData) {
202
206
  if (typeof seo === 'function') {
203
- return seo(routeData);
207
+ const result = seo(routeData);
208
+ return result instanceof Observable ? result : of(result);
204
209
  }
205
- else if ('resolveKey' in seo) {
206
- const data = routeData[seo.resolveKey];
207
- if (!data) {
208
- throw new Error('Could not find resolved data for SEO service with key: ' + seo.resolveKey);
210
+ else if ('resolve' in seo) {
211
+ if (!('model' in routeData)) {
212
+ throw new Error('Could not find resolved data `model` for SEO service');
209
213
  }
210
- return {
211
- title: data.model?.fullName ?? data.model?.name ?? '',
212
- description: data.model?.description,
213
- robots: seo.robots,
214
- };
214
+ const model = routeData.model;
215
+ return (model instanceof Observable ? model : of(model)).pipe(map(value => {
216
+ return {
217
+ title: value?.fullName ?? value?.name ?? '',
218
+ description: value?.description,
219
+ robots: seo.robots,
220
+ };
221
+ }));
215
222
  }
216
- return seo;
223
+ return of(seo);
217
224
  }
218
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalSeoService, deps: [{ token: NATURAL_SEO_CONFIG }, { token: i1.Router }, { token: i2.Title }, { token: i2.Meta }, { token: DOCUMENT }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
219
226
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalSeoService, providedIn: 'root' }); }
@@ -233,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
233
240
  type: Inject,
234
241
  args: [LOCALE_ID]
235
242
  }] }] });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9jb21tb24vc2VydmljZXMvc2VvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUErQixhQUFhLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RixPQUFPLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUE2R25ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQiwrQkFBK0IsQ0FBQyxDQUFDO0FBRXhHLE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBVztJQUNqQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFVRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQU0xQixZQUNnQyxXQUE2QixFQUN4QyxNQUFjLEVBQ2QsWUFBbUIsRUFDbkIsY0FBb0IsRUFDRixRQUFrQixFQUMxQixNQUFjO1FBSnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBTTtRQUNGLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDMUIsV0FB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QUM7SUFDZixDQUFDOzhHQS9OUSxpQkFBaUIsa0JBT2Qsa0JBQWtCLDRFQUlsQixRQUFRLGFBQ1IsU0FBUztrSEFaWixpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBSXpCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgTE9DQUxFX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWV0YSwgVGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBEYXRhLCBOYXZpZ2F0aW9uRW5kLCBQUklNQVJZX09VVExFVCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtmaWx0ZXIsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsRGlhbG9nVHJpZ2dlckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGlhbG9nLXRyaWdnZXIvZGlhbG9nLXRyaWdnZXIuY29tcG9uZW50JztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBOYXR1cmFsU2VvID0gTmF0dXJhbFNlb0Jhc2ljIHwgTmF0dXJhbFNlb0NhbGxiYWNrIHwgTmF0dXJhbFNlb1Jlc29sdmU7XG5cbi8qKlxuICogVHlwaWNhbGx5IHVzZWQgZm9yIFwic3RhdGljXCIgcGFnZXMgd2hlcmUgdGhlcmUgaXMgbm90IGEgc2luZ2xlIHJlc29sdmVkIG9iamVjdC4gU29cbiAqIGFsbCBwYWdlcyBzdWNoIGFzIFwiQWJvdXRcIiwgb3IgbGlzdCBvZiBvYmplY3RzIChsaXN0IG9mIHJpc2tzLCBldGMuKS5cbiAqXG4gKiBUaGlzIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNlZCB2YXJpYW50LlxuICovXG5leHBvcnQgdHlwZSBOYXR1cmFsU2VvQmFzaWMgPSBSb2JvdHMgJiB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhZ2UgdGl0bGUsIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCBhcHBsaWNhdGlvbiBuYW1lXG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElmIGdpdmVuIHdpbGwgYmUgdXNlZCBhcyBwYWdlIGRlc2NyaXB0aW9uLCBvdGhlcndpc2UgZmFsbGJhY2sgb24gZGVmYXVsdCB2YWx1ZVxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBjYW5vbmljYWwgdGFnJ3MgdXJsXG4gICAgICovXG4gICAgY2Fub25pY2FsUXVlcnlQYXJhbXNXaGl0ZWxpc3Q/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgTmF0dXJhbExpbmtEZWZpbml0aW9uID0ge1xuICAgIGNoYXJzZXQ/OiBzdHJpbmc7XG4gICAgY3Jvc3NvcmlnaW4/OiBzdHJpbmc7XG4gICAgaHJlZj86IHN0cmluZztcbiAgICBocmVmbGFuZz86IHN0cmluZztcbiAgICBtZWRpYT86IHN0cmluZztcbiAgICByZWw/OiBzdHJpbmc7XG4gICAgcmV2Pzogc3RyaW5nO1xuICAgIHNpemVzPzogc3RyaW5nO1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xufSAmIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4vKipcbiAqIFR5cGljYWxseSB1c2VkIGZvciBhIFwiZHluYW1pY1wiIHBhZ2Ugd2hlcmUgYSBzaW5nbGUgb2JqZWN0IGlzIHJlc29sdmVkLiBTbyBhIGRldGFpbCBwYWdlLCBzdWNoXG4gKiBhcyB0aGUgZGV0YWlsIG9mIGEgcmlzayBhbmQgc28gb24uXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxTZW9SZXNvbHZlID0gUm9ib3RzICYge1xuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gYmUgdXNlZCBpbiB0aGUgcmVzb2x2ZWQgZGF0YSB0byBmaW5kIHRoZSByZXNvbHZlZCBvYmplY3QuIFRoZSBmdWxsTmFtZVxuICAgICAqIG9yIG5hbWUgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgZm9yIHBhZ2UgdGl0bGUsIGFuZCB0aGUgb2JqZWN0IGRlc2NyaXB0aW9uLCBpZiBhbnksXG4gICAgICogd2lsbCBiZSB1c2VkIGZvciBwYWdlIGRlc2NyaXB0aW9uLlxuICAgICAqL1xuICAgIHJlc29sdmVLZXk6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmFyZWx5IHVzZWQgZm9yIGEgcGFnZSB0aGF0IGhhcyB2ZXJ5IHNwZWNpZmljIG5lZWRzIGFuZCBuZWVkIHRvIGJ1aWxkIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBhIGN1c3RvbSB3YXkuXG4gKiBUaGUgY2FsbGJhY2sgYmFjayB3aWxsIGJlIGdpdmVuIHRoZSByZXNvbHZlZCBkYXRhLCBhbmQgaXQgaXMgdXAgdG8gdGhlIGNhbGxiYWNrIHRvIGZpbmQgd2hhdGV2ZXIgaXQgbmVlZHMuXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxTZW9DYWxsYmFjayA9IChyb3V0ZURhdGE6IERhdGEpID0+IE5hdHVyYWxTZW9CYXNpYztcblxuLyoqXG4gKiBUeXBpY2FsbHkgdXNlZCB0byB0eXBlIHRoZSByb3V0aW5nIGRhdGEgcmVjZWl2ZWQgaW4gdGhlIGNvbXBvbmVudCwgZWc6XG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIE15Q29tcG9uZW50IGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0RGV0YWlsPE15U2VydmljZSwgTmF0dXJhbFNlb1Jlc29sdmVEYXRhPiB7fVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxTZW9SZXNvbHZlRGF0YSA9IHtcbiAgICBzZW86IE5hdHVyYWxTZW9CYXNpYztcbn07XG5cbnR5cGUgUm9ib3RzID0ge1xuICAgIC8qKlxuICAgICAqIElmIGdpdmVuIHdpbGwgYmUgdXNlZCBhcyByb2JvdHMgbWV0YSB0YWcsIG90aGVyd2lzZSBmYWxsYmFjayBvbiBkZWZhdWx0IHZhbHVlXG4gICAgICovXG4gICAgcm9ib3RzPzogc3RyaW5nO1xufTtcblxudHlwZSBOYXR1cmFsU2VvQ29uZmlnUGxhaW4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBhbHdheXMgYXBwZWFyIGluIHRoZSBwYWdlIHRpdGxlXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXBwbGljYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGZvciBkZXNjcmlwdGlvbiBtZXRhIHRoYXQgaXMgdXNlZCBmb3IgcGFnZXMgd2l0aG91dCB2YWx1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlZmF1bHREZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdmFsdWUgZm9yIHJvYm90cyBtZXRhIHRoYXQgaXMgdXNlZCBmb3IgcGFnZXMgd2l0aG91dCB2YWx1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlZmF1bHRSb2JvdHM/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJZiBnaXZlbiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHJvdXRlIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZyB0aGF0IHdpbGxcbiAgICAgKiBiZSBpbnNlcnRlZCBiZXR3ZWVuIHRoZSBwYWdlIHRpdGxlIGFuZCB0aGUgYXBwbGljYXRpb24gbmFtZS5cbiAgICAgKlxuICAgICAqIEl0IHNob3VsZCBiZSB1c2VkIHRvIGNvbXBsZXRlIHRoZSB0aXRsZSB3aXRoIGluZm8gdGhhdCBhcmUgb2Z0ZW4sIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWx3YXlzLFxuICAgICAqIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBlbnRpcmUgYXBwbGljYXRpb24uIFR5cGljYWxseSB1c2VkIGZvciB0aGUgc2l0ZS9zdGF0ZSBpbiBPS3BpbG90LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dHJhUGFydD86IChyb3V0ZURhdGE6IERhdGEpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZ2VuZXJhdGUgYWx0ZXJuYXRpdmUgdGFnc1xuICAgICAqIDxsaW5rIHJlbD1cImFsdGVybmF0ZVwiIGhyZWZsYW5nPVwiZW5cIiBocmVmPVwiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vZW4vcGFnZVwiPlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxhbmd1YWdlcz86IFJlYWRvbmx5PHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hdHVyYWxTZW9Db25maWcgPSBOYXR1cmFsU2VvQ29uZmlnUGxhaW4gfCBPYnNlcnZhYmxlPE5hdHVyYWxTZW9Db25maWdQbGFpbj47XG5leHBvcnQgY29uc3QgTkFUVVJBTF9TRU9fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE5hdHVyYWxTZW9Db25maWc+KCdDb25maWd1cmF0aW9uIGZvciBTRU8gc2VydmljZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBUYWdzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLzxcXC8/W14+XSs+L2csICcnKTtcbn1cblxudHlwZSBSZXNvbHZlZERhdGEgPSB7XG4gICAgbW9kZWw/OiB7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxOYW1lPzogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICB9O1xufTtcblxuLyoqXG4gKiBUaGlzIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgdG8ga2VlcCB1cCB0byBkYXRlIHRoZSBwYWdlIHRpdGxlIGFuZCBwYWdlIGRlc2NyaXB0aW9uIGFjY29yZGluZ1xuICogdG8gd2hhdCBpcyBjb25maWd1cmVkIGluIHJvdXRpbmcgb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogSXQgKiptdXN0KiogYmUgaW5qZWN0ZWQgaW4gdGhlIHJvb3QgbW9kdWxlIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBoYXZlIGVmZmVjdHMgaW4gYWxsIG1vZHVsZXMuIEFuZCBpdFxuICogbXVzdCBiZSBwcm92aWRlZCBhIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVGhlIGZ1bGwgdGl0bGUgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICpcbiAqICAgICBkaWFsb2cgdGl0bGUgLSBwYWdlIHRpdGxlIC0gZXh0cmEgcGFydCAtIGFwcCBuYW1lXG4gKlxuICogYGRpYWxvZyB0aXRsZWAgb25seSBleGlzdHMgaWYgYSBgTmF0dXJhbERpYWxvZ1RyaWdnZXJDb21wb25lbnRgIGlzIGN1cnJlbnRseSBvcGVuLCBhbmQgdGhhdCBzb21lIFNFTyBpc1xuICogY29uZmlndXJlZCBmb3IgaXQgaW4gdGhlIHJvdXRpbmcuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxTZW9TZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJvdXRlRGF0YT86IERhdGE7XG4gICAgcHJpdmF0ZSBjb25maWc6IE5hdHVyYWxTZW9Db25maWdQbGFpbiA9IHtcbiAgICAgICAgYXBwbGljYXRpb25OYW1lOiAnJyxcbiAgICB9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE5BVFVSQUxfU0VPX0NPTkZJRykgY29uZmlnVG9rZW46IE5hdHVyYWxTZW9Db25maWcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXRhVGFnU2VydmljZTogTWV0YSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nLFxuICAgICkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgIGNvbmZpZzogY29uZmlnVG9rZW4gaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gY29uZmlnVG9rZW4ucGlwZShzdGFydFdpdGgodGhpcy5jb25maWcpKSA6IG9mKGNvbmZpZ1Rva2VuKSxcbiAgICAgICAgICAgIG5hdmlnYXRpb25FbmQ6IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKSxcbiAgICAgICAgfSkuc3Vic2NyaWJlKCh7Y29uZmlnfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUucm9vdC5zbmFwc2hvdDtcbiAgICAgICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5nZXRSb3V0ZURhdGEocm9vdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbzogTmF0dXJhbFNlbyA9IHRoaXMucm91dGVEYXRhLnNlbyA/PyB7dGl0bGU6ICcnfTtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JvdXRlRGF0YSA9IHRoaXMuZ2V0RGlhbG9nUm91dGVEYXRhKHJvb3QpO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nU2VvOiBOYXR1cmFsU2VvID0gZGlhbG9nUm91dGVEYXRhPy5zZW87XG5cbiAgICAgICAgICAgIGxldCBiYXNpYyA9IHRoaXMudG9CYXNpYyhzZW8sIHRoaXMucm91dGVEYXRhKTtcbiAgICAgICAgICAgIGlmIChkaWFsb2dSb3V0ZURhdGEgJiYgZGlhbG9nU2VvKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nQmFzaWMgPSB0aGlzLnRvQmFzaWMoZGlhbG9nU2VvLCBkaWFsb2dSb3V0ZURhdGEpO1xuICAgICAgICAgICAgICAgIGJhc2ljID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5kaWFsb2dCYXNpYyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuam9pbihbZGlhbG9nQmFzaWMudGl0bGUsIGJhc2ljLnRpdGxlXSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoYmFzaWMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIFNFTyB3aXRoIGdpdmVuIGluZm8uIFRoZSBleHRyYSBwYXJ0IGFuZCBhcHAgbmFtZSB3aWxsIGJlIGFwcGVuZGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBJbiBtb3N0IGNhc2VzLCB0aGlzIHNob3VsZCBub3QgYmUgdXNlZC4gQW5kIGluc3RlYWQsIHRoZSBTRU8gc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHJvdXRpbmcsXG4gICAgICogcG9zc2libHkgd2l0aCB0aGUgY2FsbGJhY2sgdmFyaWFudCBmb3Igc29tZSBkeW5hbWlzbS5cbiAgICAgKlxuICAgICAqIEJ1dCBpbiByYXJlIGNhc2VzLCBvbmx5IHRoZSBDb21wb25lbnQgaXMgYWJsZSB0byBidWlsZCBhIHByb3BlciBwYWdlIHRpdGxlLCBhZnRlciBpdCBnYXRoZXJlZCBldmVyeXRoaW5nIGl0XG4gICAgICogbmVlZGVkLiBGb3IgdGhvc2UgY2FzZXMsIHRoZSBDb21wb25lbnQgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UgYW5kIHVwZGF0ZSB0aGUgU0VPIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUoc2VvOiBOYXR1cmFsU2VvQmFzaWMpOiB2b2lkIHtcbiAgICAgICAgLy8gVGl0bGVcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgICAgICBzZW8udGl0bGUsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRyYVBhcnQgJiYgdGhpcy5yb3V0ZURhdGEgPyB0aGlzLmNvbmZpZy5leHRyYVBhcnQodGhpcy5yb3V0ZURhdGEpIDogJycsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hcHBsaWNhdGlvbk5hbWUsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmpvaW4ocGFydHMpO1xuICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG5cbiAgICAgICAgLy8gRGVzY3JpcHRpb25cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzZW8/LmRlc2NyaXB0aW9uID8/IHRoaXMuY29uZmlnLmRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy51cGRhdGVUYWcoJ2Rlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24pO1xuXG4gICAgICAgIC8vIFJvYm90c1xuICAgICAgICBjb25zdCByb2JvdHMgPSBzZW8/LnJvYm90cyA/PyB0aGlzLmNvbmZpZy5kZWZhdWx0Um9ib3RzO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhZygncm9ib3RzJywgcm9ib3RzKTtcblxuICAgICAgICAvLyBDYW5vbmljYWxcbiAgICAgICAgLy8gQWRkIGxhbmd1YWdlIGluIHVybCAoYWZ0ZXIgZG9tYWluKSBpZiBzb21lIGxhbmd1YWdlcyBhcmUgcHJvdmlkZWQgb25seVxuICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY29uZmlnLmxhbmd1YWdlcz8ubGVuZ3RoICYmIHRoaXMubG9jYWxlID8gdGhpcy5sb2NhbGUuc3BsaXQoJy0nKVswXSA6ICcnO1xuICAgICAgICBjb25zdCB1cmxQYXJ0cyA9IHRoaXMuZ2V0VXJsUGFydHMoc2VvLmNhbm9uaWNhbFF1ZXJ5UGFyYW1zV2hpdGVsaXN0ID8/IFtdKTtcbiAgICAgICAgdGhpcy51cGRhdGVMaW5rVGFnKHtyZWw6ICdjYW5vbmljYWwnLCBocmVmOiB0aGlzLmdldFVybCh1cmxQYXJ0cywgbGFuZ3VhZ2UpfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQWx0ZXJuYXRlcyh1cmxQYXJ0cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBbHRlcm5hdGVzKHVybFBhcnRzOiB7dXJsOiBzdHJpbmc7IHBhcmFtczogc3RyaW5nfSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZy5sYW5ndWFnZXM/LmZvckVhY2gobGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMaW5rVGFnKHtyZWw6ICdhbHRlcm5hdGUnLCBocmVmOiB0aGlzLmdldFVybCh1cmxQYXJ0cywgbGFuZ3VhZ2UpLCBocmVmbGFuZzogbGFuZ3VhZ2V9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmxQYXJ0cyh3aGl0ZUxpc3RlZFBhcmFtczogc3RyaW5nW10pOiB7dXJsOiBzdHJpbmc7IHBhcmFtczogc3RyaW5nfSB7XG4gICAgICAgIGxldCB1cmwgPSAnaHR0cHM6Ly8nICsgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcblxuICAgICAgICAvLyBuZWVkIGJldHRlciBsaWtlIHNvbWV0aGluZyByZWN1cnNpdmUgP1xuICAgICAgICBpZiAodXJsVHJlZS5yb290Lmhhc0NoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG4gICAgICAgICAgICBpZiAoc2VnbWVudHMgJiYgc2VnbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHVybCArPSAnLycgKyBzZWdtZW50cy5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1ZXJ5IFBhcmFtc1xuICAgICAgICBsZXQgcGFyYW1zID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qgd2hpdGVMaXN0ZWRQYXJhbSBvZiB3aGl0ZUxpc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHdoaXRlTGlzdGVkUGFyYW0gaW4gdXJsVHJlZS5xdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGVuY29kZVVSSUNvbXBvbmVudCh3aGl0ZUxpc3RlZFBhcmFtKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1cmxUcmVlLnF1ZXJ5UGFyYW1zW3doaXRlTGlzdGVkUGFyYW1dKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMgKz0gYCR7a2V5fT0ke3ZhbHVlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1zID0gJz8nICsgcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt1cmwsIHBhcmFtc307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGxhbmd1YWdlIGJldHdlZW4gZG9tYWluIGFuZCB1cmkgaHR0cHM6Ly9leGFtcGxlLmNvbS9mci9mb2xkZXIvcGFnZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VXJsKHVybFBhcnRzOiB7dXJsOiBzdHJpbmc7IHBhcmFtczogc3RyaW5nfSwgbGFuZ3VhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdXJsID0gdXJsUGFydHMudXJsO1xuXG4gICAgICAgIGlmIChsYW5ndWFnZSkge1xuICAgICAgICAgICAgdXJsID0gdGhpcy5hZGRMYW5ndWFnZVNlZ21lbnQodXJsLCBsYW5ndWFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsUGFydHMucGFyYW1zKSB7XG4gICAgICAgICAgICB1cmwgKz0gdXJsUGFydHMucGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExhbmd1YWdlU2VnbWVudCh1cmw6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHVybE9iai5wYXRobmFtZSA9PT0gJy8nID8gYC8ke2xhbmd1YWdlfWAgOiBgLyR7bGFuZ3VhZ2V9JHt1cmxPYmoucGF0aG5hbWV9YDtcbiAgICAgICAgcmV0dXJuIHVybE9iai5vcmlnaW4gKyBuZXdQYXRoICsgdXJsT2JqLnNlYXJjaCArIHVybE9iai5oYXNoO1xuICAgIH1cblxuICAgIHByaXZhdGUgam9pbihwYXJ0czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcGFydHMuZmlsdGVyKHMgPT4gISFzKS5qb2luKCcgLSAnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRhZyhuYW1lOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0cmlwVGFncyh2YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWV0YVRhZ1NlcnZpY2UucmVtb3ZlVGFnKGBuYW1lPVwiJHtuYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxpbmtUYWcoZGVmaW5pdGlvbjogTmF0dXJhbExpbmtEZWZpbml0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID1cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yPEhUTUxMaW5rRWxlbWVudD4odGhpcy5wYXJzZVNlbGVjdG9yKGRlZmluaXRpb24pKSA/P1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpKTtcblxuICAgICAgICBpZiAobGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmluaXRpb24pLmZvckVhY2goKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgbGlua0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgZGVmaW5pdGlvblthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzZWxlY3RvciB0byB1c2UgaW4gcXVlcnlTZWxlY3RvciB0byBnZXQgdGhlIGdpdmVuIGxpbmtcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlU2VsZWN0b3IoZGVmaW5pdGlvbjogTmF0dXJhbExpbmtEZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSAnbGluayc7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmluaXRpb24pLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ciAhPT0gJ2hyZWYnKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyArPSBgWyR7YXR0cn09XCIke2RlZmluaXRpb25bYXR0cl19XCJdYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIHRoZSBtb3N0IGRlZXAvc3BlY2lmaWMgYWN0aXZhdGVkIHJvdXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSb3V0ZURhdGEocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBEYXRhIHtcbiAgICAgICAgaWYgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlRGF0YShyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIHRoZSBgTmF0dXJhbERpYWxvZ1RyaWdnZXJDb21wb25lbnRgIGlmIG9uZSBpcyBvcGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREaWFsb2dSb3V0ZURhdGEocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBEYXRhIHwgbnVsbCB7XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQgPT09IE5hdHVyYWxEaWFsb2dUcmlnZ2VyQ29tcG9uZW50ICYmIHJvdXRlLm91dGxldCAhPT0gUFJJTUFSWV9PVVRMRVQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGlhbG9nUm91dGVEYXRhKGNoaWxkKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvQmFzaWMoc2VvOiBOYXR1cmFsU2VvLCByb3V0ZURhdGE6IERhdGEpOiBOYXR1cmFsU2VvQmFzaWMge1xuICAgICAgICBpZiAodHlwZW9mIHNlbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHNlbyhyb3V0ZURhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKCdyZXNvbHZlS2V5JyBpbiBzZW8pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IFJlc29sdmVkRGF0YSB8IHVuZGVmaW5lZCA9IHJvdXRlRGF0YVtzZW8ucmVzb2x2ZUtleV07XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHJlc29sdmVkIGRhdGEgZm9yIFNFTyBzZXJ2aWNlIHdpdGgga2V5OiAnICsgc2VvLnJlc29sdmVLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm1vZGVsPy5mdWxsTmFtZSA/PyBkYXRhLm1vZGVsPy5uYW1lID8/ICcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLm1vZGVsPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICByb2JvdHM6IHNlby5yb2JvdHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbztcbiAgICB9XG59XG4iXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9jb21tb24vc2VydmljZXMvc2VvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUErQixhQUFhLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDNUYsT0FBTyxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQTZHOUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQW1CLCtCQUErQixDQUFDLENBQUM7QUFFeEcsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXO0lBQ2pDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQVlEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBTTFCLFlBQ2dDLFdBQTZCLEVBQ3hDLE1BQWMsRUFDZCxZQUFtQixFQUNuQixjQUFvQixFQUNGLFFBQWtCLEVBQzFCLE1BQWM7UUFKeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBQ25CLG1CQUFjLEdBQWQsY0FBYyxDQUFNO1FB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QU8sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFFOUIsT0FBTyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6RCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTztvQkFDSCxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQzNDLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVztvQkFDL0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2lCQUNyQixDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOzhHQTlPUSxpQkFBaUIsa0JBT2Qsa0JBQWtCLDRFQUlsQixRQUFRLGFBQ1IsU0FBUztrSEFaWixpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBSXpCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgTE9DQUxFX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWV0YSwgVGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBEYXRhLCBOYXZpZ2F0aW9uRW5kLCBQUklNQVJZX09VVExFVCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtOYXR1cmFsRGlhbG9nVHJpZ2dlckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGlhbG9nLXRyaWdnZXIvZGlhbG9nLXRyaWdnZXIuY29tcG9uZW50JztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgdHlwZSBOYXR1cmFsU2VvID0gTmF0dXJhbFNlb0Jhc2ljIHwgTmF0dXJhbFNlb0NhbGxiYWNrIHwgTmF0dXJhbFNlb1Jlc29sdmU7XG5cbi8qKlxuICogVHlwaWNhbGx5IHVzZWQgZm9yIFwic3RhdGljXCIgcGFnZXMgd2hlcmUgdGhlcmUgaXMgbm90IGEgc2luZ2xlIHJlc29sdmVkIG9iamVjdC4gU29cbiAqIGFsbCBwYWdlcyBzdWNoIGFzIFwiQWJvdXRcIiwgb3IgbGlzdCBvZiBvYmplY3RzIChsaXN0IG9mIHJpc2tzLCBldGMuKS5cbiAqXG4gKiBUaGlzIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNlZCB2YXJpYW50LlxuICovXG5leHBvcnQgdHlwZSBOYXR1cmFsU2VvQmFzaWMgPSBSb2JvdHMgJiB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhZ2UgdGl0bGUsIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCBhcHBsaWNhdGlvbiBuYW1lXG4gICAgICovXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElmIGdpdmVuIHdpbGwgYmUgdXNlZCBhcyBwYWdlIGRlc2NyaXB0aW9uLCBvdGhlcndpc2UgZmFsbGJhY2sgb24gZGVmYXVsdCB2YWx1ZVxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBjYW5vbmljYWwgdGFnJ3MgdXJsXG4gICAgICovXG4gICAgY2Fub25pY2FsUXVlcnlQYXJhbXNXaGl0ZWxpc3Q/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgTmF0dXJhbExpbmtEZWZpbml0aW9uID0ge1xuICAgIGNoYXJzZXQ/OiBzdHJpbmc7XG4gICAgY3Jvc3NvcmlnaW4/OiBzdHJpbmc7XG4gICAgaHJlZj86IHN0cmluZztcbiAgICBocmVmbGFuZz86IHN0cmluZztcbiAgICBtZWRpYT86IHN0cmluZztcbiAgICByZWw/OiBzdHJpbmc7XG4gICAgcmV2Pzogc3RyaW5nO1xuICAgIHNpemVzPzogc3RyaW5nO1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xufSAmIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4vKipcbiAqIFR5cGljYWxseSB1c2VkIGZvciBhIFwiZHluYW1pY1wiIHBhZ2Ugd2hlcmUgYSBzaW5nbGUgb2JqZWN0IGlzIHJlc29sdmVkLiBTbyBhIGRldGFpbCBwYWdlLCBzdWNoXG4gKiBhcyB0aGUgZGV0YWlsIG9mIGEgcmlzayBhbmQgc28gb24uXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxTZW9SZXNvbHZlID0gUm9ib3RzICYge1xuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgYG1vZGVsYCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJlc29sdmVkIGRhdGEgdG8gZmluZCB0aGUgcmVzb2x2ZWQgb2JqZWN0LiBUaGUgZnVsbE5hbWVcbiAgICAgKiBvciBuYW1lIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGZvciBwYWdlIHRpdGxlLCBhbmQgdGhlIG9iamVjdCBkZXNjcmlwdGlvbiwgaWYgYW55LFxuICAgICAqIHdpbGwgYmUgdXNlZCBmb3IgcGFnZSBkZXNjcmlwdGlvbi5cbiAgICAgKi9cbiAgICByZXNvbHZlOiB0cnVlO1xufTtcblxuLyoqXG4gKiBSYXJlbHkgdXNlZCBmb3IgYSBwYWdlIHRoYXQgaGFzIHZlcnkgc3BlY2lmaWMgbmVlZHMgYW5kIG5lZWQgdG8gYnVpbGQgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGluIGEgY3VzdG9tIHdheS5cbiAqIFRoZSBjYWxsYmFjayBiYWNrIHdpbGwgYmUgZ2l2ZW4gdGhlIHJlc29sdmVkIGRhdGEsIGFuZCBpdCBpcyB1cCB0byB0aGUgY2FsbGJhY2sgdG8gZmluZCB3aGF0ZXZlciBpdCBuZWVkcy5cbiAqL1xuZXhwb3J0IHR5cGUgTmF0dXJhbFNlb0NhbGxiYWNrID0gKHJvdXRlRGF0YTogRGF0YSkgPT4gTmF0dXJhbFNlb0Jhc2ljIHwgT2JzZXJ2YWJsZTxOYXR1cmFsU2VvQmFzaWM+O1xuXG4vKipcbiAqIFR5cGljYWxseSB1c2VkIHRvIHR5cGUgdGhlIHJvdXRpbmcgZGF0YSByZWNlaXZlZCBpbiB0aGUgY29tcG9uZW50LCBlZzpcbiAqXG4gKiBgYGB0c1xuICogY2xhc3MgTXlDb21wb25lbnQgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3REZXRhaWw8TXlTZXJ2aWNlLCBOYXR1cmFsU2VvUmVzb2x2ZURhdGE+IHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgTmF0dXJhbFNlb1Jlc29sdmVEYXRhID0ge1xuICAgIHNlbzogTmF0dXJhbFNlb0Jhc2ljO1xufTtcblxudHlwZSBSb2JvdHMgPSB7XG4gICAgLyoqXG4gICAgICogSWYgZ2l2ZW4gd2lsbCBiZSB1c2VkIGFzIHJvYm90cyBtZXRhIHRhZywgb3RoZXJ3aXNlIGZhbGxiYWNrIG9uIGRlZmF1bHQgdmFsdWVcbiAgICAgKi9cbiAgICByb2JvdHM/OiBzdHJpbmc7XG59O1xuXG50eXBlIE5hdHVyYWxTZW9Db25maWdQbGFpbiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB3aWxsIGFsd2F5cyBhcHBlYXIgaW4gdGhlIHBhZ2UgdGl0bGVcbiAgICAgKi9cbiAgICByZWFkb25seSBhcHBsaWNhdGlvbk5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdmFsdWUgZm9yIGRlc2NyaXB0aW9uIG1ldGEgdGhhdCBpcyB1c2VkIGZvciBwYWdlcyB3aXRob3V0IHZhbHVlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdERlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCB2YWx1ZSBmb3Igcm9ib3RzIG1ldGEgdGhhdCBpcyB1c2VkIGZvciBwYWdlcyB3aXRob3V0IHZhbHVlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdFJvYm90cz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElmIGdpdmVuLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggcm91dGUgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nIHRoYXQgd2lsbFxuICAgICAqIGJlIGluc2VydGVkIGJldHdlZW4gdGhlIHBhZ2UgdGl0bGUgYW5kIHRoZSBhcHBsaWNhdGlvbiBuYW1lLlxuICAgICAqXG4gICAgICogSXQgc2hvdWxkIGJlIHVzZWQgdG8gY29tcGxldGUgdGhlIHRpdGxlIHdpdGggaW5mbyB0aGF0IGFyZSBvZnRlbiwgYnV0IG5vdCBuZWNlc3NhcmlseSBhbHdheXMsXG4gICAgICogYXZhaWxhYmxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi4gVHlwaWNhbGx5IHVzZWQgZm9yIHRoZSBzaXRlL3N0YXRlIGluIE9LcGlsb3QuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXh0cmFQYXJ0PzogKHJvdXRlRGF0YTogRGF0YSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBnZW5lcmF0ZSBhbHRlcm5hdGl2ZSB0YWdzXG4gICAgICogPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgaHJlZmxhbmc9XCJlblwiIGhyZWY9XCJodHRwczovL3d3dy5leGFtcGxlLmNvbS9lbi9wYWdlXCI+XG4gICAgICovXG4gICAgcmVhZG9ubHkgbGFuZ3VhZ2VzPzogUmVhZG9ubHk8c3RyaW5nW10+O1xufTtcblxuZXhwb3J0IHR5cGUgTmF0dXJhbFNlb0NvbmZpZyA9IE5hdHVyYWxTZW9Db25maWdQbGFpbiB8IE9ic2VydmFibGU8TmF0dXJhbFNlb0NvbmZpZ1BsYWluPjtcbmV4cG9ydCBjb25zdCBOQVRVUkFMX1NFT19DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TmF0dXJhbFNlb0NvbmZpZz4oJ0NvbmZpZ3VyYXRpb24gZm9yIFNFTyBzZXJ2aWNlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFRhZ3Moc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvPFxcLz9bXj5dKz4vZywgJycpO1xufVxuXG50eXBlIE1vZGVsID0ge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuXG50eXBlIFJlc29sdmVkRGF0YSA9IHtcbiAgICBtb2RlbD86IE1vZGVsIHwgT2JzZXJ2YWJsZTxNb2RlbD47XG59O1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBpcyByZXNwb25zaWJsZSB0byBrZWVwIHVwIHRvIGRhdGUgdGhlIHBhZ2UgdGl0bGUgYW5kIHBhZ2UgZGVzY3JpcHRpb24gYWNjb3JkaW5nXG4gKiB0byB3aGF0IGlzIGNvbmZpZ3VyZWQgaW4gcm91dGluZyBvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBJdCAqKm11c3QqKiBiZSBpbmplY3RlZCBpbiB0aGUgcm9vdCBtb2R1bGUgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGhhdmUgZWZmZWN0cyBpbiBhbGwgbW9kdWxlcy4gQW5kIGl0XG4gKiBtdXN0IGJlIHByb3ZpZGVkIGEgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGUgZnVsbCB0aXRsZSBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKlxuICogICAgIGRpYWxvZyB0aXRsZSAtIHBhZ2UgdGl0bGUgLSBleHRyYSBwYXJ0IC0gYXBwIG5hbWVcbiAqXG4gKiBgZGlhbG9nIHRpdGxlYCBvbmx5IGV4aXN0cyBpZiBhIGBOYXR1cmFsRGlhbG9nVHJpZ2dlckNvbXBvbmVudGAgaXMgY3VycmVudGx5IG9wZW4sIGFuZCB0aGF0IHNvbWUgU0VPIGlzXG4gKiBjb25maWd1cmVkIGZvciBpdCBpbiB0aGUgcm91dGluZy5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNlb1NlcnZpY2Uge1xuICAgIHByaXZhdGUgcm91dGVEYXRhPzogRGF0YTtcbiAgICBwcml2YXRlIGNvbmZpZzogTmF0dXJhbFNlb0NvbmZpZ1BsYWluID0ge1xuICAgICAgICBhcHBsaWNhdGlvbk5hbWU6ICcnLFxuICAgIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoTkFUVVJBTF9TRU9fQ09ORklHKSBjb25maWdUb2tlbjogTmF0dXJhbFNlb0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1ldGFUYWdTZXJ2aWNlOiBNZXRhLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgY29uZmlnOiBjb25maWdUb2tlbiBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyBjb25maWdUb2tlbi5waXBlKHN0YXJ0V2l0aCh0aGlzLmNvbmZpZykpIDogb2YoY29uZmlnVG9rZW4pLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkVuZDogdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7Y29uZmlnfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Quc25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5nZXRSb3V0ZURhdGEocm9vdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VvOiBOYXR1cmFsU2VvID0gdGhpcy5yb3V0ZURhdGEuc2VvID8/IHt0aXRsZTogJyd9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSb3V0ZURhdGEgPSB0aGlzLmdldERpYWxvZ1JvdXRlRGF0YShyb290KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nU2VvOiBOYXR1cmFsU2VvID0gZGlhbG9nUm91dGVEYXRhPy5zZW87XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWMgPSB0aGlzLnRvQmFzaWMoc2VvLCB0aGlzLnJvdXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0Jhc2ljID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1JvdXRlRGF0YSAmJiBkaWFsb2dTZW8gPyB0aGlzLnRvQmFzaWMoZGlhbG9nU2VvLCBkaWFsb2dSb3V0ZURhdGEpIDogb2YobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe2Jhc2ljLCBkaWFsb2dCYXNpY30pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoe2Jhc2ljLCBkaWFsb2dCYXNpY30pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGlhbG9nQmFzaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzaWMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kaWFsb2dCYXNpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmpvaW4oW2RpYWxvZ0Jhc2ljLnRpdGxlLCBiYXNpYy50aXRsZV0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKGJhc2ljKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgU0VPIHdpdGggZ2l2ZW4gaW5mby4gVGhlIGV4dHJhIHBhcnQgYW5kIGFwcCBuYW1lIHdpbGwgYmUgYXBwZW5kZWQgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkLiBBbmQgaW5zdGVhZCwgdGhlIFNFTyBzaG91bGQgYmUgY29uZmlndXJlZCBpbiB0aGUgcm91dGluZyxcbiAgICAgKiBwb3NzaWJseSB3aXRoIHRoZSBjYWxsYmFjayB2YXJpYW50IGZvciBzb21lIGR5bmFtaXNtLlxuICAgICAqXG4gICAgICogQnV0IGluIHJhcmUgY2FzZXMsIG9ubHkgdGhlIENvbXBvbmVudCBpcyBhYmxlIHRvIGJ1aWxkIGEgcHJvcGVyIHBhZ2UgdGl0bGUsIGFmdGVyIGl0IGdhdGhlcmVkIGV2ZXJ5dGhpbmcgaXRcbiAgICAgKiBuZWVkZWQuIEZvciB0aG9zZSBjYXNlcywgdGhlIENvbXBvbmVudCBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSBhbmQgdXBkYXRlIHRoZSBTRU8gZGlyZWN0bHkuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShzZW86IE5hdHVyYWxTZW9CYXNpYyk6IHZvaWQge1xuICAgICAgICAvLyBUaXRsZVxuICAgICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNlby50aXRsZSxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmV4dHJhUGFydCAmJiB0aGlzLnJvdXRlRGF0YSA/IHRoaXMuY29uZmlnLmV4dHJhUGFydCh0aGlzLnJvdXRlRGF0YSkgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFwcGxpY2F0aW9uTmFtZSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuam9pbihwYXJ0cyk7XG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcblxuICAgICAgICAvLyBEZXNjcmlwdGlvblxuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHNlbz8uZGVzY3JpcHRpb24gPz8gdGhpcy5jb25maWcuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhZygnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICAgICAgLy8gUm9ib3RzXG4gICAgICAgIGNvbnN0IHJvYm90cyA9IHNlbz8ucm9ib3RzID8/IHRoaXMuY29uZmlnLmRlZmF1bHRSb2JvdHM7XG4gICAgICAgIHRoaXMudXBkYXRlVGFnKCdyb2JvdHMnLCByb2JvdHMpO1xuXG4gICAgICAgIC8vIENhbm9uaWNhbFxuICAgICAgICAvLyBBZGQgbGFuZ3VhZ2UgaW4gdXJsIChhZnRlciBkb21haW4pIGlmIHNvbWUgbGFuZ3VhZ2VzIGFyZSBwcm92aWRlZCBvbmx5XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5jb25maWcubGFuZ3VhZ2VzPy5sZW5ndGggJiYgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5zcGxpdCgnLScpWzBdIDogJyc7XG4gICAgICAgIGNvbnN0IHVybFBhcnRzID0gdGhpcy5nZXRVcmxQYXJ0cyhzZW8uY2Fub25pY2FsUXVlcnlQYXJhbXNXaGl0ZWxpc3QgPz8gW10pO1xuICAgICAgICB0aGlzLnVwZGF0ZUxpbmtUYWcoe3JlbDogJ2Nhbm9uaWNhbCcsIGhyZWY6IHRoaXMuZ2V0VXJsKHVybFBhcnRzLCBsYW5ndWFnZSl9KTtcbiAgICAgICAgdGhpcy51cGRhdGVBbHRlcm5hdGVzKHVybFBhcnRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFsdGVybmF0ZXModXJsUGFydHM6IHt1cmw6IHN0cmluZzsgcGFyYW1zOiBzdHJpbmd9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxhbmd1YWdlcz8uZm9yRWFjaChsYW5ndWFnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmtUYWcoe3JlbDogJ2FsdGVybmF0ZScsIGhyZWY6IHRoaXMuZ2V0VXJsKHVybFBhcnRzLCBsYW5ndWFnZSksIGhyZWZsYW5nOiBsYW5ndWFnZX0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybFBhcnRzKHdoaXRlTGlzdGVkUGFyYW1zOiBzdHJpbmdbXSk6IHt1cmw6IHN0cmluZzsgcGFyYW1zOiBzdHJpbmd9IHtcbiAgICAgICAgbGV0IHVybCA9ICdodHRwczovLycgKyB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py53aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuXG4gICAgICAgIC8vIG5lZWQgYmV0dGVyIGxpa2Ugc29tZXRoaW5nIHJlY3Vyc2l2ZSA/XG4gICAgICAgIGlmICh1cmxUcmVlLnJvb3QuaGFzQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeT8uc2VnbWVudHM7XG4gICAgICAgICAgICBpZiAoc2VnbWVudHMgJiYgc2VnbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHVybCArPSAnLycgKyBzZWdtZW50cy5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1ZXJ5IFBhcmFtc1xuICAgICAgICBsZXQgcGFyYW1zID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qgd2hpdGVMaXN0ZWRQYXJhbSBvZiB3aGl0ZUxpc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHdoaXRlTGlzdGVkUGFyYW0gaW4gdXJsVHJlZS5xdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGVuY29kZVVSSUNvbXBvbmVudCh3aGl0ZUxpc3RlZFBhcmFtKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1cmxUcmVlLnF1ZXJ5UGFyYW1zW3doaXRlTGlzdGVkUGFyYW1dKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMgKz0gYCR7a2V5fT0ke3ZhbHVlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1zID0gJz8nICsgcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt1cmwsIHBhcmFtc307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGxhbmd1YWdlIGJldHdlZW4gZG9tYWluIGFuZCB1cmkgaHR0cHM6Ly9leGFtcGxlLmNvbS9mci9mb2xkZXIvcGFnZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VXJsKHVybFBhcnRzOiB7dXJsOiBzdHJpbmc7IHBhcmFtczogc3RyaW5nfSwgbGFuZ3VhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdXJsID0gdXJsUGFydHMudXJsO1xuXG4gICAgICAgIGlmIChsYW5ndWFnZSkge1xuICAgICAgICAgICAgdXJsID0gdGhpcy5hZGRMYW5ndWFnZVNlZ21lbnQodXJsLCBsYW5ndWFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsUGFydHMucGFyYW1zKSB7XG4gICAgICAgICAgICB1cmwgKz0gdXJsUGFydHMucGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExhbmd1YWdlU2VnbWVudCh1cmw6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHVybE9iai5wYXRobmFtZSA9PT0gJy8nID8gYC8ke2xhbmd1YWdlfWAgOiBgLyR7bGFuZ3VhZ2V9JHt1cmxPYmoucGF0aG5hbWV9YDtcbiAgICAgICAgcmV0dXJuIHVybE9iai5vcmlnaW4gKyBuZXdQYXRoICsgdXJsT2JqLnNlYXJjaCArIHVybE9iai5oYXNoO1xuICAgIH1cblxuICAgIHByaXZhdGUgam9pbihwYXJ0czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcGFydHMuZmlsdGVyKHMgPT4gISFzKS5qb2luKCcgLSAnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRhZyhuYW1lOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0cmlwVGFncyh2YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWV0YVRhZ1NlcnZpY2UucmVtb3ZlVGFnKGBuYW1lPVwiJHtuYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxpbmtUYWcoZGVmaW5pdGlvbjogTmF0dXJhbExpbmtEZWZpbml0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID1cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yPEhUTUxMaW5rRWxlbWVudD4odGhpcy5wYXJzZVNlbGVjdG9yKGRlZmluaXRpb24pKSA/P1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpKTtcblxuICAgICAgICBpZiAobGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmluaXRpb24pLmZvckVhY2goKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgbGlua0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgZGVmaW5pdGlvblthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzZWxlY3RvciB0byB1c2UgaW4gcXVlcnlTZWxlY3RvciB0byBnZXQgdGhlIGdpdmVuIGxpbmtcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlU2VsZWN0b3IoZGVmaW5pdGlvbjogTmF0dXJhbExpbmtEZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSAnbGluayc7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmluaXRpb24pLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ciAhPT0gJ2hyZWYnKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyArPSBgWyR7YXR0cn09XCIke2RlZmluaXRpb25bYXR0cl19XCJdYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIHRoZSBtb3N0IGRlZXAvc3BlY2lmaWMgYWN0aXZhdGVkIHJvdXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSb3V0ZURhdGEocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBEYXRhIHtcbiAgICAgICAgaWYgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlRGF0YShyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIHRoZSBgTmF0dXJhbERpYWxvZ1RyaWdnZXJDb21wb25lbnRgIGlmIG9uZSBpcyBvcGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREaWFsb2dSb3V0ZURhdGEocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBEYXRhIHwgbnVsbCB7XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQgPT09IE5hdHVyYWxEaWFsb2dUcmlnZ2VyQ29tcG9uZW50ICYmIHJvdXRlLm91dGxldCAhPT0gUFJJTUFSWV9PVVRMRVQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGlhbG9nUm91dGVEYXRhKGNoaWxkKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvQmFzaWMoc2VvOiBOYXR1cmFsU2VvLCByb3V0ZURhdGE6IFJlc29sdmVkRGF0YSk6IE9ic2VydmFibGU8TmF0dXJhbFNlb0Jhc2ljPiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzZW8ocm91dGVEYXRhKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gcmVzdWx0IDogb2YocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmICgncmVzb2x2ZScgaW4gc2VvKSB7XG4gICAgICAgICAgICBpZiAoISgnbW9kZWwnIGluIHJvdXRlRGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHJlc29sdmVkIGRhdGEgYG1vZGVsYCBmb3IgU0VPIHNlcnZpY2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSByb3V0ZURhdGEubW9kZWw7XG5cbiAgICAgICAgICAgIHJldHVybiAobW9kZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gbW9kZWwgOiBvZihtb2RlbCkpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZT8uZnVsbE5hbWUgPz8gdmFsdWU/Lm5hbWUgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsdWU/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9ib3RzOiBzZW8ucm9ib3RzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZihzZW8pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Directive, HostBinding, HostListener } from '@angular/core';
2
- import { merge } from 'lodash-es';
3
2
  import { NaturalAbstractController } from '../../classes/abstract-controller';
3
+ import { Observable, takeUntil } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  export class NaturalAbstractPanel extends NaturalAbstractController {
6
6
  constructor() {
@@ -35,7 +35,22 @@ export class NaturalAbstractPanel extends NaturalAbstractController {
35
35
  this.panelData = panelData;
36
36
  this.isPanel = true;
37
37
  if (this.panelData?.data) {
38
- merge(this.data, this.panelData.data);
38
+ if (this.panelData.data.model instanceof Observable) {
39
+ // Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`
40
+ this.panelData.data.model.pipe(takeUntil(this.ngUnsubscribe)).subscribe(model => {
41
+ this.data = {
42
+ ...this.data,
43
+ ...this.panelData?.data,
44
+ model: model,
45
+ };
46
+ });
47
+ }
48
+ else {
49
+ this.data = {
50
+ ...this.data,
51
+ ...this.panelData.data,
52
+ };
53
+ }
39
54
  }
40
55
  }
41
56
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalAbstractPanel, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
@@ -53,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
53
68
  type: HostListener,
54
69
  args: ['click']
55
70
  }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7O0FBSzVFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx5QkFBeUI7SUFEbkU7O1FBRUk7OztXQUdHO1FBQ0ksU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUV0Qjs7V0FFRztRQUN1QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUUvRDs7V0FFRztRQUNrQyxZQUFPLEdBQUcsS0FBSyxDQUFDO0tBK0J4RDtJQXRCRzs7T0FFRztJQUVJLFVBQVU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxTQUEyQjtRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQzs4R0E3Q1Esb0JBQW9CO2tHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7OEJBV29DLFlBQVk7c0JBQXJELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUtJLE9BQU87c0JBQTNDLFdBQVc7dUJBQUMsZUFBZTtnQkFhckIsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHttZXJnZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0Q29udHJvbGxlcn0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hYnN0cmFjdC1jb250cm9sbGVyJztcbmltcG9ydCB7TmF0dXJhbFBhbmVsc1NlcnZpY2V9IGZyb20gJy4vcGFuZWxzLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUGFuZWxEYXRhfSBmcm9tICcuL3R5cGVzJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFic3RyYWN0UGFuZWwgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBwcm9wZXJ0eSBpcyB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSByZXNvbHZlZCBjb250ZW50IGlzIHN0b3JlZFxuICAgICAqIFdoZW4gbG9hZGluZyBhIGNvbXBvbmVudCBmcm9tIGEgcGFuZWwgb3BlbmluZyAoZGlhbG9nKSwgcmVjZWl2ZXMgdGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YTogYW55ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGlzRnJvbnRQYW5lbCBzdHlsZSBjbGFzcyBvbiByb290IGNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaXNGcm9udFBhbmVsJykgcHVibGljIGlzRnJvbnRQYW5lbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQmluZCBpc1BhbmVsIHN0eWxlIGNsYXNzIG9uIHJvb3QgY29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pc1BhbmVsJykgcHVibGljIGlzUGFuZWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdpbmcgb2YgZGF0YSBwcm92aWRlZCBieSB0aGUgdmVyeSByb290IGNvbXBvbmVudCAodGhhdCBpcyBpbiBhIHJvdXRlIGNvbnRleHQpIGFuZCBpbmhlcml0ZWQgZGF0YSB0aHJvdWdoIHBhbmVsc1xuICAgICAqIEBUT0RPIDogcHJvdmlkZSB0eXBlIHdpdGggYXZhaWxhYmxlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcGFuZWxEYXRhPzogTmF0dXJhbFBhbmVsRGF0YTtcbiAgICBwdWJsaWMgcGFuZWxTZXJ2aWNlPzogTmF0dXJhbFBhbmVsc1NlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGNsaWNrIG9uIHBhbmVscywgdG8gYWxsb3cgdGhlIHNlbGVjdGlvbiBvZiB0aG9zZSB3aG8gYXJlIGJlaGluZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBwdWJsaWMgY2xpY2tQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRnJvbnRQYW5lbCAmJiB0aGlzLnBhbmVsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbFNlcnZpY2UuZ29Ub1BhbmVsQnlDb21wb25lbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBwYW5lbCBvcGVucyBhbmQgY29tcG9uZW50IGlzIGxvYWRlZFxuICAgICAqIFJ1bnMgYmVmb3JlIG5nT25Jbml0KClcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdFBhbmVsKHBhbmVsRGF0YTogTmF0dXJhbFBhbmVsRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVsRGF0YSA9IHBhbmVsRGF0YTtcbiAgICAgICAgdGhpcy5pc1BhbmVsID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5wYW5lbERhdGE/LmRhdGEpIHtcbiAgICAgICAgICAgIG1lcmdlKHRoaXMuZGF0YSwgdGhpcy5wYW5lbERhdGEuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRzVFLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUczQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEseUJBQXlCO0lBRG5FOztRQUVJOzs7V0FHRztRQUNJLFNBQUksR0FBUSxFQUFFLENBQUM7UUFFdEI7O1dBRUc7UUFDdUMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFL0Q7O1dBRUc7UUFDa0MsWUFBTyxHQUFHLEtBQUssQ0FBQztLQTZDeEQ7SUFwQ0c7O09BRUc7SUFFSSxVQUFVO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsU0FBMkI7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxrR0FBa0c7Z0JBQ2xHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDNUUsSUFBSSxDQUFDLElBQUksR0FBRzt3QkFDUixHQUFHLElBQUksQ0FBQyxJQUFJO3dCQUNaLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJO3dCQUN2QixLQUFLLEVBQUUsS0FBSztxQkFDZixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxJQUFJLEdBQUc7b0JBQ1IsR0FBRyxJQUFJLENBQUMsSUFBSTtvQkFDWixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtpQkFDekIsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs4R0EzRFEsb0JBQW9CO2tHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7OEJBV29DLFlBQVk7c0JBQXJELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUtJLE9BQU87c0JBQTNDLFdBQVc7dUJBQUMsZUFBZTtnQkFhckIsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Fic3RyYWN0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHtOYXR1cmFsUGFuZWxzU2VydmljZX0gZnJvbSAnLi9wYW5lbHMuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxQYW5lbERhdGF9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RQYW5lbCBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHByb3BlcnR5IGlzIHRoZSBjb250YWluZXIgd2hlcmUgdGhlIHJlc29sdmVkIGNvbnRlbnQgaXMgc3RvcmVkXG4gICAgICogV2hlbiBsb2FkaW5nIGEgY29tcG9uZW50IGZyb20gYSBwYW5lbCBvcGVuaW5nIChkaWFsb2cpLCByZWNlaXZlcyB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgc2VydmljZVxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhOiBhbnkgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgaXNGcm9udFBhbmVsIHN0eWxlIGNsYXNzIG9uIHJvb3QgY29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pc0Zyb250UGFuZWwnKSBwdWJsaWMgaXNGcm9udFBhbmVsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGlzUGFuZWwgc3R5bGUgY2xhc3Mgb24gcm9vdCBjb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzUGFuZWwnKSBwdWJsaWMgaXNQYW5lbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTWVyZ2luZyBvZiBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB2ZXJ5IHJvb3QgY29tcG9uZW50ICh0aGF0IGlzIGluIGEgcm91dGUgY29udGV4dCkgYW5kIGluaGVyaXRlZCBkYXRhIHRocm91Z2ggcGFuZWxzXG4gICAgICogVE9ETzogcHJvdmlkZSB0eXBlIHdpdGggYXZhaWxhYmxlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcGFuZWxEYXRhPzogTmF0dXJhbFBhbmVsRGF0YTtcbiAgICBwdWJsaWMgcGFuZWxTZXJ2aWNlPzogTmF0dXJhbFBhbmVsc1NlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGNsaWNrIG9uIHBhbmVscywgdG8gYWxsb3cgdGhlIHNlbGVjdGlvbiBvZiB0aG9zZSB3aG8gYXJlIGJlaGluZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBwdWJsaWMgY2xpY2tQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRnJvbnRQYW5lbCAmJiB0aGlzLnBhbmVsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbFNlcnZpY2UuZ29Ub1BhbmVsQnlDb21wb25lbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBwYW5lbCBvcGVucyBhbmQgY29tcG9uZW50IGlzIGxvYWRlZFxuICAgICAqIFJ1bnMgYmVmb3JlIG5nT25Jbml0KClcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdFBhbmVsKHBhbmVsRGF0YTogTmF0dXJhbFBhbmVsRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVsRGF0YSA9IHBhbmVsRGF0YTtcbiAgICAgICAgdGhpcy5pc1BhbmVsID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5wYW5lbERhdGE/LmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsRGF0YS5kYXRhLm1vZGVsIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBtb2RlbCB0byBrbm93IHdoZW4gQXBvbGxvIGNhY2hlIGlzIGNoYW5nZWQsIHNvIHdlIGNhbiByZWZsZWN0IGl0IGludG8gYGRhdGEubW9kZWxgXG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbERhdGEuZGF0YS5tb2RlbC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnBhbmVsRGF0YT8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucGFuZWxEYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -2,7 +2,6 @@ import { Inject, Injectable, runInInjectionContext } from '@angular/core';
2
2
  import { DefaultUrlSerializer, NavigationError } from '@angular/router';
3
3
  import { differenceWith, flatten, isEqual } from 'lodash-es';
4
4
  import { forkJoin, of, Subject } from 'rxjs';
5
- import { map } from 'rxjs/operators';
6
5
  import { getStackConfig } from './panels.urlmatcher';
7
6
  import { PanelsHooksConfig, } from './types';
8
7
  import * as i0 from "@angular/core";
@@ -211,7 +210,7 @@ export class NaturalPanelsService {
211
210
  openPanels(newItemsConfig, fullConfig) {
212
211
  const subject = new Subject();
213
212
  // Resolve everything before opening a single panel
214
- const resolves = newItemsConfig.map((conf) => this.getResolvedData(conf));
213
+ const resolves = newItemsConfig.map(conf => this.getResolvedData(conf));
215
214
  // ForkJoin emits when all promises are executed;
216
215
  forkJoin(resolves).subscribe(resolvedResult => {
217
216
  // For each new config entry, open a new panel
@@ -254,9 +253,7 @@ export class NaturalPanelsService {
254
253
  resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));
255
254
  });
256
255
  }
257
- return forkJoin(resolvedData).pipe(map(result => {
258
- return result.model || result;
259
- }));
256
+ return forkJoin(resolvedData);
260
257
  }
261
258
  openPanel(componentOrTemplateRef, data) {
262
259
  const conf = {
@@ -325,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
325
322
  type: Inject,
326
323
  args: [PanelsHooksConfig]
327
324
  }] }, { type: i3.MediaObserver }] });
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVkscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxlQUFlLEVBQXFCLE1BQU0saUJBQWlCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFNSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7Ozs7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUM3Qjs7O09BR0c7YUFDWSxZQUFPLEdBQUcsS0FBSyxBQUFSLENBQVM7SUFDeEIsTUFBTSxLQUFLLE1BQU07UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFpREQsWUFDcUIsTUFBYyxFQUNkLE1BQWlCLEVBQ2pCLFFBQWtCLEVBQ0EsV0FBcUMsRUFDaEUsWUFBMkI7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNBLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUNoRSxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQXBEdkM7O1dBRUc7UUFDYSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckQ7OztXQUdHO1FBQ0ssWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNwQjs7O1dBR0c7UUFDSyxlQUFVLEdBQUcsT0FBTyxDQUFDO1FBRTdCOzs7V0FHRztRQUNLLGtCQUFhLEdBQXlCLEVBQUUsQ0FBQztRQVlqRDs7V0FFRztRQUNLLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ0ssa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFFM0I7OztXQUdHO1FBQ0ssVUFBSyxHQUFrQixJQUFJLENBQUM7UUFTaEMsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUMvQixDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztvQkFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3BDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQXFCO1FBQzlCLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPO1lBQ1gsQ0FBQztZQUVELHVDQUF1QztZQUN2QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFWixvR0FBb0c7Z0JBQ3BHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBRXhELE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWYscUdBQXFHO1lBQ3JHLFdBQVc7WUFDWCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRWpELG1EQUFtRDtZQUNuRCxNQUFNLGdCQUFnQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBRXBHLHlCQUF5QjtZQUN6QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV2RyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELDBFQUEwRTtZQUMxRSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FDeEYsQ0FBQztZQUVGLDZCQUE2QjtZQUM3QixNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4RCw2QkFBNkI7WUFDN0IsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQ3pDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUM5QyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQ2hDLElBQUksQ0FBQyxRQUFRLENBQ2hCLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHdCQUF3QixDQUFDLE1BQTRCO1FBQ3pELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFFdEQseUVBQXlFO1FBQ3pFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDL0MsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoRSx3RkFBd0Y7WUFDeEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sSUFBSTtRQUNQLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxTQUErQjtRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNJLG9CQUFvQjtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLEtBQWE7UUFDbEMsdURBQXVEO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVzthQUM5QixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUNoQixHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDVixPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZiw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCLENBQUMsS0FBYTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFL0Usa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsUUFBc0IsRUFBRSxNQUFpQztRQUMxRSw4RkFBOEY7UUFDOUYsc0ZBQXNGO1FBQ3RGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDMUYsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXZGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEYsSUFBSSxlQUFlLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELHFCQUFxQjtZQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDO2FBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELGtCQUFrQjtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUNkLGNBQW9DLEVBQ3BDLFVBQWdDO1FBRWhDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBRXRELG1EQUFtRDtRQUNuRCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlGLGlEQUFpRDtRQUNqRCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzFDLDhDQUE4QztZQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksUUFBUSxHQUFxQjtvQkFDN0IsK0JBQStCO29CQUMvQixNQUFNLEVBQUUsTUFBTTtvQkFFZCwyQkFBMkI7b0JBQzNCLHNEQUFzRDtvQkFDdEQsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLGVBQWUsRUFBRSxFQUFFO2lCQUN0QixDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxLQUFLLEdBQWlDO3dCQUN4QyxRQUFRLEVBQUUsUUFBUTt3QkFDbEIsV0FBVyxFQUFFLE1BQU07d0JBQ25CLGNBQWMsRUFBRSxjQUFjO3dCQUM5QixnQkFBZ0IsRUFBRSxVQUFVO3FCQUMvQixDQUFDO29CQUVGLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO2dCQUVELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JGLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBMEI7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xGLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBd0MsRUFBRSxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFakMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNGLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsT0FBUSxNQUFjLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLFNBQVMsQ0FBQyxzQkFBMkQsRUFBRSxJQUFzQjtRQUNqRyxNQUFNLElBQUksR0FBb0I7WUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE9BQU87WUFDZCxRQUFRLEVBQUU7Z0JBQ04sR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsS0FBSyxFQUFFLEdBQUc7YUFDYjtTQUNKLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBdUIsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdkYsNkNBQTZDO1FBQzdDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLFNBQStCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1gsQ0FBQztRQUVELHVGQUF1RjtRQUN2RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRWpELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxrSEFBa0g7WUFDbEgsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMxRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUU3QyxnQkFBZ0I7WUFDaEIsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0MsSUFBSSxRQUFRLEdBQVEsRUFBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxFQUFDLENBQUM7WUFDOUQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELFFBQVEsR0FBRztvQkFDUCxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSTtvQkFDbEMsS0FBSyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQztZQUNOLENBQUM7WUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDOzhHQXZYUSxvQkFBb0IseUZBNkRqQixpQkFBaUI7a0hBN0RwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERRLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWVkaWFPYnNlcnZlcn0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge2dldFN0YWNrQ29uZmlnfSBmcm9tICcuL3BhbmVscy51cmxtYXRjaGVyJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFBhbmVsQ29uZmlnLFxuICAgIE5hdHVyYWxQYW5lbERhdGEsXG4gICAgTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCxcbiAgICBOYXR1cmFsUGFuZWxzSG9va3NDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGUsXG4gICAgUGFuZWxzSG9va3NDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBzZWdtZW50c1RvU3RyaW5nKHNlZ21lbnRzOiBVcmxTZWdtZW50W10pOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWdtZW50cy5tYXAocyA9PiBzLnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZUNvbmZpZ3MoYTogTmF0dXJhbFBhbmVsQ29uZmlnLCBiOiBOYXR1cmFsUGFuZWxDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5yb3V0ZS5wYXRoID09PSBiLnJvdXRlLnBhdGggJiYgYS5ydWxlID09PSBiLnJ1bGUgJiYgaXNFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpO1xufVxuXG4vKipcbiAqIFRPRE86IGltcGxlbWVudCByb3V0ZSB1cGRhdGUgd2hlbiBjbG9zaW5nIGRpYWxvZyB3aXRoIGVzY2FwZVxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBhbmVsc1NlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzdGF0aWMgcHJvcGVydHkgUGFuZWxzIGFyZSAqKm5vdCoqIGNvbXBhdGlibGUgd2l0aCBTU1IuXG4gICAgICogQW5kIHdlIGNhbm5vdCBtYWtlIGl0IG5vbi1zdGF0aWMsIGJlY2F1c2UgYFVybE1hdGNoZXJgIGNhbm5vdCBiZSBpbmplY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfb3BlbmVkID0gZmFsc2U7XG4gICAgcHVibGljIHN0YXRpYyBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gYWxsIG9wZW4gZGlhbG9nIGhhdmUgZmluaXNoZWQgY2xvc2luZ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhZnRlckFsbENsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBjb3VudGVyLiBXb3JrcyBtb3JlIGxpa2UgYW4gSUQuXG4gICAgICogSXMgdXNlZCB0byBnaXZlIGFuIHVuaXF1ZSBpZGVudGlmaWVyIHRvIG11bHRpcGxlIHNpbWlsYXIgcGFuZWxzIGNvbmZpZ3VyYXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBhcHBsaWVkIHRvIGRpYWxvZyBvdmVybGF5IHJlbGF0ZWQgd2l0aCBwYW5lbHNcbiAgICAgKiBJZiBjaGFuZ2UsIGNoYW5nZSBDU1MgdG9vXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbENsYXNzID0gJ3BhbmVsJztcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBwYW5lbHMgc2V0dXAgYmVmb3JlIG5hdmlnYXRpb24gY2hhbmdlLlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IHBhbmVscyBvcGVuaW5ncy9jbG9zaW5ncyBhbmQgYWRhcHQgZm9yIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbGRGdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBzdWJzY3JpcHRpb24gc3RvcFxuICAgICAqL1xuICAgIHByaXZhdGUgbmF2U3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRIID0gMzU7XG5cbiAgICAvKipcbiAgICAgKiBWZXJ0aWNhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRWID0gNDA7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBvZiBwcmV2aW91cyBzY3JlZW4gc2l6ZVxuICAgICAqIFVzZWQgdG8gY2hhbmdlIHBhbmVscyBzdGFjayBvcmllbnRhdGlvbiBvbiBzbWFsbCBzY3JlZW5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZWRpYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFBhbmVsc0hvb2tzQ29uZmlnKSBwcml2YXRlIGhvb2tzQ29uZmlnOiBOYXR1cmFsUGFuZWxzSG9va3NDb25maWcsXG4gICAgICAgIHByaXZhdGUgbWVkaWFTZXJ2aWNlOiBNZWRpYU9ic2VydmVyLFxuICAgICkge1xuICAgICAgICAvLyBXYXRjaCBtZWRpYSB0byBrbm93IGlmIGRpc3BsYXkgcGFuZWxzIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5XG4gICAgICAgIHRoaXMubWVkaWFTZXJ2aWNlLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShtZWRpYXMgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZWRpYSBvZiBtZWRpYXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVkaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYSA9IG1lZGlhLm1xQWxpYXM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1lZGlhICE9PSBtZWRpYS5tcUFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWEgPSBtZWRpYS5tcUFsaWFzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1YiA9IHJvdXRlLnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHMoc2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICAgIGlmICghKGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWJvcnQgYW5kIHByb3BhZ2F0ZSBuYXZpZ2F0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoZXYudXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgaGFja2lzaDogd2UgaGFyZGNvZGUgYW4gaW1wb3NzaWJsZSB1cmwgdG8gdHJpZ2dlciBub3JtYWwgbmF2aWdhdGlvbiBlcnJvciBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYW5lbHMtcmVhY2hlZC1pbnZhbGlkLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcblxuICAgICAgICAgICAgLy8gcGMgc3RhbmRzIGZvciBcInBhbmVsIGNvdW50ZXJcIiwgcmVxdWlyZWQgdG8gZ2l2ZSBhbiBpZGVudGlmaWNhdGlvbiB0byBwYW5lbHMgd2l0aCBleGFjdCBzYW1lIGNvbmZpZ1xuICAgICAgICAgICAgLy8gRS5nIC9uZXdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVybCA9IGV2LnVybCArICc7cGM9JyArIHRoaXMuY291bnRlcjtcblxuICAgICAgICAgICAgLy8gU2VnbWVudHMgbWF0Y2hpbmcgZnJvbSB3YW50ZWQgdXJsLiBFLmcgfiBbJ25ldyddXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVclNlZ21lbnRzID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkucGFyc2Uod2FudGVkVXJsKS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG5cbiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGFueSBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHdhbnRlZFVyU2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLCB0aGlzLmluamVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHdhbnRlZENvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwod2FudGVkQ29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZXMuIEUuZyBbJ29iamVjdGl2ZScsICdvYmplY3RpdmUnLCAxMjMsICdyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWdtZW50cyA9IGZsYXR0ZW4oXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubWFwKGQgPT4gZC5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExhc3Qgc2VnbWVudC4gRS5nIFsncmlzayddXG4gICAgICAgICAgICBjb25zdCBsYXN0T2ZDdXJyZW50U2VnbWVudHMgPSBjdXJyZW50U2VnbWVudHMuc2xpY2UoLTEpO1xuXG4gICAgICAgICAgICAvLyBDb25maWcgZm9yIFsncmlzaycsICduZXcnXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuZFdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKFxuICAgICAgICAgICAgICAgIGxhc3RPZkN1cnJlbnRTZWdtZW50cy5jb25jYXQod2FudGVkVXJTZWdtZW50cyksXG4gICAgICAgICAgICAgICAgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjdXJyZW50QW5kV2FudGVkQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBnaXZlbiBjb25maWd1cmF0aW9uIHRvIGFkZCBpbiB0aGUgZW5kIG9mIGN1cnJlbnQgdXJsXG4gICAgICogTmV1dHJhbGl6ZXMgcm91dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9ySGFuZGxlciA9IHRoaXMucm91dGVyLmVycm9ySGFuZGxlcjtcblxuICAgICAgICAvLyBOdWxsaWZ5IGVycm9yIGhhbmRsZXIgKHdpbGwgYmUgZGUtbmV1dHJhbGl6ZWQgYWZ0ZXIgcm91dGUgcmVkaXJlY3Rpb24pXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHNhbWUgdXJsICsgL3Jpc2svbmV3IFJlc3VsdCA6IC9yaXNrL3Jpc2svbmV3XG4gICAgICAgIGNvbnN0IG5ld1VybCA9IGNvbmZpZy5tYXAoY29uZiA9PiBzZWdtZW50c1RvU3RyaW5nKGNvbmYucm91dGUuc2VnbWVudHMpKS5qb2luKCcvJyk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwgKyAnLycgKyBuZXdVcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgbmF2aWdhdGlvbiBoYXMgZW5kZWQsIHJlc3RvcmUgb3JpZ2luYWwgZXJyb3IgaGFuZGxlciBiZWNhdXNlIGhlJ3Mgbm90IGEgYmFkIGd1eVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gb3JpZ2luYWxFcnJvckhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BhbmVsQnlDb21wb25lbnQoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5nZXRQYW5lbEluZGV4KGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QZW51bHRpbWF0ZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIG5ldyB1cmwgdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSBzZWdtZW50cyBmcm9tIHRoZSBwYW5lbHMgd2Ugd2FudCB0byBzdGF5IG9wZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9QYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBFeHRyYWN0cyB1cmwgc2VnbWVudHMgZnJvbSBuZXh0IHBhbmVsIHVudGlsIGxhc3Qgb25lXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzXG4gICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgLm1hcChkaWFsb2cgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50c1RvU3RyaW5nKGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBleHRyYSBzZWdtZW50cyBhbmQgcmVkaXJlY3RzIHRvIHJvb3RcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwucmVwbGFjZSgnLycgKyB1cmwsICcnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW5nIGEgcGFuZWwgaXMgZXF1aXZhbGVudCB0byBjbG9zZSBhbGwgdGhvc2UgdGhhdCBhcmUgaW4gZnJvbnQgb2YgaGltXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHBhbmVsIGluIHN0YWNrLiBUaGUgbW9zdCBiZWhpbmQgKHRoZSBmaXJzdCBvbmUpIGlzIDAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBsYXN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gVXBkYXRlIG5ldyBwYW5lbHMgc2V0IHBvc2l0aW9uc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxOyBpID49IGluZGV4ICsgMTsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxhc3REaWFsb2cuYWZ0ZXJDbG9zZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIG5ldyBwYW5lbHMgaWYgdXJsIGhhcyBjaGFuZ2VkIHdpdGggbmV3IHNlZ21lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQYW5lbHMoc2VnbWVudHM6IFVybFNlZ21lbnRbXSwgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB1cmwgc2VnbWVudHMgaW50byBhIGNvbmZpZyB3aXRoIGNvbXBvbmVudCBuYW1lIGFuZCBJRCBpZiBwcm92aWRlZCBpbiBuZXh0IHNlZ21lbnRcbiAgICAgICAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBjb25maWdzLCBlYWNoIGNvbmZpZyByZXByZXNlbnRzIHRoZSBjb250ZW50IHJlbGF0aXZlIHRvIGEgcGFuZWxcbiAgICAgICAgY29uc3QgbmV3RnVsbENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLCByb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9SZW1vdmUgPSBkaWZmZXJlbmNlV2l0aCh0aGlzLm9sZEZ1bGxDb25maWcsIG5ld0Z1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvQWRkID0gZGlmZmVyZW5jZVdpdGgobmV3RnVsbENvbmZpZywgdGhpcy5vbGRGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZk5leHRQYW5lbCA9IHRoaXMub2xkRnVsbENvbmZpZy5sZW5ndGggLSBjb25maWdzVG9SZW1vdmUubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBBZGQgYW5kIHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiAhY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSBhZGQgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBuZXdGdWxsQ29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYWxsIHNlcnZpY2VzLCB0aGVuIG9wZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWxzKFxuICAgICAgICBuZXdJdGVtc0NvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgICAgIGZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICk6IE9ic2VydmFibGU8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4oKTtcblxuICAgICAgICAvLyBSZXNvbHZlIGV2ZXJ5dGhpbmcgYmVmb3JlIG9wZW5pbmcgYSBzaW5nbGUgcGFuZWxcbiAgICAgICAgY29uc3QgcmVzb2x2ZXMgPSBuZXdJdGVtc0NvbmZpZy5tYXAoKGNvbmY6IE5hdHVyYWxQYW5lbENvbmZpZykgPT4gdGhpcy5nZXRSZXNvbHZlZERhdGEoY29uZikpO1xuXG4gICAgICAgIC8vIEZvcmtKb2luIGVtaXRzIHdoZW4gYWxsIHByb21pc2VzIGFyZSBleGVjdXRlZDtcbiAgICAgICAgZm9ya0pvaW4ocmVzb2x2ZXMpLnN1YnNjcmliZShyZXNvbHZlZFJlc3VsdCA9PiB7XG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBuZXcgY29uZmlnIGVudHJ5LCBvcGVuIGEgbmV3IHBhbmVsXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0l0ZW1zQ29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gbmV3SXRlbXNDb25maWdbaV07XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1EYXRhOiBOYXR1cmFsUGFuZWxEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25maWcgb2YgYWN0dWFsIHBhbmVsIHJvdXRlXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIERhdGEgcmVzb2x2ZWQgYnkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgaW4gY29tcG9uZW50IGJ5IGNhbGxpbmcgdGhpcy5wYW5lbERhdGEuZGF0YS54eXpcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzb2x2ZWRSZXN1bHRbaV0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmthYmxlT2JqZWN0czogW10sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzQ29uZmlnPy5iZWZvcmVPcGVuUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQ6IE5hdHVyYWxQYW5lbHNCZWZvcmVPcGVuUGFuZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXN1bHQ6IHJlc29sdmVkUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhbmVsc0NvbmZpZzogZnVsbENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YSA9IHRoaXMuaG9va3NDb25maWcuYmVmb3JlT3BlblBhbmVsKHRoaXMuaW5qZWN0b3IsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbChjb25maWcuY29tcG9uZW50LCBpdGVtRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNvbHZlZERhdGEoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWcpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgICAgIGlmICghY29uZmlnLnJlc29sdmUgfHwgKGNvbmZpZy5yZXNvbHZlICYmIE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZUtleXMgPSBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YTogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj4gPSB7fTtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWcuaW5qZWN0b3I7XG5cbiAgICAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgICAgICAgICByZXNvbHZlS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWREYXRhW2tleV0gPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGNvbmZpZy5yZXNvbHZlW2tleV0oY29uZmlnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihyZXNvbHZlZERhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCBhcyBhbnkpLm1vZGVsIHx8IHJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8TmF0dXJhbEFic3RyYWN0UGFuZWw+LCBkYXRhOiBOYXR1cmFsUGFuZWxEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmY6IE1hdERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucGFuZWxDbGFzcyxcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiAnOTYwcHgnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgICAgICAgICByaWdodDogJzAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuPE5hdHVyYWxBYnN0cmFjdFBhbmVsPihjb21wb25lbnRPclRlbXBsYXRlUmVmLCBjb25mKTtcblxuICAgICAgICAvLyBQYW5lbGlzYWJsZSBpbnRlcmZhY2UgYXR0cmlidXRlcy9mdW5jdGlvbnNcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmluaXRQYW5lbChkYXRhKTtcblxuICAgICAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQYW5lbEluZGV4KGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgoaW5kZXggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHBhbmVsIHBvc2l0aW9uIChpbmRleCkgYnkgc2VhcmNoaW5nIG1hdGNoaW5nIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UGFuZWxJbmRleChjb21wb25lbnQ6IE5hdHVyYWxBYnN0cmFjdFBhbmVsKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5maW5kSW5kZXgoZGlhbG9nID0+IGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZSA9PT0gY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvc2l0aW9ucyBwYW5lbHMgZnJvbSBzdGFydCB1bnRpbCBnaXZlbiBpbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBwYW5lbHMgdGhhdCBhcmUgc3RpbGwgb3BlbmVkLCBpZ25vcmUgdGhlIG90aGVycyBiZWNhdXNlIHRoZXknbGwgYmUgY2xvc2VkXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkRWxlbWVudHMgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGFmZmVjdGVkRWxlbWVudHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNldCBhbGwgcGFuZWxzIGFzIFwiaGlkZGVuXCIgZXhjZXB0IGxhc3Qgb25lLiBJc0Zyb250UGFuZWwgYXR0cmlidXRlIGNhdXNlcyBhIENTUyB0aGF0IGhpZGVzIGJvZHkgdmlhIGhvc3RiaW5kaW5nXG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UuaXNGcm9udFBhbmVsID0gaSA9PT0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsU2VydmljZSA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIEFzc2lnbiBvZmZzZXRcbiAgICAgICAgICAgIGNvbnN0IGRlZXAgPSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDEgLSBpO1xuXG4gICAgICAgICAgICBsZXQgcG9zaXRpb246IGFueSA9IHtyaWdodDogZGVlcCAqIHRoaXMucGFuZWxzT2Zmc2V0SCArICdweCd9O1xuICAgICAgICAgICAgaWYgKHRoaXMubWVkaWEgPT09ICd4cycgJiYgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogaSAqIHRoaXMucGFuZWxzT2Zmc2V0ViArICdweCcsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnMHB4JyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2cudXBkYXRlUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVkscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxlQUFlLEVBQXFCLE1BQU0saUJBQWlCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUVyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQU1ILGlCQUFpQixHQUNwQixNQUFNLFNBQVMsQ0FBQzs7Ozs7QUFFakIsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQjtJQUM1QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDaEUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFFRDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdC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akIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERRLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWVkaWFPYnNlcnZlcn0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7Z2V0U3RhY2tDb25maWd9IGZyb20gJy4vcGFuZWxzLnVybG1hdGNoZXInO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUGFuZWxDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsRGF0YSxcbiAgICBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgIE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZSxcbiAgICBQYW5lbHNIb29rc0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHNlZ21lbnRzVG9TdHJpbmcoc2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQ29uZmlncyhhOiBOYXR1cmFsUGFuZWxDb25maWcsIGI6IE5hdHVyYWxQYW5lbENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLnJvdXRlLnBhdGggPT09IGIucm91dGUucGF0aCAmJiBhLnJ1bGUgPT09IGIucnVsZSAmJiBpc0VxdWFsKGEucGFyYW1zLCBiLnBhcmFtcyk7XG59XG5cbi8qKlxuICogVE9ETzogaW1wbGVtZW50IHJvdXRlIHVwZGF0ZSB3aGVuIGNsb3NpbmcgZGlhbG9nIHdpdGggZXNjYXBlXG4gKiBAZHluYW1pY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsUGFuZWxzU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG1lZGlhOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoUGFuZWxzSG9va3NDb25maWcpIHByaXZhdGUgaG9va3NDb25maWc6IE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhT2JzZXJ2ZXIsXG4gICAgKSB7XG4gICAgICAgIC8vIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgdGhpcy5tZWRpYVNlcnZpY2UuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKG1lZGlhcyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lZGlhIG9mIG1lZGlhcykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhID0gbWVkaWEubXFBbGlhcztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVkaWEgIT09IG1lZGlhLm1xQWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYSA9IG1lZGlhLm1xQWxpYXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XG4gICAgICAgIE5hdHVyYWxQYW5lbHNTZXJ2aWNlLl9vcGVuZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViID0gcm91dGUudXJsLnN1YnNjcmliZShzZWdtZW50cyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhbmVscyhzZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXYgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBYm9ydCBhbmQgcHJvcGFnYXRlIG5hdmlnYXRpb24gZXJyb3JcbiAgICAgICAgICAgIGlmIChldi51cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBoYWNraXNoOiB3ZSBoYXJkY29kZSBhbiBpbXBvc3NpYmxlIHVybCB0byB0cmlnZ2VyIG5vcm1hbCBuYXZpZ2F0aW9uIGVycm9yIG1lY2hhbmlzbVxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ3BhbmVscy1yZWFjaGVkLWludmFsaWQtdXJsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY291bnRlcisrO1xuXG4gICAgICAgICAgICAvLyBwYyBzdGFuZHMgZm9yIFwicGFuZWwgY291bnRlclwiLCByZXF1aXJlZCB0byBnaXZlIGFuIGlkZW50aWZpY2F0aW9uIHRvIHBhbmVscyB3aXRoIGV4YWN0IHNhbWUgY29uZmlnXG4gICAgICAgICAgICAvLyBFLmcgL25ld1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkVXJsID0gZXYudXJsICsgJztwYz0nICsgdGhpcy5jb3VudGVyO1xuXG4gICAgICAgICAgICAvLyBTZWdtZW50cyBtYXRjaGluZyBmcm9tIHdhbnRlZCB1cmwuIEUuZyB+IFsnbmV3J11cbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVyU2VnbWVudHMgPSBuZXcgRGVmYXVsdFVybFNlcmlhbGl6ZXIoKS5wYXJzZSh3YW50ZWRVcmwpLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cztcblxuICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggYW55IGNvbmZpZ1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcod2FudGVkVXJTZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAod2FudGVkQ29uZmlnLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybCh3YW50ZWRDb25maWcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdXJyZW50bHkgYWN0aXZhdGVkIHJvdXRlcy4gRS5nIFsnb2JqZWN0aXZlJywgJ29iamVjdGl2ZScsIDEyMywgJ3Jpc2snXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlZ21lbnRzID0gZmxhdHRlbihcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5tYXAoZCA9PiBkLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTGFzdCBzZWdtZW50LiBFLmcgWydyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGxhc3RPZkN1cnJlbnRTZWdtZW50cyA9IGN1cnJlbnRTZWdtZW50cy5zbGljZSgtMSk7XG5cbiAgICAgICAgICAgIC8vIENvbmZpZyBmb3IgWydyaXNrJywgJ25ldyddXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QW5kV2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoXG4gICAgICAgICAgICAgICAgbGFzdE9mQ3VycmVudFNlZ21lbnRzLmNvbmNhdCh3YW50ZWRVclNlZ21lbnRzKSxcbiAgICAgICAgICAgICAgICByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKGN1cnJlbnRBbmRXYW50ZWRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGdpdmVuIGNvbmZpZ3VyYXRpb24gdG8gYWRkIGluIHRoZSBlbmQgb2YgY3VycmVudCB1cmxcbiAgICAgKiBOZXV0cmFsaXplcyByb3V0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3JIYW5kbGVyID0gdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyO1xuXG4gICAgICAgIC8vIE51bGxpZnkgZXJyb3IgaGFuZGxlciAod2lsbCBiZSBkZS1uZXV0cmFsaXplZCBhZnRlciByb3V0ZSByZWRpcmVjdGlvbilcbiAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gc2FtZSB1cmwgKyAvcmlzay9uZXcgUmVzdWx0IDogL3Jpc2svcmlzay9uZXdcbiAgICAgICAgY29uc3QgbmV3VXJsID0gY29uZmlnLm1hcChjb25mID0+IHNlZ21lbnRzVG9TdHJpbmcoY29uZi5yb3V0ZS5zZWdtZW50cykpLmpvaW4oJy8nKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm91dGVyLnVybCArICcvJyArIG5ld1VybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBBZnRlciBuYXZpZ2F0aW9uIGhhcyBlbmRlZCwgcmVzdG9yZSBvcmlnaW5hbCBlcnJvciBoYW5kbGVyIGJlY2F1c2UgaGUncyBub3QgYSBiYWQgZ3V5XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXIgPSBvcmlnaW5hbEVycm9ySGFuZGxlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AoKTogdm9pZCB7XG4gICAgICAgIE5hdHVyYWxQYW5lbHNTZXJ2aWNlLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5uYXZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKCk7XG4gICAgICAgIHRoaXMub2xkRnVsbENvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyQWxsQ2xvc2VkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbyB0byBwYW5lbCBtYXRjaGluZyBnaXZlbiBjb21wb25lbnQuIENhdXNlcyBhbiB1cmwgY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGFuZWxCeUNvbXBvbmVudChjb21wb25lbnQ6IE5hdHVyYWxBYnN0cmFjdFBhbmVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmdldFBhbmVsSW5kZXgoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BlbnVsdGltYXRlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgbmV3IHVybCB0aGF0IG9ubHkgaW5jbHVkZXMgdGhlIHNlZ21lbnRzIGZyb20gdGhlIHBhbmVscyB3ZSB3YW50IHRvIHN0YXkgb3BlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ29Ub1BhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIEV4dHJhY3RzIHVybCBzZWdtZW50cyBmcm9tIG5leHQgcGFuZWwgdW50aWwgbGFzdCBvbmVcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NcbiAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXG4gICAgICAgICAgICAubWFwKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzVG9TdHJpbmcoZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIHNlZ21lbnRzIGFuZCByZWRpcmVjdHMgdG8gcm9vdFxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm91dGVyLnVybC5yZXBsYWNlKCcvJyArIHVybCwgJycpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RpbmcgYSBwYW5lbCBpcyBlcXVpdmFsZW50IHRvIGNsb3NlIGFsbCB0aG9zZSB0aGF0IGFyZSBpbiBmcm9udCBvZiBoaW1cbiAgICAgKiBAcGFyYW0gaW5kZXggb2YgcGFuZWwgaW4gc3RhY2suIFRoZSBtb3N0IGJlaGluZCAodGhlIGZpcnN0IG9uZSkgaXMgMC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdFBhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXTtcblxuICAgICAgICAvLyBVcGRhdGUgbmV3IHBhbmVscyBzZXQgcG9zaXRpb25zXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDE7IGkgPj0gaW5kZXggKyAxOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2ldLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFzdERpYWxvZy5hZnRlckNsb3NlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gbmV3IHBhbmVscyBpZiB1cmwgaGFzIGNoYW5nZWQgd2l0aCBuZXcgc2VnbWVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVBhbmVscyhzZWdtZW50czogVXJsU2VnbWVudFtdLCByb3V0ZXM6IE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlW10pOiB2b2lkIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHVybCBzZWdtZW50cyBpbnRvIGEgY29uZmlnIHdpdGggY29tcG9uZW50IG5hbWUgYW5kIElEIGlmIHByb3ZpZGVkIGluIG5leHQgc2VnbWVudFxuICAgICAgICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbmZpZ3MsIGVhY2ggY29uZmlnIHJlcHJlc2VudHMgdGhlIGNvbnRlbnQgcmVsYXRpdmUgdG8gYSBwYW5lbFxuICAgICAgICBjb25zdCBuZXdGdWxsQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoc2VnbWVudHMsIHJvdXRlcywgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb1JlbW92ZSA9IGRpZmZlcmVuY2VXaXRoKHRoaXMub2xkRnVsbENvbmZpZywgbmV3RnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9BZGQgPSBkaWZmZXJlbmNlV2l0aChuZXdGdWxsQ29uZmlnLCB0aGlzLm9sZEZ1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcblxuICAgICAgICBjb25zdCBpbmRleE9mTmV4dFBhbmVsID0gdGhpcy5vbGRGdWxsQ29uZmlnLmxlbmd0aCAtIGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEFkZCBhbmQgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmICFjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkRnVsbENvbmZpZyA9IG5ld0Z1bGxDb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBhbGwgc2VydmljZXMsIHRoZW4gb3BlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9wZW5QYW5lbHMoXG4gICAgICAgIG5ld0l0ZW1zQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICAgICAgZnVsbENvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgKTogT2JzZXJ2YWJsZTxPYnNlcnZhYmxlPGFueT4gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxPYnNlcnZhYmxlPGFueT4gfCBudWxsPigpO1xuXG4gICAgICAgIC8vIFJlc29sdmUgZXZlcnl0aGluZyBiZWZvcmUgb3BlbmluZyBhIHNpbmdsZSBwYW5lbFxuICAgICAgICBjb25zdCByZXNvbHZlcyA9IG5ld0l0ZW1zQ29uZmlnLm1hcChjb25mID0+IHRoaXMuZ2V0UmVzb2x2ZWREYXRhKGNvbmYpKTtcblxuICAgICAgICAvLyBGb3JrSm9pbiBlbWl0cyB3aGVuIGFsbCBwcm9taXNlcyBhcmUgZXhlY3V0ZWQ7XG4gICAgICAgIGZvcmtKb2luKHJlc29sdmVzKS5zdWJzY3JpYmUocmVzb2x2ZWRSZXN1bHQgPT4ge1xuICAgICAgICAgICAgLy8gRm9yIGVhY2ggbmV3IGNvbmZpZyBlbnRyeSwgb3BlbiBhIG5ldyBwYW5lbFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJdGVtc0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ld0l0ZW1zQ29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRGF0YTogTmF0dXJhbFBhbmVsRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIG9mIGFjdHVhbCBwYW5lbCByb3V0ZVxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcblxuICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIHJlc29sdmVkIGJ5IHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGluIGNvbXBvbmVudCBieSBjYWxsaW5nIHRoaXMucGFuZWxEYXRhLmRhdGEueHl6XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc29sdmVkUmVzdWx0W2ldLFxuICAgICAgICAgICAgICAgICAgICBsaW5rYWJsZU9iamVjdHM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob29rc0NvbmZpZz8uYmVmb3JlT3BlblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUmVzdWx0OiByZXNvbHZlZFJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYW5lbHNDb25maWc6IGZ1bGxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGEgPSB0aGlzLmhvb2tzQ29uZmlnLmJlZm9yZU9wZW5QYW5lbCh0aGlzLmluamVjdG9yLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoY29uZmlnLmNvbXBvbmVudCwgaXRlbURhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXS5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzb2x2ZWREYXRhKGNvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgICAgICBpZiAoIWNvbmZpZy5yZXNvbHZlIHx8IChjb25maWcucmVzb2x2ZSAmJiBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpO1xuICAgICAgICBjb25zdCByZXNvbHZlZERhdGE6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+ID0ge307XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlnLmluamVjdG9yO1xuXG4gICAgICAgIGlmIChpbmplY3Rvcikge1xuICAgICAgICAgICAgcmVzb2x2ZUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkRGF0YVtrZXldID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBjb25maWcucmVzb2x2ZVtrZXldKGNvbmZpZykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ocmVzb2x2ZWREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5QYW5lbChjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPE5hdHVyYWxBYnN0cmFjdFBhbmVsPiwgZGF0YTogTmF0dXJhbFBhbmVsRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25mOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiB0aGlzLnBhbmVsQ2xhc3MsXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogJzk2MHB4JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQWJzdHJhY3RQYW5lbD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZik7XG5cbiAgICAgICAgLy8gUGFuZWxpc2FibGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMvZnVuY3Rpb25zXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0UGFuZWwoZGF0YSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UGFuZWxJbmRleChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KGluZGV4IC0gMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBwYW5lbCBwb3NpdGlvbiAoaW5kZXgpIGJ5IHNlYXJjaGluZyBtYXRjaGluZyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhbmVsSW5kZXgoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZmluZEluZGV4KGRpYWxvZyA9PiBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgcGFuZWxzIGZyb20gc3RhcnQgdW50aWwgZ2l2ZW4gaW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcGFuZWxzIHRoYXQgYXJlIHN0aWxsIG9wZW5lZCwgaWdub3JlIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5J2xsIGJlIGNsb3NlZFxuICAgICAgICBjb25zdCBhZmZlY3RlZEVsZW1lbnRzID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSBhZmZlY3RlZEVsZW1lbnRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTZXQgYWxsIHBhbmVscyBhcyBcImhpZGRlblwiIGV4Y2VwdCBsYXN0IG9uZS4gSXNGcm9udFBhbmVsIGF0dHJpYnV0ZSBjYXVzZXMgYSBDU1MgdGhhdCBoaWRlcyBib2R5IHZpYSBob3N0YmluZGluZ1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLmlzRnJvbnRQYW5lbCA9IGkgPT09IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbFNlcnZpY2UgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBc3NpZ24gb2Zmc2V0XG4gICAgICAgICAgICBjb25zdCBkZWVwID0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxIC0gaTtcblxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uOiBhbnkgPSB7cmlnaHQ6IGRlZXAgKiB0aGlzLnBhbmVsc09mZnNldEggKyAncHgnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhID09PSAneHMnICYmIGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGkgKiB0aGlzLnBhbmVsc09mZnNldFYgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -16,7 +16,7 @@ function assert(value) {
16
16
  }
17
17
  }
18
18
  /**
19
- * @TODO : Fix nav minimize and maximize resize
19
+ * TODO: Fix nav minimize and maximize resize
20
20
  * Since Material 2 beta 10, when nav is resized the body is not resized
21
21
  * https://github.com/angular/material2/issues/6743
22
22
  * Maybe the better is to wait next release
@@ -192,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
192
192
  type: Inject,
193
193
  args: [SESSION_STORAGE]
194
194
  }] }, { type: i3.NaturalSidenavStackService }] });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFpQixlQUFlLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7QUFHbEY7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FBSSxLQUFRO0lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUN2RixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHlCQUF5QjtJQTBDaEUsWUFDb0IsYUFBNEIsRUFDM0IsTUFBYyxFQUNXLGNBQThCLEVBQ3ZELDBCQUFzRDtRQUV2RSxLQUFLLEVBQUUsQ0FBQztRQUxRLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDVyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDdkQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQTdDM0U7Ozs7V0FJRztRQUNLLFVBQUssR0FBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEQ7OztXQUdHO1FBQ0ssU0FBSSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFD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LElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDTCxDQUFDOzhHQTdNUSxxQkFBcUIscUVBNkNsQixlQUFlO2tIQTdDbEIscUJBQXFCLGNBRFQsTUFBTTs7MkZBQ2xCLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQThDdkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNZWRpYU9ic2VydmVyfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xuaW1wb3J0IHtNYXREcmF3ZXIsIE1hdERyYXdlckNvbnRhaW5lciwgTWF0RHJhd2VyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge05hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0Q29udHJvbGxlcn0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hYnN0cmFjdC1jb250cm9sbGVyJztcbmltcG9ydCB7TmF0dXJhbFNpZGVuYXZDb250YWluZXJDb21wb25lbnR9IGZyb20gJy4vc2lkZW5hdi1jb250YWluZXIvc2lkZW5hdi1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7TmF0dXJhbFN0b3JhZ2UsIFNFU1NJT05fU1RPUkFHRX0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL21lbW9yeS1zdG9yYWdlJztcbmltcG9ydCB7TmF0dXJhbFNpZGVuYXZTdGFja1NlcnZpY2V9IGZyb20gJy4vc2lkZW5hdi1zdGFjay5zZXJ2aWNlJztcblxuLyoqXG4gKiBBc3NlcnQgdGhhdCBnaXZlbiB2YWx1ZSBpcyBub3QgbnVsbFxuICovXG5mdW5jdGlvbiBhc3NlcnQ8VD4odmFsdWU6IFQpOiBhc3NlcnRzIHZhbHVlIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBjYWxsIE5hdHVyYWxTaWRlbmF2U2VydmljZS5pbml0KCkgYmVmb3JlIHVzaW5nIHRoZSBzZXJ2aWNlJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBUT0RPIDogRml4IG5hdiBtaW5pbWl6ZSBhbmQgbWF4aW1pemUgcmVzaXplXG4gKiBTaW5jZSBNYXRlcmlhbCAyIGJldGEgMTAsIHdoZW4gbmF2IGlzIHJlc2l6ZWQgdGhlIGJvZHkgaXMgbm90IHJlc2l6ZWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL21hdGVyaWFsMi9pc3N1ZXMvNjc0M1xuICogTWF5YmUgdGhlIGJldHRlciBpcyB0byB3YWl0IG5leHQgcmVsZWFzZVxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsU2lkZW5hdlNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0aW9uIG1vZGVzXG4gICAgICogRmlyc3QgaXMgZm9yIGRlc2t0b3Agdmlld1xuICAgICAqIFNlY29uZCBpcyBmb3IgbW9iaWxlIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vZGVzOiBNYXREcmF3ZXJNb2RlW10gPSBbJ3NpZGUnLCAncHVzaCddO1xuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVkIG1vZGVcbiAgICAgKiBEZWZhdWx0IHRvIGRlc2t0b3Agdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgbW9kZTogTWF0RHJhd2VyTW9kZSA9IHRoaXMubW9kZXNbMF07XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5hdiBpcyBvcGVuZWQgb3Igbm90XG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSBvcGVuZWQgc3RhdHVzIGR1cmluZyBtb2JpbGUgdmlldywgdG8gcmVzdG9yZSBpZiB3ZSBjb21lIGJhY2sgdG8gZGVza3RvcCB2aWV3XG4gICAgICovXG4gICAgcHJpdmF0ZSB0bXBPcGVuZWQ6IGJvb2xlYW4gPSB0aGlzLm9wZW5lZDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbmF2IGlzIG1pbmltaXplZCBvciBub3RcbiAgICAgKi9cbiAgICBwcml2YXRlIG1pbmltaXplZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTG9jYWxTdG9yYWdlIGtleSB0aGF0IHN0b3JlcyB0aGUgbWluaW1pemVkIHN0YXR1c1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWluaW1pemVkU3RvcmFnZUtleSA9ICdtZW51LW1pbmltaXplZCc7XG5cbiAgICAvKipcbiAgICAgKiBMb2NhbFN0b3JhZ2Uga2V5IHRoYXQgc3RvcmVzIHRoZSBvcGVuZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVuZWRTdG9yYWdlS2V5ID0gJ21lbnUtb3BlbmVkJztcblxuICAgIHByaXZhdGUgbWluaW1pemVkU3RvcmFnZUtleVdpdGhOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIG9wZW5lZFN0b3JhZ2VLZXlXaXRoTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBtZWRpYU9ic2VydmVyOiBNZWRpYU9ic2VydmVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBASW5qZWN0KFNFU1NJT05fU1RPUkFHRSkgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZTogTmF0dXJhbFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0dXJhbFNpZGVuYXZTdGFja1NlcnZpY2U6IE5hdHVyYWxTaWRlbmF2U3RhY2tTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTW9kZSgpOiBNYXREcmF3ZXJNb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzT3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc01pbmltaXplZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaW1pemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KGNvbXBvbmVudDogTmF0dXJhbFNpZGVuYXZDb250YWluZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXR1cmFsU2lkZW5hdlN0YWNrU2VydmljZS51bnJlZ2lzdGVyKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXQoXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBNYXREcmF3ZXJDb250YWluZXIsXG4gICAgICAgIGRyYXdlcjogTWF0RHJhd2VyLFxuICAgICAgICBjb21wb25lbnQ6IE5hdHVyYWxTaWRlbmF2Q29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICBhdXRvQ2xvc2UgPSBmYWxzZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZGVuYXYgbmFtZSBwcm92aWRlZCwgdXNlIDxuYXR1cmFsLXNpZGVuYXYtY29udGFpbmVyIG5hbWU9XCJtZW51XCI+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdHVyYWxTaWRlbmF2U3RhY2tTZXJ2aWNlLnJlZ2lzdGVyKGNvbXBvbmVudCk7XG5cbiAgICAgICAgdGhpcy5taW5pbWl6ZWRTdG9yYWdlS2V5V2l0aE5hbWUgPSBuYW1lICsgJy0nICsgdGhpcy5taW5pbWl6ZWRTdG9yYWdlS2V5O1xuICAgICAgICB0aGlzLm9wZW5lZFN0b3JhZ2VLZXlXaXRoTmFtZSA9IG5hbWUgKyAnLScgKyB0aGlzLm9wZW5lZFN0b3JhZ2VLZXk7XG5cbiAgICAgICAgLy8gSW5pdCBmcm9tIExvY2FsU3RvcmFnZVxuICAgICAgICB0aGlzLm1pbmltaXplZCA9IHRoaXMuZ2V0TWluaW1pemVkU3RhdHVzKCk7XG4gICAgICAgIHRoaXMub3BlbmVkID0gdGhpcy5nZXRNZW51T3BlbmVkU3RhdHVzKCk7XG4gICAgICAgIHRoaXMudG1wT3BlbmVkID0gdGhpcy5vcGVuZWQ7XG5cbiAgICAgICAgbGV0IG9sZElzQmlnOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHRoaXMubWVkaWFPYnNlcnZlclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQmlnID0gIXRoaXMuaXNNb2JpbGVWaWV3KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlID0gaXNCaWcgPyB0aGlzLm1vZGVzWzBdIDogdGhpcy5tb2Rlc1sxXTtcblxuICAgICAgICAgICAgICAgIGlmIChvbGRJc0JpZyA9PT0gbnVsbCB8fCBpc0JpZyAhPT0gb2xkSXNCaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkSXNCaWcgPSBpc0JpZztcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBkZWNyZWFzZSB3aW5kb3cgc2l6ZSwgc2F2ZSBzdGF0dXMgb2YgbWVudSBiZWZvcmUgY2xvc2luZyBpdFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRtcE9wZW5lZCA9IHRoaXMub3BlbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGluY3JlYXNlIHdpbmRvdyBzaXplLCBhbmQgc2lkZWJhciB3YXMgb3BlbiBiZWZvcmUsIHJlLW9wZW4gaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0JpZyAmJiB0aGlzLnRtcE9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5pbWl6ZWQgPSB0aGlzLmdldE1pbmltaXplZFN0YXR1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGF1dG9DbG9zZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkl0ZW1DbGlja2VkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNNb2JpbGVWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubWVkaWFPYnNlcnZlci5pc0FjdGl2ZSgnZ3Qtc20nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSBuYXYgb24gbW9iaWxlIHZpZXcgYWZ0ZXIgYSBjbGlja1xuICAgICAqL1xuICAgIHB1YmxpYyBuYXZJdGVtQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSBtaW5pbWl6ZWQgc3RhdHVzIGFuZCBzdG9yZXMgdGhlIG5ldyB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRNaW5pbWl6ZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW5pbWl6ZWQgPSB2YWx1ZTtcbiAgICAgICAgYXNzZXJ0KHRoaXMubWluaW1pemVkU3RvcmFnZUtleVdpdGhOYW1lKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMubWluaW1pemVkU3RvcmFnZUtleVdpdGhOYW1lLCB2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtaW5pbWl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRNaW5pbWl6ZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRNaW5pbWl6ZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVNaW5pbWl6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TWluaW1pemVkKCF0aGlzLm1pbmltaXplZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdG9yZWQgbWluaW1pemVkIHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRNaW5pbWl6ZWRTdGF0dXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGFzc2VydCh0aGlzLm1pbmltaXplZFN0b3JhZ2VLZXlXaXRoTmFtZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMubWluaW1pemVkU3RvcmFnZUtleVdpdGhOYW1lKTtcblxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBmYWxzZSA6IHZhbHVlID09PSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdG9yZWQgb3BlbmVkIHN0YXR1c1xuICAgICAqIERlZmF1bHQgb24gYW4gb3BlbmVkIHN0YXR1cyBpZiBub3RoaW5nIGlzIHN0b3JlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRNZW51T3BlbmVkU3RhdHVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBhc3NlcnQodGhpcy5vcGVuZWRTdG9yYWdlS2V5V2l0aE5hbWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLm9wZW5lZFN0b3JhZ2VLZXlXaXRoTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIG1lbnUgYnV0IGV4cGFuZCBpdCBpZiBtb2JpbGUgbW9kZSBpcyBhY3RpdmF0ZWRcbiAgICAgKiBTdG9yZXMgdGhlIHN0YXR1cyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRPcGVuZWQoIXRoaXMub3BlbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0T3BlbmVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRPcGVuZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9wZW5lZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCAmJiB0aGlzLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICB0aGlzLm1pbmltaXplZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy5vcGVuZWRTdG9yYWdlS2V5V2l0aE5hbWUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3BlbmVkU3RvcmFnZUtleVdpdGhOYW1lLCB0aGlzLm9wZW5lZCA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFpQixlQUFlLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7QUFHbEY7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FBSSxLQUFRO0lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUN2RixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHlCQUF5QjtJQTBDaEUsWUFDb0IsYUFBNEIsRUFDM0IsTUFBYyxFQUNXLGNBQThCLEVBQ3ZELDBCQUFzRDtRQUV2RSxLQUFLLEVBQUUsQ0FBQztRQUxRLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDVyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDdkQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQTdDM0U7Ozs7V0FJRztRQUNLLFVBQUssR0FBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEQ7OztXQUdHO1FBQ0ssU0FBSSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFD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LElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDTCxDQUFDOzhHQTdNUSxxQkFBcUIscUVBNkNsQixlQUFlO2tIQTdDbEIscUJBQXFCLGNBRFQsTUFBTTs7MkZBQ2xCLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQThDdkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNZWRpYU9ic2VydmVyfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xuaW1wb3J0IHtNYXREcmF3ZXIsIE1hdERyYXdlckNvbnRhaW5lciwgTWF0RHJhd2VyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge05hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0Q29udHJvbGxlcn0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hYnN0cmFjdC1jb250cm9sbGVyJztcbmltcG9ydCB7TmF0dXJhbFNpZGVuYXZDb250YWluZXJDb21wb25lbnR9IGZyb20gJy4vc2lkZW5hdi1jb250YWluZXIvc2lkZW5hdi1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7TmF0dXJhbFN0b3JhZ2UsIFNFU1NJT05fU1RPUkFHRX0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL21lbW9yeS1zdG9yYWdlJztcbmltcG9ydCB7TmF0dXJhbFNpZGVuYXZTdGFja1NlcnZpY2V9IGZyb20gJy4vc2lkZW5hdi1zdGFjay5zZXJ2aWNlJztcblxuLyoqXG4gKiBBc3NlcnQgdGhhdCBnaXZlbiB2YWx1ZSBpcyBub3QgbnVsbFxuICovXG5mdW5jdGlvbiBhc3NlcnQ8VD4odmFsdWU6IFQpOiBhc3NlcnRzIHZhbHVlIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBjYWxsIE5hdHVyYWxTaWRlbmF2U2VydmljZS5pbml0KCkgYmVmb3JlIHVzaW5nIHRoZSBzZXJ2aWNlJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRPRE86IEZpeCBuYXYgbWluaW1pemUgYW5kIG1heGltaXplIHJlc2l6ZVxuICogU2luY2UgTWF0ZXJpYWwgMiBiZXRhIDEwLCB3aGVuIG5hdiBpcyByZXNpemVkIHRoZSBib2R5IGlzIG5vdCByZXNpemVkXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9tYXRlcmlhbDIvaXNzdWVzLzY3NDNcbiAqIE1heWJlIHRoZSBiZXR0ZXIgaXMgdG8gd2FpdCBuZXh0IHJlbGVhc2VcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNpZGVuYXZTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0Q29udHJvbGxlciB7XG4gICAgLyoqXG4gICAgICogTmF2aWdhdGlvbiBtb2Rlc1xuICAgICAqIEZpcnN0IGlzIGZvciBkZXNrdG9wIHZpZXdcbiAgICAgKiBTZWNvbmQgaXMgZm9yIG1vYmlsZSB2aWV3XG4gICAgICovXG4gICAgcHJpdmF0ZSBtb2RlczogTWF0RHJhd2VyTW9kZVtdID0gWydzaWRlJywgJ3B1c2gnXTtcblxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlZCBtb2RlXG4gICAgICogRGVmYXVsdCB0byBkZXNrdG9wIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vZGU6IE1hdERyYXdlck1vZGUgPSB0aGlzLm1vZGVzWzBdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBuYXYgaXMgb3BlbmVkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgb3BlbmVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgb3BlbmVkIHN0YXR1cyBkdXJpbmcgbW9iaWxlIHZpZXcsIHRvIHJlc3RvcmUgaWYgd2UgY29tZSBiYWNrIHRvIGRlc2t0b3Agdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgdG1wT3BlbmVkOiBib29sZWFuID0gdGhpcy5vcGVuZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5hdiBpcyBtaW5pbWl6ZWQgb3Igbm90XG4gICAgICovXG4gICAgcHJpdmF0ZSBtaW5pbWl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIExvY2FsU3RvcmFnZSBrZXkgdGhhdCBzdG9yZXMgdGhlIG1pbmltaXplZCBzdGF0dXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1pbmltaXplZFN0b3JhZ2VLZXkgPSAnbWVudS1taW5pbWl6ZWQnO1xuXG4gICAgLyoqXG4gICAgICogTG9jYWxTdG9yYWdlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3BlbmVkIHN0YXR1c1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3BlbmVkU3RvcmFnZUtleSA9ICdtZW51LW9wZW5lZCc7XG5cbiAgICBwcml2YXRlIG1pbmltaXplZFN0b3JhZ2VLZXlXaXRoTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBvcGVuZWRTdG9yYWdlS2V5V2l0aE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbWVkaWFPYnNlcnZlcjogTWVkaWFPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgQEluamVjdChTRVNTSU9OX1NUT1JBR0UpIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2U6IE5hdHVyYWxTdG9yYWdlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5hdHVyYWxTaWRlbmF2U3RhY2tTZXJ2aWNlOiBOYXR1cmFsU2lkZW5hdlN0YWNrU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU1vZGUoKTogTWF0RHJhd2VyTW9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc09wZW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNaW5pbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbmltaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveShjb21wb25lbnQ6IE5hdHVyYWxTaWRlbmF2Q29udGFpbmVyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0dXJhbFNpZGVuYXZTdGFja1NlcnZpY2UudW5yZWdpc3Rlcihjb21wb25lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lcjogTWF0RHJhd2VyQ29udGFpbmVyLFxuICAgICAgICBkcmF3ZXI6IE1hdERyYXdlcixcbiAgICAgICAgY29tcG9uZW50OiBOYXR1cmFsU2lkZW5hdkNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgYXV0b0Nsb3NlID0gZmFsc2UsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAnJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzaWRlbmF2IG5hbWUgcHJvdmlkZWQsIHVzZSA8bmF0dXJhbC1zaWRlbmF2LWNvbnRhaW5lciBuYW1lPVwibWVudVwiPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXR1cmFsU2lkZW5hdlN0YWNrU2VydmljZS5yZWdpc3Rlcihjb21wb25lbnQpO1xuXG4gICAgICAgIHRoaXMubWluaW1pemVkU3RvcmFnZUtleVdpdGhOYW1lID0gbmFtZSArICctJyArIHRoaXMubWluaW1pemVkU3RvcmFnZUtleTtcbiAgICAgICAgdGhpcy5vcGVuZWRTdG9yYWdlS2V5V2l0aE5hbWUgPSBuYW1lICsgJy0nICsgdGhpcy5vcGVuZWRTdG9yYWdlS2V5O1xuXG4gICAgICAgIC8vIEluaXQgZnJvbSBMb2NhbFN0b3JhZ2VcbiAgICAgICAgdGhpcy5taW5pbWl6ZWQgPSB0aGlzLmdldE1pbmltaXplZFN0YXR1cygpO1xuICAgICAgICB0aGlzLm9wZW5lZCA9IHRoaXMuZ2V0TWVudU9wZW5lZFN0YXR1cygpO1xuICAgICAgICB0aGlzLnRtcE9wZW5lZCA9IHRoaXMub3BlbmVkO1xuXG4gICAgICAgIGxldCBvbGRJc0JpZzogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgICAgICB0aGlzLm1lZGlhT2JzZXJ2ZXJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0JpZyA9ICF0aGlzLmlzTW9iaWxlVmlldygpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZSA9IGlzQmlnID8gdGhpcy5tb2Rlc1swXSA6IHRoaXMubW9kZXNbMV07XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkSXNCaWcgPT09IG51bGwgfHwgaXNCaWcgIT09IG9sZElzQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZElzQmlnID0gaXNCaWc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGVjcmVhc2Ugd2luZG93IHNpemUsIHNhdmUgc3RhdHVzIG9mIG1lbnUgYmVmb3JlIGNsb3NpbmcgaXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50bXBPcGVuZWQgPSB0aGlzLm9wZW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBpbmNyZWFzZSB3aW5kb3cgc2l6ZSwgYW5kIHNpZGViYXIgd2FzIG9wZW4gYmVmb3JlLCByZS1vcGVuIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCaWcgJiYgdGhpcy50bXBPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluaW1pemVkID0gdGhpcy5nZXRNaW5pbWl6ZWRTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhdXRvQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZJdGVtQ2xpY2tlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzTW9iaWxlVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm1lZGlhT2JzZXJ2ZXIuaXNBY3RpdmUoJ2d0LXNtJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgbmF2IG9uIG1vYmlsZSB2aWV3IGFmdGVyIGEgY2xpY2tcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2SXRlbUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgbWluaW1pemVkIHN0YXR1cyBhbmQgc3RvcmVzIHRoZSBuZXcgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0TWluaW1pemVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWluaW1pemVkID0gdmFsdWU7XG4gICAgICAgIGFzc2VydCh0aGlzLm1pbmltaXplZFN0b3JhZ2VLZXlXaXRoTmFtZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm1pbmltaXplZFN0b3JhZ2VLZXlXaXRoTmFtZSwgdmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWluaW1pemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TWluaW1pemVkKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TWluaW1pemVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlTWluaW1pemVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE1pbmltaXplZCghdGhpcy5taW5pbWl6ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RvcmVkIG1pbmltaXplZCBzdGF0dXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWluaW1pemVkU3RhdHVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBhc3NlcnQodGhpcy5taW5pbWl6ZWRTdG9yYWdlS2V5V2l0aE5hbWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLm1pbmltaXplZFN0b3JhZ2VLZXlXaXRoTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gZmFsc2UgOiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RvcmVkIG9wZW5lZCBzdGF0dXNcbiAgICAgKiBEZWZhdWx0IG9uIGFuIG9wZW5lZCBzdGF0dXMgaWYgbm90aGluZyBpcyBzdG9yZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWVudU9wZW5lZFN0YXR1cygpOiBib29sZWFuIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMub3BlbmVkU3RvcmFnZUtleVdpdGhOYW1lKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5vcGVuZWRTdG9yYWdlS2V5V2l0aE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBtZW51IGJ1dCBleHBhbmQgaXQgaWYgbW9iaWxlIG1vZGUgaXMgYWN0aXZhdGVkXG4gICAgICogU3RvcmVzIHRoZSBzdGF0dXMgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0T3BlbmVkKCF0aGlzLm9wZW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE9wZW5lZChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0T3BlbmVkKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPcGVuZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5vcGVuZWQgJiYgdGhpcy5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgICAgdGhpcy5taW5pbWl6ZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgICAgYXNzZXJ0KHRoaXMub3BlbmVkU3RvcmFnZUtleVdpdGhOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm9wZW5lZFN0b3JhZ2VLZXlXaXRoTmFtZSwgdGhpcy5vcGVuZWQgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==