@dignite-ng/expand.dynamic-form 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,28 +47,13 @@ export class TreeConfigComponent {
47
47
  return this.formEntity?.get('formConfiguration');
48
48
  }
49
49
  get TreeOptions() {
50
- return this.formConfiguration.controls['TreeView.Nodes'];
50
+ return this.formConfiguration?.controls['TreeView.Nodes'];
51
51
  }
52
52
  async dataLoaded() {
53
53
  if (this.formEntity && this._type) {
54
54
  await this.AfterInit();
55
55
  }
56
56
  }
57
- /**增加选项 */
58
- // addTreeOptions() {
59
- // this.TreeOptions.push(
60
- // new FormGroup({
61
- // Text: new FormControl('', Validators.required),
62
- // Value: new FormControl('', Validators.required),
63
- // Selected: new FormControl(false),
64
- // Children: new FormArray([]),
65
- // }),
66
- // );
67
- // }
68
- // /**删除某个选项 */
69
- // deleteTreeOptions(index) {
70
- // this.TreeOptions.removeAt(index);
71
- // }
72
57
  AfterInit() {
73
58
  return new Promise(resolve => {
74
59
  this.formEntity?.setControl('formConfiguration', this.fb.group(new TreeConfig()));
@@ -115,10 +100,12 @@ export class TreeConfigComponent {
115
100
  // }
116
101
  /**字段标签input失去标点生成字段名字 */
117
102
  disPlayNameInputBlur(event) {
103
+ if (!this.nodeForm)
104
+ return;
118
105
  const value = event.target.value;
119
106
  const pinyin = this.toPinyinService.get(value);
120
107
  const nameInput = this.nodeForm.get('key');
121
- if (nameInput.value)
108
+ if (!nameInput || nameInput.value)
122
109
  return;
123
110
  nameInput.patchValue(pinyin);
124
111
  }
@@ -133,9 +120,6 @@ export class TreeConfigComponent {
133
120
  }
134
121
  this.anExpandedNode = anExpandedNode;
135
122
  }
136
- log(v) {
137
- console.log(v, '111111111');
138
- }
139
123
  /**生成GUID */
140
124
  generateGuid() {
141
125
  return crypto.randomUUID();
@@ -186,6 +170,7 @@ export class TreeConfigComponent {
186
170
  createOrEditSave() {
187
171
  const { value } = this.nodeForm;
188
172
  const { selectTree, isCreateChild, nodes, anExpandedNode } = this;
173
+ const isMultiple = this.formConfiguration.controls['TreeView.Multiple'];
189
174
  if (selectTree) {
190
175
  if (isCreateChild) {
191
176
  // 创建子节点
@@ -204,6 +189,11 @@ export class TreeConfigComponent {
204
189
  // 创建根节点
205
190
  nodes.push(value);
206
191
  }
192
+ // 单选模式下,如果当前节点被选中,清除其他节点的选中状态
193
+ if (!isMultiple.value && value.isChecked) {
194
+ this.clearAllChecked(nodes);
195
+ this.setNodeCheckedOnly(nodes, value.key, true);
196
+ }
207
197
  this.nodes = [...nodes];
208
198
  this.syncTreeOptionsFromNodes();
209
199
  this.cdr.detectChanges();
@@ -229,7 +219,6 @@ export class TreeConfigComponent {
229
219
  for (const node of nodes) {
230
220
  if (node.key === targetKey) {
231
221
  node.title = updatedData.title;
232
- node.key = updatedData.key;
233
222
  node.isChecked = updatedData.isChecked;
234
223
  return true;
235
224
  }
@@ -307,10 +296,38 @@ export class TreeConfigComponent {
307
296
  }
308
297
  /**设置 */
309
298
  toggleMultiple(event) {
299
+ this.clearAllChecked(this.nodes);
300
+ return;
310
301
  const isMultiple = this.formConfiguration.controls['TreeView.Multiple'];
311
302
  if (!isMultiple.value) {
312
303
  this.clearAllChecked(this.nodes);
313
304
  }
305
+ else {
306
+ this.applyMultipleLogic(this.nodes);
307
+ }
308
+ this.nodes = [...this.nodes];
309
+ this.syncTreeOptionsFromNodes();
310
+ this.cdr.detectChanges();
311
+ }
312
+ /**应用多选逻辑:选中的节点同时选中其所有子节点和父节点 */
313
+ applyMultipleLogic(nodes) {
314
+ const checkedKeys = [];
315
+ this.collectCheckedKeys(nodes, checkedKeys);
316
+ checkedKeys.forEach(key => {
317
+ this.setNodeChecked(nodes, key, true);
318
+ this.setParentNodesChecked(nodes, key);
319
+ });
320
+ }
321
+ /**收集所有选中节点的key */
322
+ collectCheckedKeys(nodes, result) {
323
+ for (const node of nodes) {
324
+ if (node.isChecked) {
325
+ result.push(node.key);
326
+ }
327
+ if (node.children?.length) {
328
+ this.collectCheckedKeys(node.children, result);
329
+ }
330
+ }
314
331
  }
315
332
  /**切换节点选中状态 */
316
333
  toggleNodeChecked(event, node) {
@@ -512,4 +529,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
512
529
  type: ViewChild,
513
530
  args: ['nodeModalSubmit', { static: false }]
514
531
  }] } });
515
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixFQUFlLEVBQVMsZUFBK0I7UUFBdkQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQTZCbkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBOEV4QyxZQUFZO1FBQ1oscUJBQXFCO1FBQ3JCLHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUVKLFlBQVk7UUFDWixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWxCLFlBQVk7UUFDWixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQWtCM0IsYUFBYTtRQUNiLGtCQUFhLEdBQWtCLEtBQUssQ0FBQztRQUNy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USxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUM3RSxRQUFRLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBamhCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix1VkNYaEMsNDNOQTRHWTs7MkZEakdDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7OEdBU2YsSUFBSTtzQkFEZCxLQUFLO2dCQVFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBUUssTUFBTTtzQkFEaEIsS0FBSztnQkFXc0MsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdITyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuL3RyZWUtY29uZmlnJztcclxuaW1wb3J0IHtUb1BpbnlpblNlcnZpY2V9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGYtdHJlZS1jb25maWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLWNvbmZpZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29uZmlnLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb25maWdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixwcml2YXRlIHRvUGlueWluU2VydmljZTpUb1BpbnlpblNlcnZpY2UpIHt9XHJcbiAgLyoq6KGo5Y2V5o6n5Lu257G75Z6LICovXHJcbiAgX3R5cGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdHlwZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6YCJ5oup55qE6KGo5Y2V5L+h5oGvICovXHJcbiAgX3NlbGVjdGVkOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBFbnRpdHkodjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIGdldCBmb3JtQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnZm9ybUNvbmZpZ3VyYXRpb24nKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG4gIGdldCBUcmVlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWd1cmF0aW9uLmNvbnRyb2xzWydUcmVlVmlldy5Ob2RlcyddIGFzIEZvcm1BcnJheTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgYXN5bmMgZGF0YUxvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1FbnRpdHkgJiYgdGhpcy5fdHlwZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLkFmdGVySW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKirlop7liqDpgInpobkgKi9cclxuICAvLyBhZGRUcmVlT3B0aW9ucygpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucHVzaChcclxuICAvLyAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgLy8gICAgICAgVGV4dDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBWYWx1ZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBTZWxlY3RlZDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAvLyAgICAgICBDaGlsZHJlbjogbmV3IEZvcm1BcnJheShbXSksXHJcbiAgLy8gICAgIH0pLFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcbiAgLy8gLyoq5Yig6Zmk5p+Q5Liq6YCJ6aG5ICovXHJcbiAgLy8gZGVsZXRlVHJlZU9wdGlvbnMoaW5kZXgpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIC8vIH1cclxuXHJcbiAgQWZ0ZXJJbml0KCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1FbnRpdHk/LnNldENvbnRyb2woJ2Zvcm1Db25maWd1cmF0aW9uJywgdGhpcy5mYi5ncm91cChuZXcgVHJlZUNvbmZpZygpKSk7XHJcbiAgICAgIHRoaXMuVHJlZU9wdGlvbnM/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXSk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8g5omL5Yqo6Kem5Y+R5Y+Y5pu05qOA5rWLXHJcbiAgICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XHJcblxyXG4gICBcclxuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICYmIHRoaXMuX3NlbGVjdGVkLmZvcm1Db250cm9sTmFtZSA9PSB0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgICAgaWYgKHRyZWVOb2Rlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVOb2Rlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgICAgIC8vIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLl9zZWxlY3RlZC5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTm9kZXMnXSkge1xyXG4gICAgICAgIC8vICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBjYXBpdGFsaXplZEtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgICAvLyAgICAgZWxlbWVudFtjYXBpdGFsaXplZEtleV0gPSBpdGVtO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgLi4udGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW9k+mAieaLqemhueeahOaWh+acrOWPkeeUn+WPmOWMluaXtu+8jOabtOaWsOWvueW6lOeahOWAvFxyXG4gICAqIEBwYXJhbSBldmVudCDovpPlhaXkuovku7blr7nosaFcclxuICAgKiBAcGFyYW0gaW5kZXgg6YCJ5oup6aG555qE57Si5byV5L2N572uXHJcbiAgICogQGRlc2NyaXB0aW9uIOWmguaenOmAieaLqemhueW3suaciVZhbHVl5YC85YiZ5LiN5aSE55CG77yM5ZCm5YiZ5bCG5Lit5paH5paH5pys6L2s5o2i5Li65ou86Z+z5L2c5Li6VmFsdWXlgLxcclxuICAgKi9cclxuICAvLyB0ZXh0Q2hhbmdlKGV2ZW50LCBpbmRleCkge1xyXG4gIC8vICAgY29uc3QgVHJlZU9wdGlvbnNJdGVtID0gdGhpcy5UcmVlT3B0aW9ucy5hdChpbmRleCk7XHJcbiAgLy8gICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAvLyAgIGlmIChUcmVlT3B0aW9uc0l0ZW0uZ2V0KCdWYWx1ZScpPy52YWx1ZSkgcmV0dXJuO1xyXG4gIC8vICAgVHJlZU9wdGlvbnNJdGVtLnBhdGNoVmFsdWUoe1xyXG4gIC8vICAgICBWYWx1ZTogc3RydWN0dXJlZENsb25lKHZhbHVlKSxcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuICAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cclxuICBkaXNQbGF5TmFtZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBwaW55aW4gPSB0aGlzLnRvUGlueWluU2VydmljZS5nZXQodmFsdWUpO1xyXG4gICAgY29uc3QgbmFtZUlucHV0ID0gdGhpcy5ub2RlRm9ybS5nZXQoJ2tleScpO1xyXG4gICAgaWYgKG5hbWVJbnB1dC52YWx1ZSkgcmV0dXJuO1xyXG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcclxuICB9XHJcblxyXG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xyXG4gIC8vIGRyb3AoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuVHJlZU9wdGlvbnMuY29udHJvbHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgLy8gICB0aGlzLlRyZWVPcHRpb25zLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKnRyZWXmlbDmja4gKi9cclxuICBub2RlczogYW55W10gPSBbXTtcclxuXHJcbiAgLyoq5bey5bGV5byA55qE6IqC54K5ICovXHJcbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XHJcblxyXG4gIC8qKueCueWHu+WxleW8gOagkeiKgueCueWbvuagh+inpuWPkSAqL1xyXG4gIG56RXhwYW5kQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBhbkV4cGFuZGVkTm9kZSA9IHRoaXMuYW5FeHBhbmRlZE5vZGU7XHJcbiAgICBpZiAoYW5FeHBhbmRlZE5vZGUuaW5jbHVkZXMoZXZlbnQubm9kZS5rZXkpKSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlLnB1c2goZXZlbnQubm9kZS5rZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbkV4cGFuZGVkTm9kZSA9IGFuRXhwYW5kZWROb2RlO1xyXG4gIH1cclxuICBsb2codikge1xyXG4gICAgY29uc29sZS5sb2codiwgJzExMTExMTExMScpO1xyXG4gIH1cclxuXHJcbiAgLyoq5q2j5Zyo5pON5L2c55qE6IqC54K56aG5ICovXHJcbiAgc2VsZWN0VHJlZTogYW55O1xyXG4gIC8qKuaYr+WQpuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGlzQ3JlYXRlQ2hpbGQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuICAvKirmqKHmgIHmoYbnirbmgIEgKi9cclxuICBpc1Zpc2libGU6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuXHJcbiAgLyoq55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXHJcbiAgbW9kYWxCdXN5OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XHJcbiAgLyoq5Yib5bu66KGo5Y2VICovXHJcbiAgbm9kZUZvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAvKirooajmoLzlt7LpgInmi6nmlbDmja4gKi9cclxuICBfdGFibGVTZWxlY3RlZDogYW55O1xyXG5cclxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXHJcbiAgQFZpZXdDaGlsZCgnbm9kZU1vZGFsU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIG5vZGVNb2RhbFN1Ym1pdDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq55Sf5oiQR1VJRCAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKVxyXG4gIH1cclxuXHJcbiAgLyoq5Yib5bu66IqC54K5ICovXHJcbiAgYWRkTm9kZUJ0bigpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbnVsbDtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGtleTogW3RoaXMuZ2VuZXJhdGVHdWlkKCksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtmYWxzZV0sXHJcbiAgICAgIGNoaWxkcmVuOiBuZXcgRm9ybUFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKirnvJbovpHoioLngrkgKi9cclxuICBlZGl0SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbm9kZTtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFtub2RlLnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbbm9kZS5rZXksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtub2RlLm9yaWdpbj8uaXNDaGVja2VkID8/IGZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBub2RlO1xyXG4gICAgdGhpcy5ub2RlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0aXRsZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbdGhpcy5nZW5lcmF0ZUd1aWQoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGlzQ2hlY2tlZDogW2ZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKumHjee9ruaooeaAgeahhiAqL1xyXG4gIHJlc2V0TW9kYWwoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NyZWF0ZUNoaWxkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBudWxsO1xyXG4gIH1cclxuICAvKirliJvlu7rnvJbovpHkv53lrZggKi9cclxuICBjcmVhdGVPckVkaXRTYXZlKCkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5ub2RlRm9ybTtcclxuICAgIGNvbnN0IHsgc2VsZWN0VHJlZSwgaXNDcmVhdGVDaGlsZCwgbm9kZXMsIGFuRXhwYW5kZWROb2RlIH0gPSB0aGlzO1xyXG5cclxuICAgIGlmIChzZWxlY3RUcmVlKSB7XHJcbiAgICAgIGlmIChpc0NyZWF0ZUNoaWxkKSB7XHJcbiAgICAgICAgLy8g5Yib5bu65a2Q6IqC54K5XHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZE5vZGUobm9kZXMsIHNlbGVjdFRyZWUua2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgLy8g6Ieq5Yqo5bGV5byA54i26IqC54K5XHJcbiAgICAgICAgaWYgKCFhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhzZWxlY3RUcmVlLmtleSkpIHtcclxuICAgICAgICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBbLi4uYW5FeHBhbmRlZE5vZGUsIHNlbGVjdFRyZWUua2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g57yW6L6R6IqC54K5XHJcbiAgICAgICAgdGhpcy51cGRhdGVOb2RlKG5vZGVzLCBzZWxlY3RUcmVlLmtleSwgdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDliJvlu7rmoLnoioLngrlcclxuICAgICAgbm9kZXMucHVzaCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZXNldE1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICAvKirpgJLlvZLmt7vliqDlrZDoioLngrkgKi9cclxuICBwcml2YXRlIGFkZENoaWxkTm9kZShub2RlczogYW55W10sIHBhcmVudEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHBhcmVudEtleSkge1xyXG4gICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikgbm9kZS5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuYWRkQ2hpbGROb2RlKG5vZGUuY2hpbGRyZW4sIHBhcmVudEtleSwgbmV3Tm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S5pu05paw6IqC54K5ICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVOb2RlKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIHVwZGF0ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUudGl0bGUgPSB1cGRhdGVkRGF0YS50aXRsZTtcclxuICAgICAgICBub2RlLmtleSA9IHVwZGF0ZWREYXRhLmtleTtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IHVwZGF0ZWREYXRhLmlzQ2hlY2tlZDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMudXBkYXRlTm9kZShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIHVwZGF0ZWREYXRhKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirliKDpmaToioLngrkgKi9cclxuICBkZWxldGVNZW51SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlTm9kZSh0aGlzLm5vZGVzLCBub2RlLmtleSk7XHJcbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgdGhpcy5zeW5jVHJlZU9wdGlvbnNGcm9tTm9kZXMoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIoOmZpOiKgueCuSAqL1xyXG4gIHByaXZhdGUgZGVsZXRlTm9kZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChub2Rlc1tpXS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmRlbGV0ZU5vZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq5ZCM5q2lIG5vZGVzIOWIsCBUcmVlT3B0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCkge1xyXG4gICAgdGhpcy5UcmVlT3B0aW9ucy5jbGVhcigpO1xyXG4gICAgY29uc3QgY2xlYW5lZE5vZGVzID0gdGhpcy5ub2Rlcy5tYXAobm9kZSA9PiB0aGlzLmNsZWFuTm9kZShub2RlKSk7XHJcbiAgICBjbGVhbmVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgdGhpcy5UcmVlT3B0aW9ucy5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIm+W7uuagkeihqOWNlee7hCAqL1xyXG4gIHByaXZhdGUgY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChjaGlsZCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgVGV4dDogW25vZGUudGl0bGUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBWYWx1ZTogW25vZGUua2V5IHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgU2VsZWN0ZWQ6IFtub2RlLmlzQ2hlY2tlZCA/PyBmYWxzZV0sXHJcbiAgICAgIENoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF55CG6IqC54K55Lit55qEIG5nLXpvcnJvIOWGhemDqOWtl+autSAqL1xyXG4gIHByaXZhdGUgY2xlYW5Ob2RlKG5vZGU6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCB7IHRpdGxlLCBrZXksIGlzQ2hlY2tlZCwgY2hpbGRyZW4gfSA9IG5vZGU7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZSxcclxuICAgICAga2V5LFxyXG4gICAgICBpc0NoZWNrZWQsXHJcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbj8ubGVuZ3RoID8gY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMuY2xlYW5Ob2RlKGNoaWxkKSkgOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKirlsIYgVHJlZU9wdGlvbnMg5pWw5o2u57uT5p6E6L2s5o2i5Li6IG5vZGVzIOaVsOaNrue7k+aehCAqL1xyXG4gIHByaXZhdGUgY29udmVydFRyZWVPcHRpb25zVG9Ob2Rlcyh0cmVlT3B0aW9uczogYW55W10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRyZWVPcHRpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICB0aXRsZTogb3B0aW9uLlRleHQsXHJcbiAgICAgICAga2V5OiBvcHRpb24uVmFsdWUsXHJcbiAgICAgICAgaXNDaGVja2VkOiBvcHRpb24uU2VsZWN0ZWQgPz8gZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5DaGlsZHJlbj8ubGVuZ3RoID8gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKG9wdGlvbi5DaGlsZHJlbikgOiBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoq6K6+572uICovXHJcbiAgdG9nZ2xlTXVsdGlwbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24uY29udHJvbHNbJ1RyZWVWaWV3Lk11bHRpcGxlJ10gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICBpZighaXNNdWx0aXBsZS52YWx1ZSl7XHJcbiAgICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuWIh+aNouiKgueCuemAieS4reeKtuaAgSAqL1xyXG4gIHRvZ2dsZU5vZGVDaGVja2VkKGV2ZW50OiBhbnksIG5vZGU6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvbi5jb250cm9sc1snVHJlZVZpZXcuTXVsdGlwbGUnXSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSAhbm9kZS5vcmlnaW4/LmlzQ2hlY2tlZDtcclxuICAgIFxyXG4gICAgaWYgKCFpc011bHRpcGxlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKHRoaXMubm9kZXMpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KHRoaXMubm9kZXMsIG5vZGUua2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZCh0aGlzLm5vZGVzLCBub2RlLmtleSwgbmV3Q2hlY2tlZCk7XHJcbiAgICAgIGlmIChuZXdDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF6Zmk5omA5pyJ6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBjbGVhckFsbENoZWNrZWQobm9kZXM6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgbm9kZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoaWxkcmVuQ2hlY2tlZChub2RlLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S6K6+572u5omA5pyJ5a2Q6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGRyZW46IGFueVtdLCBjaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGQuY2hpbGRyZW4sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirpgInkuK3miYDmnInniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldFBhcmVudE5vZGVzQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2RlcywgcGFyZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBub2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirku4Xorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIHvvIzkuI3lvbHlk43lrZDoioLngrnlkozniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkT25seShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkT25seShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIGNoZWNrZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gICAgLyoq5ouW5ou9ICovXHJcbiAgZHJvcE92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZHJhZ05vZGUgPSBldmVudC5kcmFnTm9kZTtcclxuICAgIGNvbnN0IHRhcmdldE5vZGUgPSBldmVudC5ub2RlO1xyXG4gICAgY29uc3QgcG9zID0gZXZlbnQucG9zO1xyXG5cclxuICAgIC8vIOenu+mZpOiiq+aLluaLveeahOiKgueCuVxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLnJlbW92ZU5vZGVCeUtleSh0aGlzLm5vZGVzLCBkcmFnTm9kZS5rZXkpO1xyXG4gICAgaWYgKCFkcmFnZ2VkRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHBvczogMD3lhoXpg6gsIC0xPeS4iuaWuSwgMT3kuIvmlrlcclxuICAgIGlmIChwb3MgPT09IDApIHtcclxuICAgICAgLy8g5pS+5YWl55uu5qCH6IqC54K55YaF6YOo5L2c5Li65a2Q6IqC54K5XHJcbiAgICAgIHRoaXMuYWRkQ2hpbGROb2RlKHRoaXMubm9kZXMsIHRhcmdldE5vZGUua2V5LCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyh0YXJnZXROb2RlLmtleSkpIHtcclxuICAgICAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gWy4uLnRoaXMuYW5FeHBhbmRlZE5vZGUsIHRhcmdldE5vZGUua2V5XTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5pS+5Zyo55uu5qCH6IqC54K55YmN5ZCOXHJcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZUJlc2lkZSh0aGlzLm5vZGVzLCB0YXJnZXROb2RlLmtleSwgZHJhZ2dlZERhdGEsIHBvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKirnp7vpmaTlubbov5Tlm57oioLngrkgKi9cclxuICBwcml2YXRlIHJlbW92ZU5vZGVCeUtleShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueVtdID0gbnVsbCwgaW5kZXg6IG51bWJlciA9IC0xKTogYW55IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZW1vdmVOb2RlQnlLZXkobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbm9kZXNbaV0uY2hpbGRyZW4sIGkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKuWcqOebruagh+iKgueCueaXgei+ueaPkuWFpeiKgueCuSAqL1xyXG4gIHByaXZhdGUgaW5zZXJ0Tm9kZUJlc2lkZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBwb3NpdGlvbiA9PT0gLTEgPyBpIDogaSArIDE7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmluc2VydE5vZGVCZXNpZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbmV3Tm9kZSwgcG9zaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIGhhc0NoaWxkcmVuQ2hlY2tlZChub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm9yaWdpbj8uaXNDaGVja2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbk5vZGUgPSB0aGlzLmZpbmROb2RlQnlLZXkodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgaWYgKCFvcmlnaW5Ob2RlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FueUNoaWxkQ2hlY2tlZChvcmlnaW5Ob2RlLmNoaWxkcmVuKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuajgOafpeWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIHByaXZhdGUgaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkcmVuOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuagueaNriBrZXkg5p+l5om+6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZUJ5S2V5KG5vZGVzOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLWluZGV0ZXJtaW5hdGVdJyk7XHJcbiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2JveC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXRlcm1pbmF0ZScpID09PSAndHJ1ZSc7XHJcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZm9ybUNvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQWJwRHluYW1pY0Zvcm06Ok5vZGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhcmsgc29mdCBtcy0yIGZsb2F0LWVuZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiYWRkTm9kZUJ0bigpXCI+e3snQWJwRHluYW1pY0Zvcm06OkFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxhYnAtdHJlZSBbbm9kZXNdPVwibm9kZXNcIiBbY2hlY2thYmxlXT1cImZhbHNlXCIgKGRyb3BPdmVyKT1cImRyb3BPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG56RXhwYW5kQ2hhbmdlKT1cIm56RXhwYW5kQ2hhbmdlKCRldmVudClcIiBbZXhwYW5kZWRLZXlzXT1cImFuRXhwYW5kZWROb2RlXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZWRpdEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2suc3RvcCk9XCJjcmVhdGVDaGlsZEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wbHVzXCI+PC9pPnt7J0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlTWVudUl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVWk6OkRlbGV0ZScgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBhYnBUcmVlTm9kZVRlbXBsYXRlIGxldC1ub2RlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZU5vZGVDaGVja2VkKCRldmVudCwgbm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIm5vZGUub3JpZ2luPy5pc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRldGVybWluYXRlXT1cImhhc0NoaWxkcmVuQ2hlY2tlZChub2RlKVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bm9kZS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVFeHBhbmRlZEljb25UZW1wbGF0ZSBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlLmlzRXhwYW5kZWQgPyBtaW51c0ljb24gOiBwbHVzSWNvblwiPjwvbmctY29udGFpbmVyPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtaW51c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0tNi41IDEwaDEzdjFoLTEzdi0xelwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0uNSAxMGg2djFoLTZ2NmgtMXYtNmgtNnYtMWg2di02aDF2NnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9hYnAtdHJlZT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGVzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yXCI+e3snQWJwRHluYW1pY0Zvcm06OlBsZWFzZUFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJUcmVlT3B0aW9ucz8uZXJyb3JzPy5yZXF1aXJlZFwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBcIj5cclxuICAgICAgICAgICAgICAgIHt7J0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzUmVxdWlyZWQuJyB8IGFicExvY2FsaXphdGlvbjogJ05vZGVzJ319XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJ0b2dnbGVNdWx0aXBsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJUcmVlVmlldy5NdWx0aXBsZVwiIGlkPVwiTXVsdGlwbGVcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJNdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FicER5bmFtaWNGb3JtOjpNdWx0aXBsZScgfCBhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGFicEluaXQpPVwic3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcblxyXG48IS0tIFtvcHRpb25zXT1cInsgc2l6ZTogQ3VycmVudFNlbGVjdGlvblRhYmxlQ29udHJvbE5hbWU9PT0nTWF0cml4Jz8neGwnOicnICxzY3JvbGxhYmxlOmZhbHNlIH1cIiAodmlzaWJsZUNoYW5nZSk9XCJ0YWJsZVNlbGVjdFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiLS0+XHJcbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc1Zpc2libGVcIiBbYnVzeV09XCJtb2RhbEJ1c3lcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICAgIDxoMz57e2lzQ3JlYXRlQ2hpbGQgPyAoJ0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8IGFicExvY2FsaXphdGlvbikgOiAoc2VsZWN0VHJlZSA/ICgnQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9uKSA6ICgnQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKSl9fTwvaDM+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUZvcm07IGVsc2UgbG9hZGVyUmVmXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiICNteUZvcm09XCJuZ0Zvcm1cIiBbZm9ybUdyb3VwXT1cIm5vZGVGb3JtXCIgKHN1Ym1pdCk9XCJjcmVhdGVPckVkaXRTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNub2RlTW9kYWxTdWJtaXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwRHluYW1pY0Zvcm06Ok5vZGVJdGVtVGV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBbcGxhY2Vob2xkZXJdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiZGlzUGxheU5hbWVJbnB1dEJsdXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicER5bmFtaWNGb3JtOjpTZWxlY3RMaXN0SXRlbVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbcGxhY2Vob2xkZXJdPVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImlzQ2hlY2tlZFwiIGlkPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWJwRHluYW1pY0Zvcm06OlNlbGVjdGVkJyB8IGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhbm9kZUZvcm0udmFsaWRcIlxyXG4gICAgICAgICAgICAoYWJwQ2xpY2spPVwibm9kZU1vZGFsU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8XHJcbiAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+Il19
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixFQUFlLEVBQVMsZUFBK0I7UUFBdkQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQTZCbkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBOER4QyxZQUFZO1FBQ1oscUJBQXFCO1FBQ3JCLHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUVKLFlBQVk7UUFDWixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWxCLFlBQVk7UUFDWixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQWMzQixhQUFhO1FBQ2Isa0JBQWEsR0FBa0IsS0FBSyxDQUFDO1FBQ3JD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TUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUM3RSxRQUFRLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBOWhCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix1VkNYaEMsNDNOQTRHWTs7MkZEakdDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7OEdBU2YsSUFBSTtzQkFEZCxLQUFLO2dCQVFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBUUssTUFBTTtzQkFEaEIsS0FBSztnQkFXc0MsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWtHTyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuL3RyZWUtY29uZmlnJztcclxuaW1wb3J0IHtUb1BpbnlpblNlcnZpY2V9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGYtdHJlZS1jb25maWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLWNvbmZpZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29uZmlnLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb25maWdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixwcml2YXRlIHRvUGlueWluU2VydmljZTpUb1BpbnlpblNlcnZpY2UpIHt9XHJcbiAgLyoq6KGo5Y2V5o6n5Lu257G75Z6LICovXHJcbiAgX3R5cGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdHlwZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6YCJ5oup55qE6KGo5Y2V5L+h5oGvICovXHJcbiAgX3NlbGVjdGVkOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBFbnRpdHkodjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIGdldCBmb3JtQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnZm9ybUNvbmZpZ3VyYXRpb24nKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG4gIGdldCBUcmVlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWd1cmF0aW9uPy5jb250cm9sc1snVHJlZVZpZXcuTm9kZXMnXSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIGFzeW5jIGRhdGFMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtRW50aXR5ICYmIHRoaXMuX3R5cGUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5BZnRlckluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEFmdGVySW5pdCgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgdGhpcy5mb3JtRW50aXR5Py5zZXRDb250cm9sKCdmb3JtQ29uZmlndXJhdGlvbicsIHRoaXMuZmIuZ3JvdXAobmV3IFRyZWVDb25maWcoKSkpO1xyXG4gICAgICB0aGlzLlRyZWVPcHRpb25zPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV0pO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIOaJi+WKqOinpuWPkeWPmOabtOajgOa1i1xyXG4gICAgICB0aGlzLnN1Ym1pdGNsaWNrPy5uYXRpdmVFbGVtZW50Py5jbGljaygpO1xyXG4gICAgICBpZiAodGhpcy5fc2VsZWN0ZWQgJiYgdGhpcy5fc2VsZWN0ZWQuZm9ybUNvbnRyb2xOYW1lID09IHRoaXMuX3R5cGUpIHtcclxuICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLl9zZWxlY3RlZC5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTm9kZXMnXTtcclxuICAgICAgICBpZiAodHJlZU5vZGVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXModHJlZU5vZGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICAgICAgLy8gZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuX3NlbGVjdGVkLmZvcm1Db25maWd1cmF0aW9uWydUcmVlVmlldy5Ob2RlcyddKSB7XHJcbiAgICAgICAgLy8gICBmb3IgKGNvbnN0IGtleSBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50W2tleV07XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGNhcGl0YWxpemVkS2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xyXG4gICAgICAgIC8vICAgICBlbGVtZW50W2NhcGl0YWxpemVkS2V5XSA9IGl0ZW07XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICB0aGlzLmFkZFRyZWVPcHRpb25zKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAuLi50aGlzLl9zZWxlY3RlZC5mb3JtQ29uZmlndXJhdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB0aGlzLmFkZFRyZWVPcHRpb25zKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5b2T6YCJ5oup6aG555qE5paH5pys5Y+R55Sf5Y+Y5YyW5pe277yM5pu05paw5a+55bqU55qE5YC8XHJcbiAgICogQHBhcmFtIGV2ZW50IOi+k+WFpeS6i+S7tuWvueixoVxyXG4gICAqIEBwYXJhbSBpbmRleCDpgInmi6npobnnmoTntKLlvJXkvY3nva5cclxuICAgKiBAZGVzY3JpcHRpb24g5aaC5p6c6YCJ5oup6aG55bey5pyJVmFsdWXlgLzliJnkuI3lpITnkIbvvIzlkKbliJnlsIbkuK3mlofmlofmnKzovazmjaLkuLrmi7zpn7PkvZzkuLpWYWx1ZeWAvFxyXG4gICAqL1xyXG4gIC8vIHRleHRDaGFuZ2UoZXZlbnQsIGluZGV4KSB7XHJcbiAgLy8gICBjb25zdCBUcmVlT3B0aW9uc0l0ZW0gPSB0aGlzLlRyZWVPcHRpb25zLmF0KGluZGV4KTtcclxuICAvLyAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIC8vICAgaWYgKFRyZWVPcHRpb25zSXRlbS5nZXQoJ1ZhbHVlJyk/LnZhbHVlKSByZXR1cm47XHJcbiAgLy8gICBUcmVlT3B0aW9uc0l0ZW0ucGF0Y2hWYWx1ZSh7XHJcbiAgLy8gICAgIFZhbHVlOiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpLFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG4gICAvKirlrZfmrrXmoIfnrb5pbnB1dOWkseWOu+agh+eCueeUn+aIkOWtl+auteWQjeWtlyAqL1xyXG4gIGRpc1BsYXlOYW1lSW5wdXRCbHVyKGV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMubm9kZUZvcm0pIHJldHVybjtcclxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgY29uc3QgcGlueWluID0gdGhpcy50b1BpbnlpblNlcnZpY2UuZ2V0KHZhbHVlKTtcclxuICAgIGNvbnN0IG5hbWVJbnB1dCA9IHRoaXMubm9kZUZvcm0uZ2V0KCdrZXknKTtcclxuICAgIGlmICghbmFtZUlucHV0IHx8IG5hbWVJbnB1dC52YWx1ZSkgcmV0dXJuO1xyXG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcclxuICB9XHJcblxyXG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xyXG4gIC8vIGRyb3AoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuVHJlZU9wdGlvbnMuY29udHJvbHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgLy8gICB0aGlzLlRyZWVPcHRpb25zLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKnRyZWXmlbDmja4gKi9cclxuICBub2RlczogYW55W10gPSBbXTtcclxuXHJcbiAgLyoq5bey5bGV5byA55qE6IqC54K5ICovXHJcbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XHJcblxyXG4gIC8qKueCueWHu+WxleW8gOagkeiKgueCueWbvuagh+inpuWPkSAqL1xyXG4gIG56RXhwYW5kQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBhbkV4cGFuZGVkTm9kZSA9IHRoaXMuYW5FeHBhbmRlZE5vZGU7XHJcbiAgICBpZiAoYW5FeHBhbmRlZE5vZGUuaW5jbHVkZXMoZXZlbnQubm9kZS5rZXkpKSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlLnB1c2goZXZlbnQubm9kZS5rZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbkV4cGFuZGVkTm9kZSA9IGFuRXhwYW5kZWROb2RlO1xyXG4gIH1cclxuICAvKirmraPlnKjmk43kvZznmoToioLngrnpobkgKi9cclxuICBzZWxlY3RUcmVlOiBhbnk7XHJcbiAgLyoq5piv5ZCm5Yib5bu65a2Q6IqC54K5ICovXHJcbiAgaXNDcmVhdGVDaGlsZDogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xyXG4gIC8qKuaooeaAgeahhueKtuaAgSAqL1xyXG4gIGlzVmlzaWJsZTogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xyXG5cclxuICAvKirnlKjkuo7noa7lrprmqKHmgIHnmoTnuYHlv5nnirbmgIHmmK/lkKbkuLrnnJ8gKi9cclxuICBtb2RhbEJ1c3k6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuICAvKirliJvlu7rooajljZUgKi9cclxuICBub2RlRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXHJcbiAgQFZpZXdDaGlsZCgnbm9kZU1vZGFsU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIG5vZGVNb2RhbFN1Ym1pdDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq55Sf5oiQR1VJRCAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKVxyXG4gIH1cclxuXHJcbiAgLyoq5Yib5bu66IqC54K5ICovXHJcbiAgYWRkTm9kZUJ0bigpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbnVsbDtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGtleTogW3RoaXMuZ2VuZXJhdGVHdWlkKCksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtmYWxzZV0sXHJcbiAgICAgIGNoaWxkcmVuOiBuZXcgRm9ybUFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKirnvJbovpHoioLngrkgKi9cclxuICBlZGl0SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbm9kZTtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFtub2RlLnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbbm9kZS5rZXksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtub2RlLm9yaWdpbj8uaXNDaGVja2VkID8/IGZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBub2RlO1xyXG4gICAgdGhpcy5ub2RlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0aXRsZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbdGhpcy5nZW5lcmF0ZUd1aWQoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGlzQ2hlY2tlZDogW2ZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKumHjee9ruaooeaAgeahhiAqL1xyXG4gIHJlc2V0TW9kYWwoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NyZWF0ZUNoaWxkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBudWxsO1xyXG4gIH1cclxuICAvKirliJvlu7rnvJbovpHkv53lrZggKi9cclxuICBjcmVhdGVPckVkaXRTYXZlKCkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5ub2RlRm9ybTtcclxuICAgIGNvbnN0IHsgc2VsZWN0VHJlZSwgaXNDcmVhdGVDaGlsZCwgbm9kZXMsIGFuRXhwYW5kZWROb2RlIH0gPSB0aGlzO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24uY29udHJvbHNbJ1RyZWVWaWV3Lk11bHRpcGxlJ10gYXMgRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgaWYgKHNlbGVjdFRyZWUpIHtcclxuICAgICAgaWYgKGlzQ3JlYXRlQ2hpbGQpIHtcclxuICAgICAgICAvLyDliJvlu7rlrZDoioLngrlcclxuICAgICAgICB0aGlzLmFkZENoaWxkTm9kZShub2Rlcywgc2VsZWN0VHJlZS5rZXksIHZhbHVlKTtcclxuICAgICAgICAvLyDoh6rliqjlsZXlvIDniLboioLngrlcclxuICAgICAgICBpZiAoIWFuRXhwYW5kZWROb2RlLmluY2x1ZGVzKHNlbGVjdFRyZWUua2V5KSkge1xyXG4gICAgICAgICAgdGhpcy5hbkV4cGFuZGVkTm9kZSA9IFsuLi5hbkV4cGFuZGVkTm9kZSwgc2VsZWN0VHJlZS5rZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDnvJbovpHoioLngrlcclxuICAgICAgICB0aGlzLnVwZGF0ZU5vZGUobm9kZXMsIHNlbGVjdFRyZWUua2V5LCB2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOWIm+W7uuagueiKgueCuVxyXG4gICAgICBub2Rlcy5wdXNoKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDljZXpgInmqKHlvI/kuIvvvIzlpoLmnpzlvZPliY3oioLngrnooqvpgInkuK3vvIzmuIXpmaTlhbbku5boioLngrnnmoTpgInkuK3nirbmgIFcclxuICAgIGlmICghaXNNdWx0aXBsZS52YWx1ZSAmJiB2YWx1ZS5pc0NoZWNrZWQpIHtcclxuICAgICAgdGhpcy5jbGVhckFsbENoZWNrZWQobm9kZXMpO1xyXG4gICAgICB0aGlzLnNldE5vZGVDaGVja2VkT25seShub2RlcywgdmFsdWUua2V5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm5vZGVzID0gWy4uLm5vZGVzXTtcclxuICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnJlc2V0TW9kYWwoKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kua3u+WKoOWtkOiKgueCuSAqL1xyXG4gIHByaXZhdGUgYWRkQ2hpbGROb2RlKG5vZGVzOiBhbnlbXSwgcGFyZW50S2V5OiBzdHJpbmcsIG5ld05vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0gcGFyZW50S2V5KSB7XHJcbiAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKSBub2RlLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5hZGRDaGlsZE5vZGUobm9kZS5jaGlsZHJlbiwgcGFyZW50S2V5LCBuZXdOb2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirpgJLlvZLmm7TmlrDoioLngrkgKi9cclxuICBwcml2YXRlIHVwZGF0ZU5vZGUobm9kZXM6IGFueVtdLCB0YXJnZXRLZXk6IHN0cmluZywgdXBkYXRlZERhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgbm9kZS50aXRsZSA9IHVwZGF0ZWREYXRhLnRpdGxlO1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gdXBkYXRlZERhdGEuaXNDaGVja2VkO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy51cGRhdGVOb2RlKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgdXBkYXRlZERhdGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuWIoOmZpOiKgueCuSAqL1xyXG4gIGRlbGV0ZU1lbnVJdGVtQnRuKG5vZGU6IGFueSkge1xyXG4gICAgdGhpcy5kZWxldGVOb2RlKHRoaXMubm9kZXMsIG5vZGUua2V5KTtcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S5Yig6Zmk6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBkZWxldGVOb2RlKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2Rlc1tpXS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuZGVsZXRlTm9kZShub2Rlc1tpXS5jaGlsZHJlbiwgdGFyZ2V0S2V5KSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirlkIzmraUgbm9kZXMg5YiwIFRyZWVPcHRpb25zICovXHJcbiAgcHJpdmF0ZSBzeW5jVHJlZU9wdGlvbnNGcm9tTm9kZXMoKSB7XHJcbiAgICB0aGlzLlRyZWVPcHRpb25zLmNsZWFyKCk7XHJcbiAgICBjb25zdCBjbGVhbmVkTm9kZXMgPSB0aGlzLm5vZGVzLm1hcChub2RlID0+IHRoaXMuY2xlYW5Ob2RlKG5vZGUpKTtcclxuICAgIGNsZWFuZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICB0aGlzLlRyZWVPcHRpb25zLnB1c2godGhpcy5jcmVhdGVUcmVlRm9ybUdyb3VwKG5vZGUpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S5Yib5bu65qCR6KGo5Y2V57uEICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVUcmVlRm9ybUdyb3VwKG5vZGU6IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgIGNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVUcmVlRm9ybUdyb3VwKGNoaWxkKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBUZXh0OiBbbm9kZS50aXRsZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIFZhbHVlOiBbbm9kZS5rZXkgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBTZWxlY3RlZDogW25vZGUuaXNDaGVja2VkID8/IGZhbHNlXSxcclxuICAgICAgQ2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKirmuIXnkIboioLngrnkuK3nmoQgbmctem9ycm8g5YaF6YOo5a2X5q61ICovXHJcbiAgcHJpdmF0ZSBjbGVhbk5vZGUobm9kZTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHsgdGl0bGUsIGtleSwgaXNDaGVja2VkLCBjaGlsZHJlbiB9ID0gbm9kZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICBrZXksXHJcbiAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuPy5sZW5ndGggPyBjaGlsZHJlbi5tYXAoY2hpbGQgPT4gdGhpcy5jbGVhbk5vZGUoY2hpbGQpKSA6IFtdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKuWwhiBUcmVlT3B0aW9ucyDmlbDmja7nu5PmnoTovazmjaLkuLogbm9kZXMg5pWw5o2u57uT5p6EICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVPcHRpb25zOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHJlZU9wdGlvbnMpIHtcclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBvcHRpb24uVGV4dCxcclxuICAgICAgICBrZXk6IG9wdGlvbi5WYWx1ZSxcclxuICAgICAgICBpc0NoZWNrZWQ6IG9wdGlvbi5TZWxlY3RlZCA/PyBmYWxzZSxcclxuICAgICAgICBjaGlsZHJlbjogb3B0aW9uLkNoaWxkcmVuPy5sZW5ndGggPyB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXMob3B0aW9uLkNoaWxkcmVuKSA6IFtdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKirorr7nva4gKi9cclxuICB0b2dnbGVNdWx0aXBsZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIHJldHVyblxyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24uY29udHJvbHNbJ1RyZWVWaWV3Lk11bHRpcGxlJ10gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICBpZighaXNNdWx0aXBsZS52YWx1ZSl7XHJcbiAgICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICB0aGlzLmFwcGx5TXVsdGlwbGVMb2dpYyh0aGlzLm5vZGVzKTtcclxuICAgIH1cclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5bqU55So5aSa6YCJ6YC76L6R77ya6YCJ5Lit55qE6IqC54K55ZCM5pe26YCJ5Lit5YW25omA5pyJ5a2Q6IqC54K55ZKM54i26IqC54K5ICovXHJcbiAgcHJpdmF0ZSBhcHBseU11bHRpcGxlTG9naWMobm9kZXM6IGFueVtdKSB7XHJcbiAgICBjb25zdCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sbGVjdENoZWNrZWRLZXlzKG5vZGVzLCBjaGVja2VkS2V5cyk7XHJcbiAgICBjaGVja2VkS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWQobm9kZXMsIGtleSwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2V0UGFyZW50Tm9kZXNDaGVja2VkKG5vZGVzLCBrZXkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKirmlLbpm4bmiYDmnInpgInkuK3oioLngrnnmoRrZXkgKi9cclxuICBwcml2YXRlIGNvbGxlY3RDaGVja2VkS2V5cyhub2RlczogYW55W10sIHJlc3VsdDogc3RyaW5nW10pIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5pc0NoZWNrZWQpIHtcclxuICAgICAgICByZXN1bHQucHVzaChub2RlLmtleSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdENoZWNrZWRLZXlzKG5vZGUuY2hpbGRyZW4sIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuWIh+aNouiKgueCuemAieS4reeKtuaAgSAqL1xyXG4gIHRvZ2dsZU5vZGVDaGVja2VkKGV2ZW50OiBhbnksIG5vZGU6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvbi5jb250cm9sc1snVHJlZVZpZXcuTXVsdGlwbGUnXSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSAhbm9kZS5vcmlnaW4/LmlzQ2hlY2tlZDtcclxuICAgIFxyXG4gICAgaWYgKCFpc011bHRpcGxlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKHRoaXMubm9kZXMpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KHRoaXMubm9kZXMsIG5vZGUua2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZCh0aGlzLm5vZGVzLCBub2RlLmtleSwgbmV3Q2hlY2tlZCk7XHJcbiAgICAgIGlmIChuZXdDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF6Zmk5omA5pyJ6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBjbGVhckFsbENoZWNrZWQobm9kZXM6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgbm9kZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoaWxkcmVuQ2hlY2tlZChub2RlLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S6K6+572u5omA5pyJ5a2Q6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGRyZW46IGFueVtdLCBjaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGQuY2hpbGRyZW4sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirpgInkuK3miYDmnInniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldFBhcmVudE5vZGVzQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2RlcywgcGFyZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBub2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirku4Xorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIHvvIzkuI3lvbHlk43lrZDoioLngrnlkozniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkT25seShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkT25seShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIGNoZWNrZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gICAgLyoq5ouW5ou9ICovXHJcbiAgZHJvcE92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZHJhZ05vZGUgPSBldmVudC5kcmFnTm9kZTtcclxuICAgIGNvbnN0IHRhcmdldE5vZGUgPSBldmVudC5ub2RlO1xyXG4gICAgY29uc3QgcG9zID0gZXZlbnQucG9zO1xyXG5cclxuICAgIC8vIOenu+mZpOiiq+aLluaLveeahOiKgueCuVxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLnJlbW92ZU5vZGVCeUtleSh0aGlzLm5vZGVzLCBkcmFnTm9kZS5rZXkpO1xyXG4gICAgaWYgKCFkcmFnZ2VkRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHBvczogMD3lhoXpg6gsIC0xPeS4iuaWuSwgMT3kuIvmlrlcclxuICAgIGlmIChwb3MgPT09IDApIHtcclxuICAgICAgLy8g5pS+5YWl55uu5qCH6IqC54K55YaF6YOo5L2c5Li65a2Q6IqC54K5XHJcbiAgICAgIHRoaXMuYWRkQ2hpbGROb2RlKHRoaXMubm9kZXMsIHRhcmdldE5vZGUua2V5LCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyh0YXJnZXROb2RlLmtleSkpIHtcclxuICAgICAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gWy4uLnRoaXMuYW5FeHBhbmRlZE5vZGUsIHRhcmdldE5vZGUua2V5XTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5pS+5Zyo55uu5qCH6IqC54K55YmN5ZCOXHJcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZUJlc2lkZSh0aGlzLm5vZGVzLCB0YXJnZXROb2RlLmtleSwgZHJhZ2dlZERhdGEsIHBvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKirnp7vpmaTlubbov5Tlm57oioLngrkgKi9cclxuICBwcml2YXRlIHJlbW92ZU5vZGVCeUtleShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueVtdID0gbnVsbCwgaW5kZXg6IG51bWJlciA9IC0xKTogYW55IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZW1vdmVOb2RlQnlLZXkobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbm9kZXNbaV0uY2hpbGRyZW4sIGkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKuWcqOebruagh+iKgueCueaXgei+ueaPkuWFpeiKgueCuSAqL1xyXG4gIHByaXZhdGUgaW5zZXJ0Tm9kZUJlc2lkZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBwb3NpdGlvbiA9PT0gLTEgPyBpIDogaSArIDE7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmluc2VydE5vZGVCZXNpZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbmV3Tm9kZSwgcG9zaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIGhhc0NoaWxkcmVuQ2hlY2tlZChub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm9yaWdpbj8uaXNDaGVja2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbk5vZGUgPSB0aGlzLmZpbmROb2RlQnlLZXkodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgaWYgKCFvcmlnaW5Ob2RlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FueUNoaWxkQ2hlY2tlZChvcmlnaW5Ob2RlLmNoaWxkcmVuKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuajgOafpeWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIHByaXZhdGUgaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkcmVuOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuagueaNriBrZXkg5p+l5om+6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZUJ5S2V5KG5vZGVzOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLWluZGV0ZXJtaW5hdGVdJyk7XHJcbiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2JveC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXRlcm1pbmF0ZScpID09PSAndHJ1ZSc7XHJcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZm9ybUNvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQWJwRHluYW1pY0Zvcm06Ok5vZGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhcmsgc29mdCBtcy0yIGZsb2F0LWVuZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiYWRkTm9kZUJ0bigpXCI+e3snQWJwRHluYW1pY0Zvcm06OkFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxhYnAtdHJlZSBbbm9kZXNdPVwibm9kZXNcIiBbY2hlY2thYmxlXT1cImZhbHNlXCIgKGRyb3BPdmVyKT1cImRyb3BPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG56RXhwYW5kQ2hhbmdlKT1cIm56RXhwYW5kQ2hhbmdlKCRldmVudClcIiBbZXhwYW5kZWRLZXlzXT1cImFuRXhwYW5kZWROb2RlXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZWRpdEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2suc3RvcCk9XCJjcmVhdGVDaGlsZEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wbHVzXCI+PC9pPnt7J0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlTWVudUl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVWk6OkRlbGV0ZScgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBhYnBUcmVlTm9kZVRlbXBsYXRlIGxldC1ub2RlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZU5vZGVDaGVja2VkKCRldmVudCwgbm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIm5vZGUub3JpZ2luPy5pc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRldGVybWluYXRlXT1cImhhc0NoaWxkcmVuQ2hlY2tlZChub2RlKVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bm9kZS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVFeHBhbmRlZEljb25UZW1wbGF0ZSBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlLmlzRXhwYW5kZWQgPyBtaW51c0ljb24gOiBwbHVzSWNvblwiPjwvbmctY29udGFpbmVyPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtaW51c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0tNi41IDEwaDEzdjFoLTEzdi0xelwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0uNSAxMGg2djFoLTZ2NmgtMXYtNmgtNnYtMWg2di02aDF2NnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9hYnAtdHJlZT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGVzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yXCI+e3snQWJwRHluYW1pY0Zvcm06OlBsZWFzZUFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJUcmVlT3B0aW9ucz8uZXJyb3JzPy5yZXF1aXJlZFwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBcIj5cclxuICAgICAgICAgICAgICAgIHt7J0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzUmVxdWlyZWQuJyB8IGFicExvY2FsaXphdGlvbjogJ05vZGVzJ319XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJ0b2dnbGVNdWx0aXBsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJUcmVlVmlldy5NdWx0aXBsZVwiIGlkPVwiTXVsdGlwbGVcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJNdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FicER5bmFtaWNGb3JtOjpNdWx0aXBsZScgfCBhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGFicEluaXQpPVwic3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcblxyXG48IS0tIFtvcHRpb25zXT1cInsgc2l6ZTogQ3VycmVudFNlbGVjdGlvblRhYmxlQ29udHJvbE5hbWU9PT0nTWF0cml4Jz8neGwnOicnICxzY3JvbGxhYmxlOmZhbHNlIH1cIiAodmlzaWJsZUNoYW5nZSk9XCJ0YWJsZVNlbGVjdFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiLS0+XHJcbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc1Zpc2libGVcIiBbYnVzeV09XCJtb2RhbEJ1c3lcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICAgIDxoMz57e2lzQ3JlYXRlQ2hpbGQgPyAoJ0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8IGFicExvY2FsaXphdGlvbikgOiAoc2VsZWN0VHJlZSA/ICgnQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9uKSA6ICgnQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKSl9fTwvaDM+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUZvcm07IGVsc2UgbG9hZGVyUmVmXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiICNteUZvcm09XCJuZ0Zvcm1cIiBbZm9ybUdyb3VwXT1cIm5vZGVGb3JtXCIgKHN1Ym1pdCk9XCJjcmVhdGVPckVkaXRTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNub2RlTW9kYWxTdWJtaXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwRHluYW1pY0Zvcm06Ok5vZGVJdGVtVGV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBbcGxhY2Vob2xkZXJdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiZGlzUGxheU5hbWVJbnB1dEJsdXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicER5bmFtaWNGb3JtOjpTZWxlY3RMaXN0SXRlbVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbcGxhY2Vob2xkZXJdPVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImlzQ2hlY2tlZFwiIGlkPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWJwRHluYW1pY0Zvcm06OlNlbGVjdGVkJyB8IGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhbm9kZUZvcm0udmFsaWRcIlxyXG4gICAgICAgICAgICAoYWJwQ2xpY2spPVwibm9kZU1vZGFsU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8XHJcbiAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+Il19
@@ -82,9 +82,9 @@ export class TreeControlComponent {
82
82
  return result;
83
83
  }
84
84
  ngOnDestroy() {
85
- //Called once, before the instance is destroyed.
86
- //Add 'implements OnDestroy' to the class.
87
- this.extraProperties.removeControl(this._fields.field.name);
85
+ if (this.extraProperties && this._fields?.field?.name) {
86
+ this.extraProperties.removeControl(this._fields.field.name);
87
+ }
88
88
  }
89
89
  /**点击展开树节点图标触发 */
90
90
  nzExpandChange(event) {
@@ -269,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
269
269
  type: ViewChild,
270
270
  args: ['submitclick', { static: true }]
271
271
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2R5bmFtaWMtZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmVlL3RyZWUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9keW5hbWljLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJlZS90cmVlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPcEUsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUVuQyxZQUFZO1FBQ1osWUFBTyxHQUFRLEVBQUUsQ0FBQztRQVlsQix3QkFBd0I7UUFDeEIsY0FBUyxHQUFNLEVBQUUsQ0FBQztRQWtCVixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFVeEMsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBOEMxQixZQUFZO1FBQ2QsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVsQixZQUFZO1FBQ1osbUJBQWMsR0FBVSxFQUFFLENBQUM7SUE5RlcsQ0FBQztJQUl2QyxJQUNXLE1BQU0sQ0FBQyxDQUFNO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUNXLGVBQWUsQ0FBQyxDQUFNO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENB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b0JBQW9CO2tHQUFwQixvQkFBb0IsMlJDVGpDLHFzR0FrRE87OzJGRHpDTSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCO2dGQVVoQixNQUFNO3NCQURoQixLQUFLO2dCQVFLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBT0ssUUFBUTtzQkFEbEIsS0FBSztnQkFRSyxNQUFNO3NCQURoQixLQUFLO2dCQUtzQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RmLXRyZWUtY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtY29udHJvbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29udHJvbC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb250cm9sQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHt9XHJcblxyXG4gIC8qKuWtl+autemFjee9ruWIl+ihqCAqL1xyXG4gIF9maWVsZHM6IGFueSA9ICcnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmaWVsZHModjogYW55KSB7XHJcbiAgICB0aGlzLl9maWVsZHMgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq54i257qn5a2X5q615ZCN56ew77yM55So5LqO5Li66KGo5Y2V6K6+572u5o6n5Lu26LWL5YC8ICovXHJcbiAgX3BhcmVudEZpbGVkTmFtZTogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBwYXJlbnRGaWxlZE5hbWUodjogYW55KSB7XHJcbiAgICB0aGlzLl9wYXJlbnRGaWxlZE5hbWUgPSB2O1xyXG4gIH1cclxuICAvKirniLbnuqflrZfmrrXlkI3np7DvvIznlKjkuo7kuLrooajljZXorr7nva7mjqfku7botYvlgLwgKi9cclxuICBfc2VsZWN0ZWQ6IGFueT1bXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQodjogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHZ8fFtdO1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgX2VudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBlbnRpdHkodjogYW55KSB7XHJcbiAgICB0aGlzLl9lbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdldCBleHRyYVByb3BlcnRpZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5Py5nZXQoJ2V4dHJhUHJvcGVydGllcycpIGFzIEZvcm1Hcm91cDtcclxuICB9XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIC8qKuaVsOaNruWKoOi9veWujOaIkCAqL1xyXG4gIGFzeW5jIGRhdGFMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5fZmllbGRzICYmIHRoaXMuX2VudGl0eSkge1xyXG4gICAgICBhd2FpdCB0aGlzLkFmdGVySW5pdCgpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIOaJi+WKqOinpuWPkeWPmOabtOajgOa1i1xyXG4gICAgICB0aGlzLnN1Ym1pdGNsaWNrPy5uYXRpdmVFbGVtZW50Py5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybUNvbmZpZ3VyYXRpb246IGFueSA9ICcnO1xyXG4gIEFmdGVySW5pdCgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xyXG4gICAgICBjb25zdCBWYWxpZGF0b3JzQXJyYXk6IGFueVtdID0gW107XHJcbiAgICAgIGlmICh0aGlzLl9maWVsZHMucmVxdWlyZWQpIHtcclxuICAgICAgICBWYWxpZGF0b3JzQXJyYXkucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uID0gdGhpcy5fZmllbGRzLmZpZWxkLmZvcm1Db25maWd1cmF0aW9uO1xyXG4gICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLmZvcm1Db25maWd1cmF0aW9uWydUcmVlVmlldy5Ob2RlcyddO1xyXG4gICAgICBpZiAodHJlZU5vZGVzPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVOb2Rlcyk7XHJcbiAgICAgIH1cclxuICAgICBcclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6aKE6K6+5YC877yM5LuO6IqC54K55Lit6I635Y+W6buY6K6k6YCJ5Lit55qE5YC8XHJcbiAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWQgfHwgdGhpcy5fc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkS2V5cyh0aGlzLm5vZGVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDmnInpooTorr7lgLzml7bvvIzlkIzmraXmm7TmlrAgbm9kZXMg55qE6YCJ5Lit54q25oCBXHJcbiAgICAgICAgdGhpcy5zeW5jTm9kZXNGcm9tU2VsZWN0ZWRLZXlzKHRoaXMuX3NlbGVjdGVkKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuZmIuY29udHJvbCh0aGlzLl9zZWxlY3RlZCwgVmFsaWRhdG9yc0FycmF5KTtcclxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXMuc2V0Q29udHJvbCh0aGlzLl9maWVsZHMuZmllbGQubmFtZSwgbmV3Q29udHJvbCk7XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKuWwhiBUcmVlT3B0aW9ucyDmlbDmja7nu5PmnoTovazmjaLkuLogbm9kZXMg5pWw5o2u57uT5p6EICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVPcHRpb25zOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHJlZU9wdGlvbnMpIHtcclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBvcHRpb24uVGV4dCxcclxuICAgICAgICBrZXk6IG9wdGlvbi5WYWx1ZSxcclxuICAgICAgICBpc0NoZWNrZWQ6IG9wdGlvbi5TZWxlY3RlZCA/PyBmYWxzZSxcclxuICAgICAgICBjaGlsZHJlbjogb3B0aW9uLkNoaWxkcmVuPy5sZW5ndGggPyB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXMob3B0aW9uLkNoaWxkcmVuKSA6IFtdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgb25jZSwgYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXHJcbiAgICAvL0FkZCAnaW1wbGVtZW50cyBPbkRlc3Ryb3knIHRvIHRoZSBjbGFzcy5cclxuICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzLnJlbW92ZUNvbnRyb2wodGhpcy5fZmllbGRzLmZpZWxkLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgICAvKip0cmVl5pWw5o2uICovXHJcbiAgbm9kZXM6IGFueVtdID0gW107XHJcblxyXG4gIC8qKuW3suWxleW8gOeahOiKgueCuSAqL1xyXG4gIGFuRXhwYW5kZWROb2RlOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvKirngrnlh7vlsZXlvIDmoJHoioLngrnlm77moIfop6blj5EgKi9cclxuICBuekV4cGFuZENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgYW5FeHBhbmRlZE5vZGUgPSB0aGlzLmFuRXhwYW5kZWROb2RlO1xyXG4gICAgaWYgKGFuRXhwYW5kZWROb2RlLmluY2x1ZGVzKGV2ZW50Lm5vZGUua2V5KSkge1xyXG4gICAgICBhbkV4cGFuZGVkTm9kZSA9IGFuRXhwYW5kZWROb2RlLmZpbHRlcihrZXkgPT4ga2V5ICE9PSBldmVudC5ub2RlLmtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhbkV4cGFuZGVkTm9kZS5wdXNoKGV2ZW50Lm5vZGUua2V5KTtcclxuICAgIH1cclxuICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZTtcclxuICB9XHJcblxyXG4gIC8qKuWIh+aNouiKgueCuemAieS4reeKtuaAgSAqL1xyXG4gIHRvZ2dsZU5vZGVDaGVja2VkKGV2ZW50OiBhbnksIG5vZGU6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTXVsdGlwbGUnXTtcclxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSAhbm9kZS5vcmlnaW4/LmlzQ2hlY2tlZDtcclxuICAgIFxyXG4gICAgaWYgKCFpc011bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKHRoaXMubm9kZXMpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KHRoaXMubm9kZXMsIG5vZGUua2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZCh0aGlzLm5vZGVzLCBub2RlLmtleSwgbmV3Q2hlY2tlZCk7XHJcbiAgICAgIGlmIChuZXdDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF6Zmk5omA5pyJ6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBjbGVhckFsbENoZWNrZWQobm9kZXM6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgbm9kZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoaWxkcmVuQ2hlY2tlZChub2RlLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S6K6+572u5omA5pyJ5a2Q6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGRyZW46IGFueVtdLCBjaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGQuY2hpbGRyZW4sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirpgInkuK3miYDmnInniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldFBhcmVudE5vZGVzQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2RlcywgcGFyZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBub2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirmm7TmlrDooajljZXlgLwgKi9cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1WYWx1ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWRLZXlzKHRoaXMubm9kZXMpO1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZXh0cmFQcm9wZXJ0aWVzLmdldCh0aGlzLl9maWVsZHMuZmllbGQubmFtZSk7XHJcbiAgICBjb250cm9sPy5zZXRWYWx1ZShzZWxlY3RlZEtleXMpO1xyXG4gIH1cclxuXHJcbiAgLyoq6I635Y+W5omA5pyJ6YCJ5Lit6IqC54K555qEIGtleSAqL1xyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRLZXlzKG5vZGVzOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGtleXMgPSBbXTtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5pc0NoZWNrZWQpIHtcclxuICAgICAgICBrZXlzLnB1c2gobm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICBrZXlzLnB1c2goLi4udGhpcy5nZXRTZWxlY3RlZEtleXMobm9kZS5jaGlsZHJlbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIC8qKuWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIGhhc0NoaWxkcmVuQ2hlY2tlZChub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm9yaWdpbj8uaXNDaGVja2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbk5vZGUgPSB0aGlzLmZpbmROb2RlQnlLZXkodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgaWYgKCFvcmlnaW5Ob2RlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FueUNoaWxkQ2hlY2tlZChvcmlnaW5Ob2RlLmNoaWxkcmVuKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuajgOafpeWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIHByaXZhdGUgaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkcmVuOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuagueaNriBrZXkg5p+l5om+6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZUJ5S2V5KG5vZGVzOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoq5qC55o2u6aKE6K6+55qEIGtleXMg5ZCM5q2l5pu05pawIG5vZGVzIOeahOmAieS4reeKtuaAgSAqL1xyXG4gIHByaXZhdGUgc3luY05vZGVzRnJvbVNlbGVjdGVkS2V5cyhzZWxlY3RlZEtleXM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlbGVjdGVkS2V5cykge1xyXG4gICAgICB0aGlzLnNldE5vZGVDaGVja2VkT25seSh0aGlzLm5vZGVzLCBrZXksIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoq5LuF6K6+572u5oyH5a6a6IqC54K555qE6YCJ5Lit54q25oCB77yM5LiN5b2x5ZON5a2Q6IqC54K55ZKM54i26IqC54K5ICovXHJcbiAgcHJpdmF0ZSBzZXROb2RlQ2hlY2tlZE9ubHkobm9kZXM6IGFueVtdLCB0YXJnZXRLZXk6IHN0cmluZywgY2hlY2tlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgbm9kZS5pc0NoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXROb2RlQ2hlY2tlZE9ubHkobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBjaGVja2VkKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICBjb25zdCBjaGVja2JveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2RhdGEtaW5kZXRlcm1pbmF0ZV0nKTtcclxuICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXRlcm1pbmF0ZSA9IGNoZWNrYm94LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRldGVybWluYXRlJykgPT09ICd0cnVlJztcclxuICAgICAgY2hlY2tib3guaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJfZW50aXR5XCI+XHJcbiAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJleHRyYVByb3BlcnRpZXNcIiBjbGFzcz1cInNlbGVjdGNvbnRyb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgKm5nSWY9XCJfZmllbGRzLmRpc3BsYXlOYW1lXCI+e3sgX2ZpZWxkcy5kaXNwbGF5TmFtZSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICA8YWJwLXRyZWUgW25vZGVzXT1cIm5vZGVzXCIgKG56RXhwYW5kQ2hhbmdlKT1cIm56RXhwYW5kQ2hhbmdlKCRldmVudClcIiBbZXhwYW5kZWRLZXlzXT1cImFuRXhwYW5kZWROb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSAjbWVudSBsZXQtbm9kZT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2suc3RvcCk9XCJlZGl0SXRlbUJ0bihub2RlKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXBlbmNpbFwiPjwvaT57eydBYnBVOjpFZGl0JyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiY3JlYXRlQ2hpbGRJdGVtQnRuKG5vZGUpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIG1lLTEgZmEgZmEtcGx1c1wiPjwvaT57eydBYnBEeW5hbWljRm9ybTo6QWRkU3ViTWVudUl0ZW0nIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2suc3RvcCk9XCJkZWxldGVNZW51SXRlbUJ0bihub2RlKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXJlbW92ZVwiPjwvaT57eydBYnBVOjpEZWxldGUnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVOb2RlVGVtcGxhdGUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlTm9kZUNoZWNrZWQoJGV2ZW50LCBub2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2NoZWNrYm94IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIm5vZGUub3JpZ2luPy5pc0NoZWNrZWRcIiBbYXR0ci5kYXRhLWluZGV0ZXJtaW5hdGVdPVwiaGFzQ2hpbGRyZW5DaGVja2VkKG5vZGUpXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tub2RlLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgYWJwVHJlZUV4cGFuZGVkSWNvblRlbXBsYXRlIGxldC1ub2RlIGxldC1vcmlnaW49XCJvcmlnaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGUuaXNFeHBhbmRlZCA/IG1pbnVzSWNvbiA6IHBsdXNJY29uXCI+PC9uZy1jb250YWluZXI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21pbnVzSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS02LjUgMTBoMTN2MWgtMTN2LTF6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbHVzSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS41IDEwaDZ2MWgtNnY2aC0xdi02aC02di0xaDZ2LTZoMXY2elwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2FicC10cmVlPlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxyXG48L2Zvcm0+Il19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2R5bmFtaWMtZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmVlL3RyZWUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9keW5hbWljLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJlZS90cmVlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPcEUsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUVuQyxZQUFZO1FBQ1osWUFBTyxHQUFRLEVBQUUsQ0FBQztRQVlsQix3QkFBd0I7UUFDeEIsY0FBUyxHQUFNLEVBQUUsQ0FBQztRQWtCVixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFVeEMsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBOEMxQixZQUFZO1FBQ2QsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVsQixZQUFZO1FBQ1osbUJBQWMsR0FBVSxFQUFFLENBQUM7SUE5RlcsQ0FBQztJQUl2QyxJQUNXLE1BQU0sQ0FBQyxDQUFNO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUNXLGVBQWUsQ0FBQyxDQUFNO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENB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QyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FqUlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsMlJDVGpDLHFzR0FrRE87OzJGRHpDTSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCO2dGQVVoQixNQUFNO3NCQURoQixLQUFLO2dCQVFLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBT0ssUUFBUTtzQkFEbEIsS0FBSztnQkFRSyxNQUFNO3NCQURoQixLQUFLO2dCQUtzQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RmLXRyZWUtY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtY29udHJvbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29udHJvbC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge31cclxuXHJcbiAgLyoq5a2X5q616YWN572u5YiX6KGoICovXHJcbiAgX2ZpZWxkczogYW55ID0gJyc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZpZWxkcyh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2ZpZWxkcyA9IHY7XHJcbiAgfVxyXG5cclxuICAvKirniLbnuqflrZfmrrXlkI3np7DvvIznlKjkuo7kuLrooajljZXorr7nva7mjqfku7botYvlgLwgKi9cclxuICBfcGFyZW50RmlsZWROYW1lOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHBhcmVudEZpbGVkTmFtZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3BhcmVudEZpbGVkTmFtZSA9IHY7XHJcbiAgfVxyXG4gIC8qKueItue6p+Wtl+auteWQjeensO+8jOeUqOS6juS4uuihqOWNleiuvue9ruaOp+S7tui1i+WAvCAqL1xyXG4gIF9zZWxlY3RlZDogYW55PVtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZCh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkID0gdnx8W107XHJcbiAgfVxyXG5cclxuICAvKirooajljZXlrp7kvZMgKi9cclxuICBfZW50aXR5OiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGVudGl0eSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2VudGl0eSA9IHY7XHJcbiAgICB0aGlzLmRhdGFMb2FkZWQoKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcclxuXHJcbiAgZ2V0IGV4dHJhUHJvcGVydGllcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbnRpdHk/LmdldCgnZXh0cmFQcm9wZXJ0aWVzJykgYXMgRm9ybUdyb3VwO1xyXG4gIH1cclxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgLyoq5pWw5o2u5Yqg6L295a6M5oiQICovXHJcbiAgYXN5bmMgZGF0YUxvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLl9maWVsZHMgJiYgdGhpcy5fZW50aXR5KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuQWZ0ZXJJbml0KCk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8g5omL5Yqo6Kem5Y+R5Y+Y5pu05qOA5rWLXHJcbiAgICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtQ29uZmlndXJhdGlvbjogYW55ID0gJyc7XHJcbiAgQWZ0ZXJJbml0KCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XHJcbiAgICAgIGNvbnN0IFZhbGlkYXRvcnNBcnJheTogYW55W10gPSBbXTtcclxuICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5yZXF1aXJlZCkge1xyXG4gICAgICAgIFZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24gPSB0aGlzLl9maWVsZHMuZmllbGQuZm9ybUNvbmZpZ3VyYXRpb247XHJcbiAgICAgIGNvbnN0IHRyZWVOb2RlcyA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgIGlmICh0cmVlTm9kZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXModHJlZU5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgIFxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpooTorr7lgLzvvIzku47oioLngrnkuK3ojrflj5bpu5jorqTpgInkuK3nmoTlgLxcclxuICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZCB8fCB0aGlzLl9zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0U2VsZWN0ZWRLZXlzKHRoaXMubm9kZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOaciemihOiuvuWAvOaXtu+8jOWQjOatpeabtOaWsCBub2RlcyDnmoTpgInkuK3nirbmgIFcclxuICAgICAgICB0aGlzLnN5bmNOb2Rlc0Zyb21TZWxlY3RlZEtleXModGhpcy5fc2VsZWN0ZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5mYi5jb250cm9sKHRoaXMuX3NlbGVjdGVkLCBWYWxpZGF0b3JzQXJyYXkpO1xyXG4gICAgICB0aGlzLmV4dHJhUHJvcGVydGllcy5zZXRDb250cm9sKHRoaXMuX2ZpZWxkcy5maWVsZC5uYW1lLCBuZXdDb250cm9sKTtcclxuICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq5bCGIFRyZWVPcHRpb25zIOaVsOaNrue7k+aehOi9rOaNouS4uiBub2RlcyDmlbDmja7nu5PmnoQgKi9cclxuICBwcml2YXRlIGNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXModHJlZU9wdGlvbnM6IGFueVtdKTogYW55W10ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0cmVlT3B0aW9ucykge1xyXG4gICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IG9wdGlvbi5UZXh0LFxyXG4gICAgICAgIGtleTogb3B0aW9uLlZhbHVlLFxyXG4gICAgICAgIGlzQ2hlY2tlZDogb3B0aW9uLlNlbGVjdGVkID8/IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkcmVuOiBvcHRpb24uQ2hpbGRyZW4/Lmxlbmd0aCA/IHRoaXMuY29udmVydFRyZWVPcHRpb25zVG9Ob2RlcyhvcHRpb24uQ2hpbGRyZW4pIDogW10sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHRyYVByb3BlcnRpZXMgJiYgdGhpcy5fZmllbGRzPy5maWVsZD8ubmFtZSkge1xyXG4gICAgICB0aGlzLmV4dHJhUHJvcGVydGllcy5yZW1vdmVDb250cm9sKHRoaXMuX2ZpZWxkcy5maWVsZC5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLyoqdHJlZeaVsOaNriAqL1xyXG4gIG5vZGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvKirlt7LlsZXlvIDnmoToioLngrkgKi9cclxuICBhbkV4cGFuZGVkTm9kZTogYW55W10gPSBbXTtcclxuXHJcbiAgLyoq54K55Ye75bGV5byA5qCR6IqC54K55Zu+5qCH6Kem5Y+RICovXHJcbiAgbnpFeHBhbmRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IGFuRXhwYW5kZWROb2RlID0gdGhpcy5hbkV4cGFuZGVkTm9kZTtcclxuICAgIGlmIChhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhldmVudC5ub2RlLmtleSkpIHtcclxuICAgICAgYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gZXZlbnQubm9kZS5rZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYW5FeHBhbmRlZE5vZGUucHVzaChldmVudC5ub2RlLmtleSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGU7XHJcbiAgfVxyXG5cclxuICAvKirliIfmjaLoioLngrnpgInkuK3nirbmgIEgKi9cclxuICB0b2dnbGVOb2RlQ2hlY2tlZChldmVudDogYW55LCBub2RlOiBhbnkpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk11bHRpcGxlJ107XHJcbiAgICBjb25zdCBuZXdDaGVja2VkID0gIW5vZGUub3JpZ2luPy5pc0NoZWNrZWQ7XHJcbiAgICBcclxuICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgICAgaWYgKG5ld0NoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnNldE5vZGVDaGVja2VkT25seSh0aGlzLm5vZGVzLCBub2RlLmtleSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXksIG5ld0NoZWNrZWQpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0UGFyZW50Tm9kZXNDaGVja2VkKHRoaXMubm9kZXMsIG5vZGUua2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKua4hemZpOaJgOacieiKgueCueeahOmAieS4reeKtuaAgSAqL1xyXG4gIHByaXZhdGUgY2xlYXJBbGxDaGVja2VkKG5vZGVzOiBhbnlbXSkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIG5vZGUuaXNDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZChub2RlLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoq6K6+572u5oyH5a6a6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXROb2RlQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQobm9kZS5jaGlsZHJlbiwgY2hlY2tlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXROb2RlQ2hlY2tlZChub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIGNoZWNrZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuiuvue9ruaJgOacieWtkOiKgueCueeahOmAieS4reeKtuaAgSAqL1xyXG4gIHByaXZhdGUgc2V0Q2hpbGRyZW5DaGVja2VkKGNoaWxkcmVuOiBhbnlbXSwgY2hlY2tlZDogYm9vbGVhbikge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBjaGlsZC5pc0NoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW5DaGVja2VkKGNoaWxkLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoq6YCJ5Lit5omA5pyJ54i26IqC54K5ICovXHJcbiAgcHJpdmF0ZSBzZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZXM6IGFueVtdLCB0YXJnZXRLZXk6IHN0cmluZywgcGFyZW50OiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuaXNDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2V0UGFyZW50Tm9kZXNDaGVja2VkKHRoaXMubm9kZXMsIHBhcmVudC5rZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuc2V0UGFyZW50Tm9kZXNDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgbm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq5pu05paw6KGo5Y2V5YC8ICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtVmFsdWUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEtleXMgPSB0aGlzLmdldFNlbGVjdGVkS2V5cyh0aGlzLm5vZGVzKTtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmV4dHJhUHJvcGVydGllcy5nZXQodGhpcy5fZmllbGRzLmZpZWxkLm5hbWUpO1xyXG4gICAgY29udHJvbD8uc2V0VmFsdWUoc2VsZWN0ZWRLZXlzKTtcclxuICB9XHJcblxyXG4gIC8qKuiOt+WPluaJgOaciemAieS4reiKgueCueeahCBrZXkgKi9cclxuICBwcml2YXRlIGdldFNlbGVjdGVkS2V5cyhub2RlczogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBrZXlzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUuaXNDaGVja2VkKSB7XHJcbiAgICAgICAga2V5cy5wdXNoKG5vZGUua2V5KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAga2V5cy5wdXNoKC4uLnRoaXMuZ2V0U2VsZWN0ZWRLZXlzKG5vZGUuY2hpbGRyZW4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleXM7XHJcbiAgfVxyXG5cclxuICAvKirliKTmlq3oioLngrnnmoTlrZDoioLngrnmmK/lkKbmnInooqvpgInkuK3nmoQgKi9cclxuICBoYXNDaGlsZHJlbkNoZWNrZWQobm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAobm9kZS5vcmlnaW4/LmlzQ2hlY2tlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvcmlnaW5Ob2RlID0gdGhpcy5maW5kTm9kZUJ5S2V5KHRoaXMubm9kZXMsIG5vZGUua2V5KTtcclxuICAgIGlmICghb3JpZ2luTm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQob3JpZ2luTm9kZS5jaGlsZHJlbik7XHJcbiAgfVxyXG5cclxuICAvKirpgJLlvZLmo4Dmn6XlrZDoioLngrnmmK/lkKbmnInooqvpgInkuK3nmoQgKi9cclxuICBwcml2YXRlIGhhc0FueUNoaWxkQ2hlY2tlZChjaGlsZHJlbjogYW55W10pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgaWYgKGNoaWxkLmlzQ2hlY2tlZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkLmNoaWxkcmVuKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirmoLnmja4ga2V5IOafpeaJvuiKgueCuSAqL1xyXG4gIHByaXZhdGUgZmluZE5vZGVCeUtleShub2RlczogYW55W10sIGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZE5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKuagueaNrumihOiuvueahCBrZXlzIOWQjOatpeabtOaWsCBub2RlcyDnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHN5bmNOb2Rlc0Zyb21TZWxlY3RlZEtleXMoc2VsZWN0ZWRLZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5jbGVhckFsbENoZWNrZWQodGhpcy5ub2Rlcyk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZWxlY3RlZEtleXMpIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZE9ubHkodGhpcy5ub2Rlcywga2V5LCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuS7heiuvue9ruaMh+WumuiKgueCueeahOmAieS4reeKtuaAge+8jOS4jeW9seWTjeWtkOiKgueCueWSjOeItuiKgueCuSAqL1xyXG4gIHByaXZhdGUgc2V0Tm9kZUNoZWNrZWRPbmx5KG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLWluZGV0ZXJtaW5hdGVdJyk7XHJcbiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2JveC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXRlcm1pbmF0ZScpID09PSAndHJ1ZSc7XHJcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiX2VudGl0eVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZXh0cmFQcm9wZXJ0aWVzXCIgY2xhc3M9XCJzZWxlY3Rjb250cm9sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiICpuZ0lmPVwiX2ZpZWxkcy5kaXNwbGF5TmFtZVwiPnt7IF9maWVsZHMuZGlzcGxheU5hbWUgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgPGFicC10cmVlIFtub2Rlc109XCJub2Rlc1wiIChuekV4cGFuZENoYW5nZSk9XCJuekV4cGFuZENoYW5nZSgkZXZlbnQpXCIgW2V4cGFuZGVkS2V5c109XCJhbkV4cGFuZGVkTm9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgI21lbnUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZWRpdEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snQWJwVTo6RWRpdCcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljay5zdG9wKT1cImNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXBsdXNcIj48L2k+e3snQWJwRHluYW1pY0Zvcm06OkFkZFN1Yk1lbnVJdGVtJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlTWVudUl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVTo6RGVsZXRlJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBhYnBUcmVlTm9kZVRlbXBsYXRlIGxldC1ub2RlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZU5vZGVDaGVja2VkKCRldmVudCwgbm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNjaGVja2JveCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJub2RlLm9yaWdpbj8uaXNDaGVja2VkXCIgW2F0dHIuZGF0YS1pbmRldGVybWluYXRlXT1cImhhc0NoaWxkcmVuQ2hlY2tlZChub2RlKVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bm9kZS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVFeHBhbmRlZEljb25UZW1wbGF0ZSBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlLmlzRXhwYW5kZWQgPyBtaW51c0ljb24gOiBwbHVzSWNvblwiPjwvbmctY29udGFpbmVyPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtaW51c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0tNi41IDEwaDEzdjFoLTEzdi0xelwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0uNSAxMGg2djFoLTZ2NmgtMXYtNmgtNnYtMWg2di02aDF2NnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9hYnAtdHJlZT5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cclxuPC9mb3JtPiJdfQ==