@sd-angular/core 1.3.104 → 1.3.106

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/bundles/sd-angular-core-grid-material.umd.js +332 -393
  2. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  4. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-setting.umd.js +21 -25
  6. package/bundles/sd-angular-core-setting.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-setting.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-setting.umd.min.js.map +1 -1
  9. package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +21 -15
  10. package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +17 -26
  11. package/esm2015/grid-material/src/lib/grid-material.component.js +175 -203
  12. package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.service.js +99 -127
  13. package/esm2015/setting/src/lib/setting.service.js +22 -26
  14. package/fesm2015/sd-angular-core-grid-material.js +299 -358
  15. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  16. package/fesm2015/sd-angular-core-setting.js +21 -25
  17. package/fesm2015/sd-angular-core-setting.js.map +1 -1
  18. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  19. package/grid-material/src/lib/components/popup-filter/popup-filter.component.d.ts +6 -12
  20. package/grid-material/src/lib/grid-material.component.d.ts +28 -28
  21. package/grid-material/src/lib/services/grid-filter/grid-filter.service.d.ts +4 -4
  22. package/package.json +1 -1
  23. package/{sd-angular-core-1.3.104.tgz → sd-angular-core-1.3.106.tgz} +0 -0
  24. package/setting/sd-angular-core-setting.metadata.json +1 -1
@@ -1,4 +1,4 @@
1
- var _cache, _subject, _get, _getServer, _set, _setServer, _has, _hasServer, _remove, _removeServer;
1
+ var _cache, _subject, _observer, _get, _getServer, _set, _setServer, _has, _hasServer, _remove, _removeServer;
2
2
  import { __awaiter, __classPrivateFieldGet } from "tslib";
3
3
  import { Optional } from '@angular/core';
4
4
  import { Injectable, Inject } from '@angular/core';
@@ -13,6 +13,7 @@ export class SdSettingService {
13
13
  this.configuration = configuration;
14
14
  _cache.set(this, {});
15
15
  _subject.set(this, {});
16
+ _observer.set(this, {});
16
17
  _get.set(this, (key, option) => {
17
18
  return () => {
18
19
  let cache = __classPrivateFieldGet(this, _cache)[key];
@@ -62,21 +63,15 @@ export class SdSettingService {
62
63
  });
63
64
  _set.set(this, (key, option) => {
64
65
  return (data) => {
65
- if (data === undefined) {
66
- __classPrivateFieldGet(this, _cache)[key] = {
67
- data: undefined,
68
- createdOn: new Date()
69
- };
70
- }
71
- else {
72
- __classPrivateFieldGet(this, _cache)[key] = {
73
- data: JSON.parse(JSON.stringify(data)),
74
- createdOn: new Date()
75
- };
76
- }
66
+ const clonedData = data === undefined ? undefined : JSON.parse(JSON.stringify(data));
67
+ __classPrivateFieldGet(this, _cache)[key] = {
68
+ data: clonedData,
69
+ createdOn: new Date(),
70
+ };
71
+ const storagedData = JSON.stringify(__classPrivateFieldGet(this, _cache)[key]);
77
72
  if ((option === null || option === void 0 ? void 0 : option.type) === 'session') {
78
73
  try {
79
- sessionStorage.setItem(key, JSON.stringify(__classPrivateFieldGet(this, _cache)[key]));
74
+ sessionStorage.setItem(key, storagedData);
80
75
  __classPrivateFieldGet(this, _subject)[key].next(__classPrivateFieldGet(this, _cache)[key].data);
81
76
  }
82
77
  catch (err) {
@@ -85,7 +80,7 @@ export class SdSettingService {
85
80
  }
86
81
  else {
87
82
  try {
88
- localStorage.setItem(key, JSON.stringify(__classPrivateFieldGet(this, _cache)[key]));
83
+ localStorage.setItem(key, storagedData);
89
84
  __classPrivateFieldGet(this, _subject)[key].next(__classPrivateFieldGet(this, _cache)[key].data);
90
85
  }
91
86
  catch (err) {
@@ -100,13 +95,13 @@ export class SdSettingService {
100
95
  if (data === undefined) {
101
96
  __classPrivateFieldGet(this, _cache)[key] = {
102
97
  data: undefined,
103
- createdOn: new Date()
98
+ createdOn: new Date(),
104
99
  };
105
100
  }
106
101
  else {
107
102
  __classPrivateFieldGet(this, _cache)[key] = {
108
103
  data: JSON.parse(JSON.stringify(data)),
109
- createdOn: new Date()
104
+ createdOn: new Date(),
110
105
  };
111
106
  }
112
107
  try {
@@ -196,10 +191,10 @@ export class SdSettingService {
196
191
  throw new Error('Key is required');
197
192
  }
198
193
  let hashKey = null;
199
- if (typeof (key) === 'string') {
194
+ if (typeof key === 'string') {
200
195
  hashKey = key;
201
196
  }
202
- else if (typeof (key) === 'object') {
197
+ else if (typeof key === 'object') {
203
198
  hashKey = hash(key);
204
199
  }
205
200
  else {
@@ -214,6 +209,7 @@ export class SdSettingService {
214
209
  const remove = __classPrivateFieldGet(this, _remove).call(this, hashKey, option);
215
210
  if (!__classPrivateFieldGet(this, _subject)[hashKey]) {
216
211
  __classPrivateFieldGet(this, _subject)[hashKey] = new BehaviorSubject(get());
212
+ __classPrivateFieldGet(this, _observer)[hashKey] = __classPrivateFieldGet(this, _subject)[hashKey].asObservable();
217
213
  }
218
214
  return {
219
215
  get,
@@ -221,7 +217,7 @@ export class SdSettingService {
221
217
  has,
222
218
  remove,
223
219
  subject: __classPrivateFieldGet(this, _subject)[hashKey],
224
- observer: __classPrivateFieldGet(this, _subject)[hashKey]
220
+ observer: __classPrivateFieldGet(this, _observer)[hashKey],
225
221
  };
226
222
  }
227
223
  createServer(key, option) {
@@ -230,10 +226,10 @@ export class SdSettingService {
230
226
  throw new Error('Key is required');
231
227
  }
232
228
  let hashKey = null;
233
- if (typeof (key) === 'string') {
229
+ if (typeof key === 'string') {
234
230
  hashKey = key;
235
231
  }
236
- else if (typeof (key) === 'object') {
232
+ else if (typeof key === 'object') {
237
233
  hashKey = hash(key);
238
234
  }
239
235
  else {
@@ -264,18 +260,18 @@ export class SdSettingService {
264
260
  has,
265
261
  remove,
266
262
  subject: __classPrivateFieldGet(this, _subject)[hashKey],
267
- observer: __classPrivateFieldGet(this, _subject)[hashKey].pipe(startWith(__classPrivateFieldGet(this, _subject)[hashKey].getValue()), switchMap(get))
263
+ observer: __classPrivateFieldGet(this, _subject)[hashKey].pipe(startWith(__classPrivateFieldGet(this, _subject)[hashKey].getValue()), switchMap(get)),
268
264
  };
269
265
  }
270
266
  }
271
- _cache = new WeakMap(), _subject = new WeakMap(), _get = new WeakMap(), _getServer = new WeakMap(), _set = new WeakMap(), _setServer = new WeakMap(), _has = new WeakMap(), _hasServer = new WeakMap(), _remove = new WeakMap(), _removeServer = new WeakMap();
267
+ _cache = new WeakMap(), _subject = new WeakMap(), _observer = new WeakMap(), _get = new WeakMap(), _getServer = new WeakMap(), _set = new WeakMap(), _setServer = new WeakMap(), _has = new WeakMap(), _hasServer = new WeakMap(), _remove = new WeakMap(), _removeServer = new WeakMap();
272
268
  SdSettingService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdSettingService_Factory() { return new SdSettingService(i0.ɵɵinject(i1.SETTING_CONFIG, 8)); }, token: SdSettingService, providedIn: "root" });
273
269
  SdSettingService.decorators = [
274
270
  { type: Injectable, args: [{
275
- providedIn: 'root'
271
+ providedIn: 'root',
276
272
  },] }
277
273
  ];
278
274
  SdSettingService.ctorParameters = () => [
279
275
  { type: undefined, decorators: [{ type: Inject, args: [SETTING_CONFIG,] }, { type: Optional }] }
280
276
  ];
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9zZXR0aW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXR0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFXLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBNkYsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBSzVJLE1BQU0sT0FBTyxnQkFBZ0I7SUFZM0IsWUFBd0QsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBWDVGLGlCQUtJLEVBQUUsRUFBQztRQUVQLG1CQUVJLEVBQUUsRUFBQztRQThFUCxlQUFPLENBQVUsR0FBVyxFQUFFLE1BQTJCLEVBQWEsRUFBRTtZQUN0RSxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLEtBQUssR0FBRyxxQ0FBWSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO29CQUM5QixJQUFJO3dCQUNGLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDakQ7b0JBQUMsV0FBTTt3QkFDTixLQUFLLEdBQUcsU0FBUyxDQUFDO3FCQUNuQjtpQkFDRjtxQkFBTTtvQkFD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UUFDN0MsTUFBTSxNQUFNLEdBQUcsMkNBQUEsSUFBSSxFQUFTLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSx1Q0FBYyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLHVDQUFjLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUNBQWMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEcsQ0FBQztJQUNKLENBQUM7Ozs7O1lBekZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQWFjLE1BQU0sU0FBQyxjQUFjLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU0VUVElOR19DT05GSUcsIElTZXR0aW5nQ29uZmlndXJhdGlvbiwgU2RTZXR0aW5nT3B0aW9uLCBTZFNldHRpbmcsIFNkU2V0dGluZ1NlcnZlciwgU2RTZXR0aW5nT3B0aW9uU2VydmVyIH0gZnJvbSAnLi9zZXR0aW5nLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkU2V0dGluZ1NlcnZpY2Uge1xyXG4gICNjYWNoZToge1xyXG4gICAgW2tleTogc3RyaW5nXToge1xyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIGNyZWF0ZWRPbjogRGF0ZVxyXG4gICAgfVxyXG4gIH0gPSB7fTtcclxuXHJcbiAgI3N1YmplY3Q6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChTRVRUSU5HX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU2V0dGluZ0NvbmZpZ3VyYXRpb24pIHsgfVxyXG5cclxuICBjcmVhdGU8VCA9IGFueT4oa2V5OiBzdHJpbmcgfCBvYmplY3QsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6IFNkU2V0dGluZzxUPiB7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAodHlwZW9mIChrZXkpID09PSAnc3RyaW5nJykge1xyXG4gICAgICBoYXNoS2V5ID0ga2V5O1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgKGtleSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBoYXNoKGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uPy5jb252ZXJ0S2V5KSB7XHJcbiAgICAgIGhhc2hLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29udmVydEtleShoYXNoS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBnZXQgPSB0aGlzLiNnZXQ8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHNldCA9IHRoaXMuI3NldDxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgaGFzID0gdGhpcy4jaGFzKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCByZW1vdmUgPSB0aGlzLiNyZW1vdmUoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGlmICghdGhpcy4jc3ViamVjdFtoYXNoS2V5XSkge1xyXG4gICAgICB0aGlzLiNzdWJqZWN0W2hhc2hLZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihnZXQoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQsXHJcbiAgICAgIHNldCxcclxuICAgICAgaGFzLFxyXG4gICAgICByZW1vdmUsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0sXHJcbiAgICAgIG9ic2VydmVyOiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2VydmVyPFQgPSBhbnk+KGtleTogc3RyaW5nIHwgb2JqZWN0LCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb25TZXJ2ZXI8VD4pOiBTZFNldHRpbmdTZXJ2ZXI8VD4ge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiAoa2V5KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaGFzaEtleSA9IGtleTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIChrZXkpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBoYXNoS2V5ID0gaGFzaChrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbj8uY29udmVydEtleSkge1xyXG4gICAgICBoYXNoS2V5ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbnZlcnRLZXkoaGFzaEtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8uZ2V0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCBnZXQgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8uc2V0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCBzZXQgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8ucmVtb3ZlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCByZW1vdmUgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI3N1YmplY3RbaGFzaEtleV0pIHtcclxuICAgICAgdGhpcy4jc3ViamVjdFtoYXNoS2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihvcHRpb24/LmRlZmF1bHQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0ID0gdGhpcy4jZ2V0U2VydmVyPFQ+KGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCBzZXQgPSB0aGlzLiNzZXRTZXJ2ZXI8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IGhhcyA9IHRoaXMuI2hhc1NlcnZlcihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgcmVtb3ZlID0gdGhpcy4jcmVtb3ZlKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQsXHJcbiAgICAgIHNldCxcclxuICAgICAgaGFzLFxyXG4gICAgICByZW1vdmUsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0sXHJcbiAgICAgIG9ic2VydmVyOiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLnBpcGUoc3RhcnRXaXRoKHRoaXMuI3N1YmplY3RbaGFzaEtleV0uZ2V0VmFsdWUoKSksIHN3aXRjaE1hcChnZXQpKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoKSA9PiBUKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2dldFNlcnZlciA9IDxUID0gYW55PihrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uU2VydmVyPFQ+KTogKCgpID0+IFByb21pc2U8VD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuI2NhY2hlW2tleV07XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FjaGUgPSBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24/LmdldChrZXksIG9wdGlvbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghY2FjaGUpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9uPy5kZWZhdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWNoZS5kYXRhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhY2hlLmRhdGEpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAjc2V0ID0gPFQgPSBhbnk+KGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb248VD4pOiAoKGRhdGE6IFQpID0+IHZvaWQpID0+IHtcclxuICAgIHJldHVybiAoZGF0YTogVCkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpLFxyXG4gICAgICAgICAgY3JlYXRlZE9uOiBuZXcgRGF0ZSgpXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuI2NhY2hlW2tleV0pKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuI2NhY2hlW2tleV0pKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI3NldFNlcnZlciA9IDxUID0gYW55PihrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uPFQ+KTogKChkYXRhOiBUKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKGRhdGE6IFQpID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBjcmVhdGVkT246IG5ldyBEYXRlKClcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24/LnNldChrZXksIHRoaXMuI2NhY2hlW2tleV0pO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNoYXMgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbik6ICgoKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNoYXNTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNyZW1vdmUgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbik6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNjYWNoZVtrZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNyZW1vdmVTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbj8ucmVtb3ZlKGtleSwgb3B0aW9uKTtcclxuICAgICAgICB0aGlzLiNjYWNoZVtrZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9zZXR0aW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXR0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQTZGLE1BQU0saUJBQWlCLENBQUM7OztBQUs1SSxNQUFNLE9BQU8sZ0JBQWdCO0lBVzNCLFlBR1UsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBYjlDLGlCQUtJLEVBQUUsRUFBQztRQUVQLG1CQUFpRCxFQUFFLEVBQUM7UUFDcEQsb0JBQTZDLEVBQUUsRUFBQztRQW1GaEQsZUFBTyxDQUFVLEdBQVcsRUFBRSxNQUEyQixFQUFhLEVBQUU7WUFDdEUsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxLQUFLLEdBQUcscUNBQVksR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxNQUFLLFNBQVMsRUFBRTtvQkFDOUIsSUFBSTt3QkFDRixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO29CQUFDLFdBQU07d0JBQ04sS0FBSyxHQUFHLFNBQVMsQ0FBQztxQkFDbkI7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSTt3QkFDRixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQy9DO29CQUFDLFdBQU07d0JBQ04sS0FBSyxHQUFHLFNBQVMsQ0FBQztxQkFDbkI7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLENBQUM7aUJBQ3hCO2dCQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7b0JBQzVCLE9BQU8sU0FBUyxDQUFDO2lCQUNsQjtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUM7UUFDSixDQUFDLEVBQUM7UUFFRixxQkFBYSxDQUFVLEdBQVcsRUFBRSxNQUFpQyxFQUFzQixFQUFFO1lBQzNGLE9BQU8sR0FBUyxFQUFFOztnQkFDaEIsSUFBSSxLQUFLLEdBQUcscUNBQVksR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUk7b0JBQ0YsS0FBSyxHQUFHLGFBQU0sSUFBSSxDQUFDLGFBQWEsMENBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUMsQ0FBQztpQkFDcEQ7Z0JBQUMsV0FBTTtvQkFDTixLQUFLLEdBQUcsU0FBUyxDQUFDO2lCQUNuQjtnQkFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLE9BQU8sTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sQ0FBQztpQkFDeEI7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDNUIsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQSxDQUFDO1FBQ0osQ0FBQyxFQUFDO1FBRUYsZUFBTyxDQUFVLEdBQVcsRUFBRSxNQUEyQixFQUF1QixFQUFFO1lBQ2hGLE9BQU8sQ0FBQyxJQUFPLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckYscUNBQVksR0FBRyxDQUFDLEdBQUc7b0JBQ2pCLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7aUJBQ3RCLENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQ0FBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksTUFBSyxTQUFTLEVBQUU7b0JBQzlCLElBQUk7d0JBQ0YsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQzFDLHVDQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQ0FBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDaEQ7b0JBQUMsT0FBTyxHQUFHLEVBQUU7d0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDcEI7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSTt3QkFDRixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQzt3QkFDeEMsdUNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNoRDtvQkFBQyxPQUFPLEdBQUcsRUFBRTt3QkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNwQjtpQkFDRjtZQUNILENBQUMsQ0FBQztRQUNKLENBQUMsRUFBQztRQUVGLHFCQUFhLENBQVUsR0FBVyxFQUFFLE1BQTJCLEVBQWdDLEVBQUU7WUFDL0YsT0FBTyxDQUFPLElBQU8sRUFBRSxFQUFFOztnQkFDdkIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUN0QixxQ0FBWSxHQUFHLENBQUMsR0FBRzt3QkFDakIsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO3FCQUN0QixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLHFDQUFZLEdBQUcsQ0FBQyxHQUFHO3dCQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0QyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7cUJBQ3RCLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSTtvQkFDRixhQUFNLElBQUksQ0FBQyxhQUFhLDBDQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUscUNBQVksR0FBRyxDQUFDLEVBQUMsQ0FBQztvQkFDckQsdUNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNoRDtnQkFBQyxPQUFPLEdBQUcsRUFBRTtvQkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtZQUNILENBQUMsQ0FBQSxDQUFDO1FBQ0osQ0FBQyxFQUFDO1FBRUYsZUFBTyxDQUFDLEdBQVcsRUFBRSxNQUF3QixFQUFtQixFQUFFO1lBQ2hFLE9BQU8sR0FBRyxFQUFFO2dCQUNWLElBQUksS0FBSyxHQUFHLHFDQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksTUFBSyxTQUFTLEVBQUU7b0JBQzlCLElBQUk7d0JBQ0YsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUNqRDtvQkFBQyxXQUFNO3dCQUNOLEtBQUssR0FBRyxTQUFTLENBQUM7cUJBQ25CO2lCQUNGO3FCQUFNO29CQUNMLElBQUk7d0JBQ0YsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxXQUFNO3dCQUNOLEtBQUssR0FBRyxTQUFTLENBQUM7cUJBQ25CO2lCQUNGO2dCQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUM7UUFDSixDQUFDLEVBQUM7UUFFRixxQkFBYSxDQUFDLEdBQVcsRUFBRSxNQUE4QixFQUE0QixFQUFFO1lBQ3JGLE9BQU8sR0FBUyxFQUFFOztnQkFDaEIsSUFBSSxLQUFLLEdBQUcscUNBQVksR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUk7b0JBQ0YsS0FBSyxHQUFHLGFBQU0sSUFBSSxDQUFDLGFBQWEsMENBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUMsQ0FBQztpQkFDcEQ7Z0JBQUMsV0FBTTtvQkFDTixLQUFLLEdBQUcsU0FBUyxDQUFDO2lCQUNuQjtnQkFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDLEVBQUM7UUFFRixrQkFBVSxDQUFDLEdBQVcsRUFBRSxNQUF3QixFQUF5QixFQUFFO1lBQ3pFLE9BQU8sR0FBUyxFQUFFO2dCQUNoQixJQUFJO29CQUNGLElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxNQUFLLFNBQVMsRUFBRTt3QkFDOUIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDaEM7eUJBQU07d0JBQ0wsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QscUNBQVksR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUM3Qix1Q0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3BDO2dCQUFDLE9BQU8sR0FBRyxFQUFFO29CQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDLEVBQUM7UUFFRix3QkFBZ0IsQ0FBQyxHQUFXLEVBQUUsTUFBOEIsRUFBeUIsRUFBRTtZQUNyRixPQUFPLEdBQVMsRUFBRTs7Z0JBQ2hCLElBQUk7b0JBQ0YsYUFBTSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBQyxDQUFDO29CQUM5QyxxQ0FBWSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQzdCLHVDQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDcEM7Z0JBQUMsT0FBTyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDcEI7WUFDSCxDQUFDLENBQUEsQ0FBQztRQUNKLENBQUMsRUFBQztJQXpPQyxDQUFDO0lBRUosTUFBTSxDQUFVLEdBQW9CLEVBQUUsTUFBMkI7O1FBQy9ELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxHQUFHLEdBQUcsQ0FBQztTQUNmO2FBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDbEMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoQztRQUNELFVBQUksSUFBSSxDQUFDLGFBQWEsMENBQUUsVUFBVSxFQUFFO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELE1BQU0sR0FBRyxHQUFHLHdDQUFBLElBQUksRUFBUyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsd0NBQUEsSUFBSSxFQUFTLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsR0FBRyx3Q0FBQSxJQUFJLEVBQU0sT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLDJDQUFBLElBQUksRUFBUyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLHVDQUFjLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLHVDQUFjLE9BQU8sQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkQsd0NBQWUsT0FBTyxDQUFDLEdBQUcsdUNBQWMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDakU7UUFDRCxPQUFPO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSx1Q0FBYyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLHdDQUFlLE9BQU8sQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBVSxHQUFvQixFQUFFLE1BQWlDOztRQUMzRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDO1FBQzNCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sR0FBRyxHQUFHLENBQUM7U0FDZjthQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckI7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEM7UUFDRCxVQUFJLElBQUksQ0FBQyxhQUFhLDBDQUFFLFVBQVUsRUFBRTtZQUNsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLFFBQUMsSUFBSSxDQUFDLGFBQWEsMENBQUUsR0FBRyxDQUFBLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxRQUFDLElBQUksQ0FBQyxhQUFhLDBDQUFFLEdBQUcsQ0FBQSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztTQUNqRjtRQUNELElBQUksUUFBQyxJQUFJLENBQUMsYUFBYSwwQ0FBRSxNQUFNLENBQUEsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7U0FDcEY7UUFDRCxJQUFJLENBQUMsdUNBQWMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsdUNBQWMsT0FBTyxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsTUFBTSxHQUFHLEdBQUcsOENBQUEsSUFBSSxFQUFlLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyw4Q0FBQSxJQUFJLEVBQWUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLDhDQUFBLElBQUksRUFBWSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsMkNBQUEsSUFBSSxFQUFTLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSx1Q0FBYyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLHVDQUFjLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUNBQWMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEcsQ0FBQztJQUNKLENBQUM7Ozs7O1lBN0ZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQWFJLE1BQU0sU0FBQyxjQUFjLGNBQ3JCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNFVFRJTkdfQ09ORklHLCBJU2V0dGluZ0NvbmZpZ3VyYXRpb24sIFNkU2V0dGluZ09wdGlvbiwgU2RTZXR0aW5nLCBTZFNldHRpbmdTZXJ2ZXIsIFNkU2V0dGluZ09wdGlvblNlcnZlciB9IGZyb20gJy4vc2V0dGluZy5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RTZXR0aW5nU2VydmljZSB7XHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgICAgY3JlYXRlZE9uOiBEYXRlO1xyXG4gICAgfTtcclxuICB9ID0ge307XHJcblxyXG4gICNzdWJqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvclN1YmplY3Q8YW55Pj4gPSB7fTtcclxuICAjb2JzZXJ2ZXI6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8YW55Pj4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFNFVFRJTkdfQ09ORklHKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNldHRpbmdDb25maWd1cmF0aW9uXHJcbiAgKSB7fVxyXG5cclxuICBjcmVhdGU8VCA9IGFueT4oa2V5OiBzdHJpbmcgfCBvYmplY3QsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6IFNkU2V0dGluZzxUPiB7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaGFzaEtleSA9IGtleTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgaGFzaEtleSA9IGhhc2goa2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXknKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24/LmNvbnZlcnRLZXkpIHtcclxuICAgICAgaGFzaEtleSA9IHRoaXMuY29uZmlndXJhdGlvbi5jb252ZXJ0S2V5KGhhc2hLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdldCA9IHRoaXMuI2dldDxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3Qgc2V0ID0gdGhpcy4jc2V0PFQ+KGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCBoYXMgPSB0aGlzLiNoYXMoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHJlbW92ZSA9IHRoaXMuI3JlbW92ZShoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgaWYgKCF0aGlzLiNzdWJqZWN0W2hhc2hLZXldKSB7XHJcbiAgICAgIHRoaXMuI3N1YmplY3RbaGFzaEtleV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KGdldCgpKTtcclxuICAgICAgdGhpcy4jb2JzZXJ2ZXJbaGFzaEtleV0gPSB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZ2V0LFxyXG4gICAgICBzZXQsXHJcbiAgICAgIGhhcyxcclxuICAgICAgcmVtb3ZlLFxyXG4gICAgICBzdWJqZWN0OiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLFxyXG4gICAgICBvYnNlcnZlcjogdGhpcy4jb2JzZXJ2ZXJbaGFzaEtleV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2VydmVyPFQgPSBhbnk+KGtleTogc3RyaW5nIHwgb2JqZWN0LCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb25TZXJ2ZXI8VD4pOiBTZFNldHRpbmdTZXJ2ZXI8VD4ge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBrZXk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBoYXNoKGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uPy5jb252ZXJ0S2V5KSB7XHJcbiAgICAgIGhhc2hLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29udmVydEtleShoYXNoS2V5KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5nZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGdldCBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5zZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIHNldCBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5yZW1vdmUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIHJlbW92ZSBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy4jc3ViamVjdFtoYXNoS2V5XSkge1xyXG4gICAgICB0aGlzLiNzdWJqZWN0W2hhc2hLZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG9wdGlvbj8uZGVmYXVsdCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXQgPSB0aGlzLiNnZXRTZXJ2ZXI8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHNldCA9IHRoaXMuI3NldFNlcnZlcjxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgaGFzID0gdGhpcy4jaGFzU2VydmVyKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCByZW1vdmUgPSB0aGlzLiNyZW1vdmUoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGdldCxcclxuICAgICAgc2V0LFxyXG4gICAgICBoYXMsXHJcbiAgICAgIHJlbW92ZSxcclxuICAgICAgc3ViamVjdDogdGhpcy4jc3ViamVjdFtoYXNoS2V5XSxcclxuICAgICAgb2JzZXJ2ZXI6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0ucGlwZShzdGFydFdpdGgodGhpcy4jc3ViamVjdFtoYXNoS2V5XS5nZXRWYWx1ZSgpKSwgc3dpdGNoTWFwKGdldCkpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoKSA9PiBUKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNnZXRTZXJ2ZXIgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcjxUPik6ICgoKSA9PiBQcm9taXNlPFQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNzZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoZGF0YTogVCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgcmV0dXJuIChkYXRhOiBUKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsb25lZERhdGEgPSBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBkYXRhOiBjbG9uZWREYXRhLFxyXG4gICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgc3RvcmFnZWREYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy4jY2FjaGVba2V5XSk7XHJcbiAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgc3RvcmFnZWREYXRhKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHN0b3JhZ2VkRGF0YSk7XHJcbiAgICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh0aGlzLiNjYWNoZVtrZXldLmRhdGEpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjc2V0U2VydmVyID0gPFQgPSBhbnk+KGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb248VD4pOiAoKGRhdGE6IFQpID0+IFByb21pc2U8dm9pZD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoZGF0YTogVCkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5zZXQoa2V5LCB0aGlzLiNjYWNoZVtrZXldKTtcclxuICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh0aGlzLiNjYWNoZVtrZXldLmRhdGEpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2hhcyA9IChrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uKTogKCgpID0+IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuI2NhY2hlW2tleV07XHJcbiAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjYWNoZSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgY2FjaGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghY2FjaGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNoYXNTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjcmVtb3ZlID0gKGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb24pOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xyXG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI3JlbW92ZVNlcnZlciA9IChrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uU2VydmVyKTogKCgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5yZW1vdmUoa2V5LCBvcHRpb24pO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy4jc3ViamVjdFtrZXldLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIl19