ngx-tethys 15.2.3 → 15.2.4

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [15.2.4](https://github.com/atinc/ngx-tethys/compare/15.2.3...15.2.4) (2023-04-24)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **tree:** use thyBeforeDragStart to change the visibility of the drag icon when disabled #INFR-7502 ([#2630](https://github.com/atinc/ngx-tethys/issues/2630)) ([ec04ef2](https://github.com/atinc/ngx-tethys/commit/ec04ef253a08e0866fdc28e050f19d1dc136be61)), closes [#INFR-7502](https://github.com/atinc/ngx-tethys/issues/INFR-7502)
11
+
12
+
13
+ ### Features
14
+
15
+ * **table:** table class(.table-hover) delete table hover set space-none style #INFR-7471 ([4a8c974](https://github.com/atinc/ngx-tethys/commit/4a8c974d0bacf213ed9e2d57e02382dc410e0a8d)), closes [#INFR-7471](https://github.com/atinc/ngx-tethys/issues/INFR-7471)
16
+ * **table:** table class(.table-hover) delete table hover set space-none style update #INFR-7471 ([d76b6ec](https://github.com/atinc/ngx-tethys/commit/d76b6ecaa176d269681a5f6c7f15face8368b59d)), closes [#INFR-7471](https://github.com/atinc/ngx-tethys/issues/INFR-7471)
17
+
18
+
19
+
5
20
  ## [15.2.3](https://github.com/atinc/ngx-tethys/compare/15.2.2...15.2.3) (2023-04-23)
6
21
 
7
22
 
@@ -134,7 +134,8 @@ export class ThyTableComponent extends _MixinBase {
134
134
  this.className = list.join(' ');
135
135
  }
136
136
  /**
137
- * 设置表格行的样式
137
+ * 设置表格行的样式,传入函数,支持 row、index
138
+ * @type string | (row, index) => string
138
139
  */
139
140
  set thyRowClassName(value) {
140
141
  this.rowClassName = value;
@@ -982,4 +983,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
982
983
  type: ContentChildren,
983
984
  args: [ThyTableColumnComponent]
984
985
  }] } });
985
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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QUFhO3NCQUFyQyxLQUFLO2dCQUtpQyxTQUFTO3NCQUEvQyxLQUFLO3VCQUFDLGNBQWM7Z0JBS3dCLGVBQWU7c0JBQTNELEtBQUs7dUJBQUMsb0JBQW9CO2dCQU92QixlQUFlO3NCQURsQixLQUFLO3VCQUFDLG9CQUFvQjtnQkFRSCxTQUFTO3NCQUFoQyxLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBU04sd0JBQXdCO3NCQUh2QixXQUFXO3VCQUFDLHlDQUF5Qzs7c0JBQ3JELEtBQUs7Z0JBSUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUtJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNO2dCQUtHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUtHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFLRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFa0MsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUduQyxzQkFBc0I7c0JBRHpCLGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb25zdHJ1Y3RvcixcbiAgICBJbnB1dEJvb2xlYW4sXG4gICAgSW5wdXRDc3NQaXhlbCxcbiAgICBJbnB1dE51bWJlcixcbiAgICBNaXhpbkJhc2UsXG4gICAgbWl4aW5VbnN1YnNjcmliZSxcbiAgICBUaHlVbnN1YnNjcmliZSxcbiAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG59IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGdldCwgaGVscGVycywgaXNTdHJpbmcsIGtleUJ5LCBzZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1TZXJ2ZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVDaGFuZ2VzLFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQsIFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCwgVGh5VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBQYWdlQ2hhbmdlZEV2ZW50LFxuICAgIFRoeU11bHRpU2VsZWN0RXZlbnQsXG4gICAgVGh5UGFnZSxcbiAgICBUaHlSYWRpb1NlbGVjdEV2ZW50LFxuICAgIFRoeVN3aXRjaEV2ZW50LFxuICAgIFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVFbXB0eU9wdGlvbnMsXG4gICAgVGh5VGFibGVFdmVudCxcbiAgICBUaHlUYWJsZVJvd0V2ZW50LFxuICAgIFRoeVRhYmxlU29ydERpcmVjdGlvbixcbiAgICBUaHlUYWJsZVNvcnRFdmVudFxufSBmcm9tICcuL3RhYmxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUYWJsZVJvd0RyYWdEaXNhYmxlZFBpcGUgfSBmcm9tICcuL3BpcGVzL2RyYWcucGlwZSc7XG5pbXBvcnQgeyBUYWJsZUlzVmFsaWRNb2RlbFZhbHVlUGlwZSB9IGZyb20gJy4vcGlwZXMvdGFibGUucGlwZSc7XG5pbXBvcnQgeyBUaHlQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRoeUxvYWRpbmdDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgVGh5RW1wdHlDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVN3aXRjaENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvc3dpdGNoJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5SWNvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlVGhlbWUgPSAnZGVmYXVsdCcgfCAnYm9yZGVyZWQnIHwgJ2JveGVkJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVNb2RlID0gJ2xpc3QnIHwgJ2dyb3VwJyB8ICd0cmVlJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVTaXplID0gJ21kJyB8ICdzbScgfCAneHMnIHwgJ2xnJyB8ICd4bGcnIHwgJ2RlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUaHlGaXhlZERpcmVjdGlvbiB7XG4gICAgbGVmdCA9ICdsZWZ0JyxcbiAgICByaWdodCA9ICdyaWdodCdcbn1cblxuaW50ZXJmYWNlIFRoeVRhYmxlR3JvdXA8VCA9IHVua25vd24+IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBleHBhbmQ/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogb2JqZWN0W107XG4gICAgb3JpZ2luPzogVDtcbn1cblxuY29uc3QgdGFibGVUaGVtZU1hcCA9IHtcbiAgICBkZWZhdWx0OiAndGFibGUtZGVmYXVsdCcsXG4gICAgYm9yZGVyZWQ6ICd0YWJsZS1ib3JkZXJlZCcsXG4gICAgYm94ZWQ6ICd0YWJsZS1ib3hlZCdcbn07XG5cbmNvbnN0IGN1c3RvbVR5cGUgPSB7XG4gICAgaW5kZXg6ICdpbmRleCcsXG4gICAgY2hlY2tib3g6ICdjaGVja2JveCcsXG4gICAgcmFkaW86ICdyYWRpbycsXG4gICAgc3dpdGNoOiAnc3dpdGNoJ1xufTtcblxuY29uc3QgY3NzID0ge1xuICAgIHRhYmxlQm9keTogJ3RoeS10YWJsZS1ib2R5JyxcbiAgICB0YWJsZVNjcm9sbExlZnQ6ICd0aHktdGFibGUtc2Nyb2xsLWxlZnQnLFxuICAgIHRhYmxlU2Nyb2xsUmlnaHQ6ICd0aHktdGFibGUtc2Nyb2xsLXJpZ2h0JyxcbiAgICB0YWJsZVNjcm9sbE1pZGRsZTogJ3RoeS10YWJsZS1zY3JvbGwtbWlkZGxlJ1xufTtcblxuY29uc3QgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSk7XG5cbmNvbnN0IF9NaXhpbkJhc2U6IENvbnN0cnVjdG9yPFRoeVVuc3Vic2NyaWJlPiAmIHR5cGVvZiBNaXhpbkJhc2UgPSBtaXhpblVuc3Vic2NyaWJlKE1peGluQmFzZSk7XG5cbi8qKlxuICog6KGo5qC857uE5Lu2XG4gKiBAbmFtZSB0aHktdGFibGVcbiAqIEBvcmRlciAxMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX1RBQkxFX0NPTFVNTl9QQVJFTlRfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoeVRhYmxlQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3RoeS10YWJsZScsXG4gICAgICAgICdbY2xhc3MudGh5LXRhYmxlLWJvcmRlcmVkXSc6IGB0aGVtZSA9PT0gJ2JvcmRlcmVkJ2AsXG4gICAgICAgICdbY2xhc3MudGh5LXRhYmxlLWJveGVkXSc6IGB0aGVtZSA9PT0gJ2JveGVkJ2AsXG4gICAgICAgICdbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWhlYWRlcl0nOiAndGh5SGVhZGVyRml4ZWQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrU2Nyb2xsYWJsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFRoeUljb25Db21wb25lbnQsXG4gICAgICAgIFRoeURyYWdEcm9wRGlyZWN0aXZlLFxuICAgICAgICBDZGtEcm9wTGlzdCxcbiAgICAgICAgQ2RrRHJhZyxcbiAgICAgICAgVGh5Q29udGV4dE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUaHlTd2l0Y2hDb21wb25lbnQsXG4gICAgICAgIFRoeUVtcHR5Q29tcG9uZW50LFxuICAgICAgICBUaHlMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgICBUaHlQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZUlzVmFsaWRNb2RlbFZhbHVlUGlwZSxcbiAgICAgICAgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUYWJsZUNvbXBvbmVudCBleHRlbmRzIF9NaXhpbkJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQge1xuICAgIHB1YmxpYyBjdXN0b21UeXBlID0gY3VzdG9tVHlwZTtcblxuICAgIHB1YmxpYyBtb2RlbDogb2JqZWN0W10gPSBbXTtcblxuICAgIHB1YmxpYyBncm91cHM6IFRoeVRhYmxlR3JvdXBbXSA9IFtdO1xuXG4gICAgcHVibGljIHJvd0tleSA9ICdfaWQnO1xuXG4gICAgcHVibGljIGdyb3VwQnk6IHN0cmluZztcblxuICAgIHB1YmxpYyBtb2RlOiBUaHlUYWJsZU1vZGUgPSAnbGlzdCc7XG5cbiAgICBwdWJsaWMgdGhlbWU6IFRoeVRhYmxlVGhlbWUgPSAnZGVmYXVsdCc7XG5cbiAgICBwdWJsaWMgY2xhc3NOYW1lID0gJyc7XG5cbiAgICBwdWJsaWMgc2l6ZTogVGh5VGFibGVTaXplID0gJ21kJztcblxuICAgIHB1YmxpYyByb3dDbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uO1xuXG4gICAgcHVibGljIGxvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIGVtcHR5T3B0aW9uczogVGh5VGFibGVFbXB0eU9wdGlvbnMgPSB7fTtcblxuICAgIHB1YmxpYyBkcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZFJhZGlvUm93OiBTYWZlQW55ID0gbnVsbDtcblxuICAgIHB1YmxpYyBwYWdpbmF0aW9uOiBUaHlQYWdlID0geyBpbmRleDogMSwgc2l6ZTogMjAsIHRvdGFsOiAwLCBzaXplT3B0aW9uczogWzIwLCA1MCwgMTAwXSB9O1xuXG4gICAgcHVibGljIHRyYWNrQnlGbjogU2FmZUFueTtcblxuICAgIHB1YmxpYyB3aG9sZVJvd1NlbGVjdCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGZpeGVkRGlyZWN0aW9uID0gVGh5Rml4ZWREaXJlY3Rpb247XG5cbiAgICBwdWJsaWMgaGFzRml4ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb2x1bW5zOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudFtdID0gW107XG5cbiAgICBwcml2YXRlIF9kaWZmOiBJdGVyYWJsZURpZmZlcjxTYWZlQW55PjtcblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX29sZFRoeUNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBzY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxMZWZ0O1xuXG4gICAgcHJpdmF0ZSBnZXQgdGFibGVTY3JvbGxFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzLnRhYmxlQm9keSlbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgc2Nyb2xsJCgpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMudGFibGVTY3JvbGxFbGVtZW50ID8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCAnc2Nyb2xsJykgOiBFTVBUWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5pWw5o2u5Li656m65pe25bGV56S655qE5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdlbXB0eScpIGVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkcmVuKCdyb3dzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzlsZXnpLrmlrnlvI/vvIzliJfooagv5YiG57uEL+agkVxuICAgICAqIEB0eXBlICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSdcbiAgICAgKiBAZGVmYXVsdCAnbGlzdCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlKHZhbHVlOiBUaHlUYWJsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWUgfHwgdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGXnmoTlgLzkuLonZ3JvdXAn5pe25YiG57uE55qEIEtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3VwQnkodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmdyb3VwQnkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mr4/ooYzmlbDmja7nmoTllK/kuIDmoIfor4blsZ7mgKflkI1cbiAgICAgKiBAZGVmYXVsdCBfaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlSb3dLZXkodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5yb3dLZXkgPSB2YWx1ZSB8fCB0aGlzLnJvd0tleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIbnu4TmlbDmja7mupBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cHModmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3Vwcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7mupBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlbCh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWUgfHwgW107XG4gICAgICAgIHRoaXMuX2RpZmYgPSB0aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5tb2RlbCkuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOaYvuekuumjjuagvO+8jGJvcmRlcmVkIOaXtuWktOmDqOacieiDjOaZr+iJsuS4lOWIhuWJsue6v+WMuuWIq+aYjuaYvlxuICAgICAqIEB0eXBlIGRlZmF1bHQgfCBib3JkZXJlZCB8IGJveGVkXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVRoZW1lKHZhbHVlOiBUaHlUYWJsZVRoZW1lKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB2YWx1ZSB8fCB0aGlzLnRoZW1lO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOWkp+Wwj1xuICAgICAqIEB0eXBlIG1kIHwgc20gfCB4cyB8IGxnIHwgeGxnIHwgZGVmYXVsdFxuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZSh2YWx1ZTogVGh5VGFibGVTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlIHx8IHRoaXMuc2l6ZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzmnIDlsI/lrr3luqbvvIzkuIDoiKzmmK/pgILnlKjkuo7orr7nva7liJflrr3kuLrnmb7liIbkuYvmiJZhdXRv5pe26ZmQ5Yi26KGo5qC85pyA5bCP5a695bqmJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeU1pbldpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuLogZml4ZWQg5biD5bGA6KGo5qC877yM6K6+572uIGZpeGVkIOWQju+8jOWIl+WuveWwhuS4peagvOaMieeFp+iuvue9ruWuveW6puWxleekuu+8jOWIl+WuveWwhuS4jeS8muagueaNruihqOagvOWGheWuueiHquWKqOiwg+aVtFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUxheW91dEZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6KGo5aS05Zu65a6a77yM6Iul6K6+572u5Li6IHRydWXvvIwg6ZyA6KaB5ZCM5q2l6K6+572uIHRoeUhlaWdodFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRlckZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE6auY5bqmXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC855qE5qC35byPXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGEgPT4gYS50cmltKCkpO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gbGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLl9vbGRUaHlDbGFzc05hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUaHlDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBsaXN0LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzooYznmoTmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlSb3dDbGFzc05hbWUodmFsdWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L2954q25oCBXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeUxvYWRpbmdEb25lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3ml7bmmL7npLrnmoTmlofmnKxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMb2FkaW5nVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDphY3nva7nqbrnirbmgIHnu4Tku7ZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eU9wdGlvbnModmFsdWU6IFRoeVRhYmxlRW1wdHlPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZW1wdHlPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byA5ZCv6KGM5ouW5ou9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgdGhpcy5kcmFnZ2FibGUgJiYgdGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZSBtb2RlIHNvcnRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN6aG156CBXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6aG15pi+56S65pWw6YePXG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VUb3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeihjOaYr+WQpuiHquWKqOmAieS4rSBDaGVja2JveO+8jOS4jeW8gOWQr+aXtuWPquacieeCueWHuyBDaGVja2JveCDliJfml7bmiY3kvJrop6blj5HpgInkuK1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVdob2xlUm93U2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyB0YWJsZS1ob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aG9sZVJvd1NlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktFxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlTaG93SGVhZGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1RvdGFsJykgQElucHV0Qm9vbGVhbigpIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KCd0aHlTaG93U2l6ZUNoYW5nZXInKSBASW5wdXRCb29sZWFuKCkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHRoeUhvdmVyRGlzcGxheU9wZXJhdGlvbjogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZTogKGl0ZW06IFNhZmVBbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWIh+aNoue7hOS7tuWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblN3aXRjaENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlvZPliY3pobXmlLnlj5jlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbk11bHRpU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDljZXpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25SYWRpb1NlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5ouW5Yqo5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRHJhZ2dhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzooYzngrnlh7vop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDbGljazogRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5YiX5o6S5bqP5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICAgIHNldCBsaXN0T2ZDb2x1bW5Db21wb25lbnRzKGNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxUaHlUYWJsZUNvbHVtbkNvbXBvbmVudD4pIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbXBvbmVudHMudG9BcnJheSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNGaXhlZCA9ICEhdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ubGVmdCB8fCBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pWw5o2u55qE5oqY5Y+g5bGV5byA54q25oCBXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcE9mR3JvdXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHByaXZhdGUgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWc6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIGRyYWdQcmV2aWV3Q2xhc3MgPSAndGh5LXRhYmxlLWRyYWctcHJldmlldyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2RpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUhvc3RDbGFzc1NlcnZpY2U6IFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IFNhZmVBbnksXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9iaW5kVHJhY2tGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5leHBhbmQgPT09IHRydWUpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbMF0uZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGxlZnRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ubGVmdCk7XG4gICAgICAgIGxlZnRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGVmdEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5sZWZ0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5sZWZ0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLnJpZ2h0KS5yZXZlcnNlKCk7XG4gICAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHJpZ2h0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLnJpZ2h0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5yaWdodCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxTZWxlY3Rpb25zKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gZ2V0KHJvdywgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJvdzogU2FmZUFueSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxTYWZlQW55Pikge1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFNhZmVBbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocmVjb3JkLml0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kVHJhY2tGbigpIHtcbiAgICAgICAgdGhpcy50cmFja0J5Rm4gPSBmdW5jdGlvbiAodGhpczogU2FmZUFueSwgaW5kZXg6IG51bWJlciwgcm93OiBTYWZlQW55KTogU2FmZUFueSB7XG4gICAgICAgICAgICByZXR1cm4gcm93ICYmIHRoaXMucm93S2V5ID8gcm93W3RoaXMucm93S2V5XSA6IGluZGV4O1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnWyQkY29sdW1uXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldENsYXNzKGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmaXJzdCAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChgdGFibGUtJHt0aGlzLnNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaCh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1uU2VsZWN0aW9ucyhrZXk6IHN0cmluZywgc2VsZWN0aW9uczogU2FmZUFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVtcGxhdGVSZWYocmVmOiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kZWxWYWx1ZShyb3c6IFNhZmVBbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZ2V0KHJvdywgcGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclJvd0NsYXNzTmFtZShyb3c6IFNhZmVBbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMucm93Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvd0NsYXNzTmFtZSBhcyBGdW5jdGlvbikocm93LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tb2RlbCkge1xuICAgICAgICAgICAgc2V0KHJvdywgY29sdW1uLm1vZGVsLCByb3dbY29sdW1uLmtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlSW5kZXhDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZVNpemVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShudWxsLCByb3csIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMubW9kZWwuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLmtleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtdWx0aVNlbGVjdEV2ZW50OiBUaHlNdWx0aVNlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25NdWx0aVNlbGVjdENoYW5nZS5lbWl0KG11bHRpU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHJhZGlvU2VsZWN0RXZlbnQ6IFRoeVJhZGlvU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUmFkaW9TZWxlY3RDaGFuZ2UuZW1pdChyYWRpb1NlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2l0Y2hDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBzd2l0Y2hFdmVudDogVGh5U3dpdGNoRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJlZnJlc2g6ICh2YWx1ZTogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgcm93O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4ua2V5XSA9IGdldCh2YWx1ZSwgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblN3aXRjaENoYW5nZS5lbWl0KHN3aXRjaEV2ZW50KTtcbiAgICB9XG5cbiAgICBzaG93RXhwYW5kKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldICYmIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzRXhwYW5kZWQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXTtcbiAgICB9XG5cbiAgICBpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbCAqIHRoaXMudGh5SW5kZW50IC0gNTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogYCR7KGxldmVsICsgMSkgKiB0aGlzLnRoeUluZGVudCAtIDV9cHhgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4ocm93OiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQocm93KSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWcgPSB7IC4uLnRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cCB9O1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZXhwYW5kKTtcbiAgICAgICAgdGhpcy5mb2xkR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMub25EcmFnU3RhcnRlZChldmVudCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cEVuZChldmVudDogQ2RrRHJhZ0VuZDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZ1tncm91cC5pZF0pO1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYWdHcm91cERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhLmlkID09PSBncm91cC5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cFxuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cCBjaGlsZHJlblxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV0gPT09IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGEuaWQgPT09IGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0pICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IGdyb3VwLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4IC0gZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4IC0gZ3JvdXBJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShncm91cC5jaGlsZHJlbiwgZHJhZ0V2ZW50Lm9sZEluZGV4LCBkcmFnRXZlbnQubmV3SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnUHJldmlld0NsYXNzKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRkczogSFRNTENvbGxlY3Rpb24gPSBldmVudC5zb3VyY2UuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocHJldmlldz8uY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7b3JpZ2luYWxUZHNbaW5kZXhdPy5jbGllbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZHJvcExpc3RFbnRlclByZWRpY2F0ZSA9IChpbmRleDogbnVtYmVyLCBkcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kYXRhLmdyb3VwX2lkID09PSBkcmFnLmRhdGEuZ3JvdXBfaWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgIG1vZGVsczogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICB9O1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5tb2RlbCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdHcm91cERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ01vZGVsRHJvcHBlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnREaXJlY3Rpb24sIG1vZGVsLCBzb3J0Q2hhbmdlIH0gPSBjb2x1bW47XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYykge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbi5zb3J0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgY29uc3Qgc29ydEV2ZW50ID0geyBldmVudCwga2V5OiBtb2RlbCwgZGlyZWN0aW9uIH07XG4gICAgICAgICAgICBzb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMudGh5U29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5vblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQsIHJvdyk7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94IHx8IGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSAhcm93W2NvbHVtbi5rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShldmVudCwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvUm93ID0gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93RXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50aHlPblJvd0NsaWNrLmVtaXQocm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnLnRyZWUtZXhwYW5kLWljb24nKSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRDaGlsZHJlbihyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NvbnRleHRNZW51KGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51RXZlbnQ6IFRoeVRhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUm93Q29udGV4dE1lbnUuZW1pdChjb250ZXh0TWVudUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgX2NvbHVtbnMgPSBjb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogY29tcG9uZW50LndpZHRoLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY29tcG9uZW50LmNsYXNzTmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obiwgX2NvbHVtbnNbaV0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkR3JvdXBzKG9yaWdpbkdyb3VwczogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBvcmlnaW5Hcm91cHNNYXAgPSBoZWxwZXJzLmtleUJ5KG9yaWdpbkdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIG9yaWdpbkdyb3Vwcy5mb3JFYWNoKChvcmlnaW46IFNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBUaHlUYWJsZUdyb3VwID0geyBpZDogb3JpZ2luW3RoaXMucm93S2V5XSwgY2hpbGRyZW46IFtdLCBvcmlnaW4gfTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cC5oYXNPd25Qcm9wZXJ0eShncm91cC5pZCkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSAhIShvcmlnaW5Hcm91cHNNYXBbZ3JvdXAuaWRdIGFzIFNhZmVBbnkpLmV4cGFuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNb2RlbCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzTWFwID0ga2V5QnkodGhpcy5ncm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzTWFwW3Jvd1t0aGlzLmdyb3VwQnldXTtcbiAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZEdyb3VwKGdyb3VwOiBUaHlUYWJsZUdyb3VwKSB7XG4gICAgICAgIGdyb3VwLmV4cGFuZCA9ICFncm91cC5leHBhbmQ7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF0gPSBncm91cC5leHBhbmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9sZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxDbGFzcygpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMudGFibGVTY3JvbGxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXhTY3JvbGxMZWZ0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCAtIHNjcm9sbEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHNjcm9sbFggPSBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IGxhc3RTY3JvbGxDbGFzc05hbWUgPSB0aGlzLnNjcm9sbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSAnJztcbiAgICAgICAgaWYgKHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggPiBzY3JvbGxFbGVtZW50LmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsWCA+PSBtYXhTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxSaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxNaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RTY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIGxhc3RTY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgdGhpcy5zY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS5pbml0aWFsaXplRWxlbWVudCh0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3ModHJ1ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIG1lcmdlKHRoaXMudmlld3BvcnRSdWxlci5jaGFuZ2UoMjAwKSwgb2YobnVsbCkucGlwZShkZWxheSgyMDApKSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvd3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMucm93cyksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9ic2VydmFibGU8RXZlbnQ+KHN1YnNjcmliZXIgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm93cy5tYXAocm93ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogdGhlcmUncyBubyBuZWVkIHRvIGFkZCB0b3VjaCwgcG9pbnRlciBhbmQgbW91c2UgZXZlbnQgbGlzdGVuZXJzIHRvZ2V0aGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiByb3dzLCB3aGljaCB3aWxsIGxlYWQgdG8gYWRkaW5nIE4gKiAzIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIChodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jZXhhbXBsZXMpLCB3ZSBjYW4gdXNlIGZlYXR1cmUgZGV0ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSBpZiBwb2ludGVyIGV2ZW50cyBhcmUgYXZhaWxhYmxlLiBJZiBwb2ludGVyIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCB3ZSBoYXZlIHRvIGxpc3RlbiBvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBgcG9pbnRlcmRvd25gIGV2ZW50LiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIG9uIGEgdG91Y2ggZGV2aWNlIG9yIG5vdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG91Y2ggZXZlbnRzIGFyZSBoYW5kbGVkIGVhcmxpZXIgdGhhbiBtb3VzZSBldmVudHMsIHRobyBub3QgYWxsIHVzZXIgYWdlbnRzIGRpc3BhdGNoIG1vdXNlIGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0b3VjaCBldmVudHMuIFNlZSB0aGUgc3BlYzogaHR0cHM6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy8jbW91c2UtZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuUG9pbnRlckV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwb2ludGVyZG93bidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ29udG91Y2hzdGFydCcgaW4gcm93Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RvdWNoc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBzaW5jZSBDaHJvbWUgNTYgZGVmYXVsdHMgZG9jdW1lbnQgbGV2ZWwgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIHRvIHBhc3NpdmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50IGB0b3VjaHN0YXJ0YCBsaXN0ZW5lciBpcyBub3QgcGFzc2l2ZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5ldmVyIGNhbGwgYHByZXZlbnREZWZhdWx0KClgIG9uIGl0LCBzbyB3ZSdyZSBzYWZlIG1ha2luZyBpdCBwYXNzaXZlIHRvby5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPnBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBtb2RlQ2hhbmdlID0gc2ltcGxlQ2hhbmdlcy50aHlNb2RlO1xuICAgICAgICBjb25zdCB0aHlHcm91cHNDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeUdyb3VwcztcbiAgICAgICAgY29uc3QgaXNHcm91cE1vZGUgPSBtb2RlQ2hhbmdlICYmIG1vZGVDaGFuZ2UuY3VycmVudFZhbHVlID09PSAnZ3JvdXAnO1xuICAgICAgICBpZiAoaXNHcm91cE1vZGUgJiYgdGh5R3JvdXBzQ2hhbmdlICYmIHRoeUdyb3Vwc0NoYW5nZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3Vwcyh0aHlHcm91cHNDaGFuZ2UuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RpZmYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmLmRpZmYodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLl9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lJbnZhbGlkQXR0cmlidXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRoeS10YWJsZS1ib2R5XCJcbiAgY2RrU2Nyb2xsYWJsZVxuICBbbmdDbGFzc109XCJ7ICd0aHktdGFibGUtZml4ZWQnOiBoYXNGaXhlZCwgJ3RoeS10YWJsZS1ib3JkZXJlZC10aGVtZSc6IHRoZW1lID09PSAnYm9yZGVyZWQnICYmIGhhc0ZpeGVkIH1cIlxuPlxuICA8dGFibGVcbiAgICAjdGFibGVcbiAgICBjbGFzcz1cInRhYmxlXCJcbiAgICBbbmdDbGFzc109XCJbY2xhc3NOYW1lXVwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cInRoeUxheW91dEZpeGVkXCJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWdyb3VwXT1cIm1vZGUgPT09ICdncm91cCdcIlxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGh5TWluV2lkdGhcIlxuICA+XG4gICAgPGNvbGdyb3VwPlxuICAgICAgPGNvbCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCIgW3N0eWxlLm1pbldpZHRoXT1cImhhc0ZpeGVkID8gY29sdW1uLndpZHRoIDogY29sdW1uLm1pbldpZHRoXCIgLz5cbiAgICA8L2NvbGdyb3VwPlxuXG4gICAgPHRoZWFkICpuZ0lmPVwidGh5U2hvd0hlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc05hbWVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tbGVmdF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLmxlZnRcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLXJpZ2h0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ucmlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiY29sdW1uLnJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljaygkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIFtuZ0NsYXNzXT1cIlsndGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZS1pY29uJywgJ3B4LTEnLCBjb2x1bW4uc29ydERpcmVjdGlvbl1cIiB0aHlJY29uTmFtZT1cInNvcnQtdmVydGljYWwtdHRcIj5cbiAgICAgICAgICAgIDwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHlcbiAgICAgICpuZ0lmPVwibG9hZGluZ0RvbmVcIlxuICAgICAgdGh5RHJhZ0Ryb3BcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ2dhYmxlXCJcbiAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZHJvcExpc3RFbnRlclByZWRpY2F0ZVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPCEtLSBncm91cCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnZ3JvdXAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQ6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnR3JvdXBTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdHcm91cEVuZCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnZ2FibGUgJiYgIShncm91cCB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwiZXhwYW5kLWljb25cIiBbdGh5SWNvbk5hbWVdPVwiZ3JvdXAuZXhwYW5kID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBncm91cC5vcmlnaW4sIGdyb3VwOiBncm91cC5vcmlnaW4gfVwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLmNoaWxkcmVuPy5sZW5ndGggJiYgZ3JvdXAuZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGlzdOaooeW8j+S4i+ayoeacieebtOaOpeS9v+eUqGl0ZW3mqKHmnb/vvIzmmK/lm6DkuLrkvb/nlKjkuobmqKHmnb/lvbHlk43kuoZBbmd1bGFy55qE5L6d6LWW5qCR77yM5a+86Ie0Q2RrRHJhZ0Ryb3DmjpLluo/lpLHmlYjvvIznm67liY3ov5nmoLfkv67mlLnlj6/ku6XmmoLml7bop6PlhrPnur/kuIrkuI3og73mjpLluo/nmoTpl67popjvvIxUcmVl5qih5byP55qE5o6S5bqP5pqC5pe25LiN5pSv5oyBIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdsaXN0J1wiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJ0aHktc29ydGFibGUtaXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxuICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwicm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQ6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIGluZGV4OiBpLCBsZXZlbDogMCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0clRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgI3Jvd3NcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDFcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgaXNFeHBhbmRlZChyb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygcm93W3RoeUNoaWxkcmVuS2V5XTsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiBjaGlsZCwgaW5kZXg6IGosIGxldmVsOiBsZXZlbCArIDEgfVwiXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0ZHNUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWk9XCJpbmRleFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS1vcGVyYXRpb24tbGlua3NdPVwiISFjb2x1bW4ub3BlcmF0aW9uYWxcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNlY29uZGFyeV09XCIhIWNvbHVtbi5zZWNvbmRhcnlcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY2hlY2tib3gtY29sdW1uXT1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kID8gdGRJbmRlbnRDb21wdXRlZChsZXZlbCkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJqID09PSAwICYmIGRyYWdnYWJsZSAmJiAhKHJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihjb2x1bW4uY2VsbFRlbXBsYXRlUmVmKVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXNFeHBhbmRlZChyb3cpID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiXG4gICAgICAgICAgICA+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tbm90IHRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8IS0tIGRlZmF1bHQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1vZGVsICYmICFjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiXG4gICAgICAgICAgICAgID48L3RoeS1pY29uPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfCBpc1ZhbGlkTW9kZWxWYWx1ZTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRlZmF1bHRUZXh0XCIgY2xhc3M9XCJ0ZXh0LWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi5kZWZhdWx0VGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gaW5kZXggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuaW5kZXhcIj5cbiAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSByYWRpbyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpb1wiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRSYWRpb1Jvd1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RvcFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb1NlbGVjdENoYW5nZSgkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gc3dpdGNoIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaFwiPlxuICAgICAgICAgICAgICA8dGh5LXN3aXRjaFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKHRoeUNoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgID48L3RoeS1zd2l0Y2g+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ0RvbmUgJiYgbW9kZWwubGVuZ3RoID09PSAwICYmIGdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRoeS10YWJsZS1lbXB0eSBjbGVhci1ob3ZlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbXB0eVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFbXB0eVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5PlxuICAgICAgPHRoeS1lbXB0eVxuICAgICAgICBbdGh5TWVzc2FnZV09XCJlbXB0eU9wdGlvbnMubWVzc2FnZVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvbktleV09XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25LZXlcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25WYWx1ZXNdPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uVmFsdWVzXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVdPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZVRyYW5zbGF0ZUtleV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVRyYW5zbGF0ZUtleVwiXG4gICAgICAgIFt0aHlJY29uTmFtZV09XCJlbXB0eU9wdGlvbnMuaWNvbk5hbWVcIlxuICAgICAgICBbdGh5U2l6ZV09XCJlbXB0eU9wdGlvbnMuc2l6ZVwiXG4gICAgICAgIFt0aHlNYXJnaW5Ub3BdPVwiZW1wdHlPcHRpb25zLm1hcmdpblRvcFwiXG4gICAgICAgIFt0aHlUb3BBdXRvXT1cImVtcHR5T3B0aW9ucy50b3BBdXRvXCJcbiAgICAgICAgW3RoeUNvbnRhaW5lcl09XCJlbXB0eU9wdGlvbnMuY29udGFpbmVyXCJcbiAgICAgID48L3RoeS1lbXB0eT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8dGh5LWxvYWRpbmcgW3RoeURvbmVdPVwibG9hZGluZ0RvbmVcIiBbdGh5VGlwXT1cImxvYWRpbmdUZXh0XCI+PC90aHktbG9hZGluZz5cblxuICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWZvb3RlclwiICpuZ0lmPVwicGFnaW5hdGlvbi50b3RhbCA+IHBhZ2luYXRpb24uc2l6ZVwiIFtjbGFzcy50aHktdGFibGUtZm9vdGVyLWhhcy1wYWRkaW5nXT1cInRoZW1lID09PSAnZGVmYXVsdCdcIj5cbiAgICA8dGh5LXBhZ2luYXRpb25cbiAgICAgIFt0aHlQYWdlSW5kZXhdPVwicGFnaW5hdGlvbi5pbmRleFwiXG4gICAgICBbdGh5VG90YWxdPVwicGFnaW5hdGlvbi50b3RhbFwiXG4gICAgICBbdGh5UGFnZVNpemVdPVwicGFnaW5hdGlvbi5zaXplXCJcbiAgICAgIFt0aHlQYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvbi5zaXplT3B0aW9uc1wiXG4gICAgICBbdGh5U2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICBbdGh5U2hvd1RvdGFsXT1cInNob3dUb3RhbFwiXG4gICAgICAodGh5UGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VJbmRleENoYW5nZSk9XCJvblBhZ2VJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh0aHlQYWdlU2l6ZUNoYW5nZWQpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC90aHktcGFnaW5hdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
986
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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YUFBYTtzQkFBckMsS0FBSztnQkFLaUMsU0FBUztzQkFBL0MsS0FBSzt1QkFBQyxjQUFjO2dCQUt3QixlQUFlO3NCQUEzRCxLQUFLO3VCQUFDLG9CQUFvQjtnQkFPdkIsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBUUgsU0FBUztzQkFBaEMsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQVNOLHdCQUF3QjtzQkFIdkIsV0FBVzt1QkFBQyx5Q0FBeUM7O3NCQUNyRCxLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFLSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFLRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFLRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRWtDLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbkMsc0JBQXNCO3NCQUR6QixlQUFlO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29uc3RydWN0b3IsXG4gICAgSW5wdXRCb29sZWFuLFxuICAgIElucHV0Q3NzUGl4ZWwsXG4gICAgSW5wdXROdW1iZXIsXG4gICAgTWl4aW5CYXNlLFxuICAgIG1peGluVW5zdWJzY3JpYmUsXG4gICAgVGh5VW5zdWJzY3JpYmUsXG4gICAgVXBkYXRlSG9zdENsYXNzU2VydmljZVxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBnZXQsIGhlbHBlcnMsIGlzU3RyaW5nLCBrZXlCeSwgc2V0IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IEVNUFRZLCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnU3RhcnQsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtU2VydmVyLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlQ2hhbmdlUmVjb3JkLFxuICAgIEl0ZXJhYmxlQ2hhbmdlcyxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSVRoeVRhYmxlQ29sdW1uUGFyZW50Q29tcG9uZW50LCBUSFlfVEFCTEVfQ09MVU1OX1BBUkVOVF9DT01QT05FTlQsIFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgUGFnZUNoYW5nZWRFdmVudCxcbiAgICBUaHlNdWx0aVNlbGVjdEV2ZW50LFxuICAgIFRoeVBhZ2UsXG4gICAgVGh5UmFkaW9TZWxlY3RFdmVudCxcbiAgICBUaHlTd2l0Y2hFdmVudCxcbiAgICBUaHlUYWJsZURyYWdnYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlRW1wdHlPcHRpb25zLFxuICAgIFRoeVRhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVSb3dFdmVudCxcbiAgICBUaHlUYWJsZVNvcnREaXJlY3Rpb24sXG4gICAgVGh5VGFibGVTb3J0RXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlIH0gZnJvbSAnLi9waXBlcy9kcmFnLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUaHlMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IFRoeUVtcHR5Q29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlTd2l0Y2hDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL3N3aXRjaCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeURyYWdEcm9wRGlyZWN0aXZlLCBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUljb25Db21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ2JvcmRlcmVkJyB8ICdib3hlZCc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlTW9kZSA9ICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlU2l6ZSA9ICdtZCcgfCAnc20nIHwgJ3hzJyB8ICdsZycgfCAneGxnJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGh5Rml4ZWREaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgcmlnaHQgPSAncmlnaHQnXG59XG5cbmludGVyZmFjZSBUaHlUYWJsZUdyb3VwPFQgPSB1bmtub3duPiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZXhwYW5kPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IG9iamVjdFtdO1xuICAgIG9yaWdpbj86IFQ7XG59XG5cbmNvbnN0IHRhYmxlVGhlbWVNYXAgPSB7XG4gICAgZGVmYXVsdDogJ3RhYmxlLWRlZmF1bHQnLFxuICAgIGJvcmRlcmVkOiAndGFibGUtYm9yZGVyZWQnLFxuICAgIGJveGVkOiAndGFibGUtYm94ZWQnXG59O1xuXG5jb25zdCBjdXN0b21UeXBlID0ge1xuICAgIGluZGV4OiAnaW5kZXgnLFxuICAgIGNoZWNrYm94OiAnY2hlY2tib3gnLFxuICAgIHJhZGlvOiAncmFkaW8nLFxuICAgIHN3aXRjaDogJ3N3aXRjaCdcbn07XG5cbmNvbnN0IGNzcyA9IHtcbiAgICB0YWJsZUJvZHk6ICd0aHktdGFibGUtYm9keScsXG4gICAgdGFibGVTY3JvbGxMZWZ0OiAndGh5LXRhYmxlLXNjcm9sbC1sZWZ0JyxcbiAgICB0YWJsZVNjcm9sbFJpZ2h0OiAndGh5LXRhYmxlLXNjcm9sbC1yaWdodCcsXG4gICAgdGFibGVTY3JvbGxNaWRkbGU6ICd0aHktdGFibGUtc2Nyb2xsLW1pZGRsZSdcbn07XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5jb25zdCBfTWl4aW5CYXNlOiBDb25zdHJ1Y3RvcjxUaHlVbnN1YnNjcmliZT4gJiB0eXBlb2YgTWl4aW5CYXNlID0gbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpO1xuXG4vKipcbiAqIOihqOagvOe7hOS7tlxuICogQG5hbWUgdGh5LXRhYmxlXG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlUYWJsZUNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktdGFibGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3JkZXJlZF0nOiBgdGhlbWUgPT09ICdib3JkZXJlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3hlZF0nOiBgdGhlbWUgPT09ICdib3hlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1maXhlZC1oZWFkZXJdJzogJ3RoeUhlYWRlckZpeGVkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlJY29uQ29tcG9uZW50LFxuICAgICAgICBUaHlEcmFnRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3dpdGNoQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eUNvbXBvbmVudCxcbiAgICAgICAgVGh5TG9hZGluZ0NvbXBvbmVudCxcbiAgICAgICAgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUsXG4gICAgICAgIFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VGFibGVDb21wb25lbnQgZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSVRoeVRhYmxlQ29sdW1uUGFyZW50Q29tcG9uZW50IHtcbiAgICBwdWJsaWMgY3VzdG9tVHlwZSA9IGN1c3RvbVR5cGU7XG5cbiAgICBwdWJsaWMgbW9kZWw6IG9iamVjdFtdID0gW107XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3dLZXkgPSAnX2lkJztcblxuICAgIHB1YmxpYyBncm91cEJ5OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgbW9kZTogVGh5VGFibGVNb2RlID0gJ2xpc3QnO1xuXG4gICAgcHVibGljIHRoZW1lOiBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnO1xuXG4gICAgcHVibGljIGNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHVibGljIHNpemU6IFRoeVRhYmxlU2l6ZSA9ICdtZCc7XG5cbiAgICBwdWJsaWMgcm93Q2xhc3NOYW1lOiBzdHJpbmcgfCBGdW5jdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nRG9uZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgbG9hZGluZ1RleHQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBlbXB0eU9wdGlvbnM6IFRoeVRhYmxlRW1wdHlPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgZHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRSYWRpb1JvdzogU2FmZUFueSA9IG51bGw7XG5cbiAgICBwdWJsaWMgcGFnaW5hdGlvbjogVGh5UGFnZSA9IHsgaW5kZXg6IDEsIHNpemU6IDIwLCB0b3RhbDogMCwgc2l6ZU9wdGlvbnM6IFsyMCwgNTAsIDEwMF0gfTtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm46IFNhZmVBbnk7XG5cbiAgICBwdWJsaWMgd2hvbGVSb3dTZWxlY3QgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaXhlZERpcmVjdGlvbiA9IFRoeUZpeGVkRGlyZWN0aW9uO1xuXG4gICAgcHVibGljIGhhc0ZpeGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29sdW1uczogVGh5VGFibGVDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGlmZjogSXRlcmFibGVEaWZmZXI8U2FmZUFueT47XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9vbGRUaHlDbGFzc05hbWUgPSAnJztcblxuICAgIHByaXZhdGUgc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcblxuICAgIHByaXZhdGUgZ2V0IHRhYmxlU2Nyb2xsRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzcy50YWJsZUJvZHkpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHNjcm9sbCQoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCA/IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcpIDogRU1QVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaVsOaNruS4uuepuuaXtuWxleekuueahOaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZHJlbigncm93cycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSByb3dzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85bGV56S65pa55byP77yM5YiX6KGoL+WIhue7hC/moJFcbiAgICAgKiBAdHlwZSAnbGlzdCcgfCAnZ3JvdXAnIHwgJ3RyZWUnXG4gICAgICogQGRlZmF1bHQgJ2xpc3QnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZSh2YWx1ZTogVGh5VGFibGVNb2RlKSB7XG4gICAgICAgIHRoaXMubW9kZSA9IHZhbHVlIHx8IHRoaXMubW9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2Rl55qE5YC85Li6J2dyb3VwJ+aXtuWIhue7hOeahCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ncm91cEJ5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6KGM5pWw5o2u55qE5ZSv5LiA5qCH6K+G5bGe5oCn5ZCNXG4gICAgICogQGRlZmF1bHQgX2lkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93S2V5KHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMucm93S2V5ID0gdmFsdWUgfHwgdGhpcy5yb3dLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG57uE5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBzKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZWwodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLl9kaWZmID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMubW9kZWwpLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTmmL7npLrpo47moLzvvIxib3JkZXJlZCDml7blpLTpg6jmnInog4zmma/oibLkuJTliIblibLnur/ljLrliKvmmI7mmL5cbiAgICAgKiBAdHlwZSBkZWZhdWx0IHwgYm9yZGVyZWQgfCBib3hlZFxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUaGVtZSh2YWx1ZTogVGh5VGFibGVUaGVtZSkge1xuICAgICAgICB0aGlzLnRoZW1lID0gdmFsdWUgfHwgdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTlpKflsI9cbiAgICAgKiBAdHlwZSBtZCB8IHNtIHwgeHMgfCBsZyB8IHhsZyB8IGRlZmF1bHRcbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFRoeVRhYmxlU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZSB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85pyA5bCP5a695bqm77yM5LiA6Iis5piv6YCC55So5LqO6K6+572u5YiX5a695Li655m+5YiG5LmL5oiWYXV0b+aXtumZkOWItuihqOagvOacgOWwj+WuveW6pidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlNaW5XaWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5Li6IGZpeGVkIOW4g+WxgOihqOagvO+8jOiuvue9riBmaXhlZCDlkI7vvIzliJflrr3lsIbkuKXmoLzmjInnhaforr7nva7lrr3luqblsZXnpLrvvIzliJflrr3lsIbkuI3kvJrmoLnmja7ooajmoLzlhoXlrrnoh6rliqjosIPmlbRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlMYXlvdXRGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuihqOWktOWbuuWumu+8jOiLpeiuvue9ruS4uiB0cnVl77yMIOmcgOimgeWQjOatpeiuvue9riB0aHlIZWlnaHRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlIZWFkZXJGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOmrmOW6plxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOeahOagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihhID0+IGEudHJpbSgpKTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5fb2xkVGh5Q2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkVGh5Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gbGlzdC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC86KGM55qE5qC35byP77yM5Lyg5YWl5Ye95pWw77yM5pSv5oyBIHJvd+OAgWluZGV4XG4gICAgICogQHR5cGUgc3RyaW5nIHwgKHJvdywgaW5kZXgpID0+IHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0NsYXNzTmFtZSh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3nirbmgIFcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5TG9hZGluZ0RvbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veaXtuaYvuekuueahOaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUxvYWRpbmdUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmFjee9ruepuueKtuaAgee7hOS7tlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5T3B0aW9ucyh2YWx1ZTogVGh5VGFibGVFbXB0eU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5lbXB0eU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblvIDlkK/ooYzmi5bmi71cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB0aGlzLmRyYWdnYWJsZSAmJiB0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmVlIG1vZGUgc29ydGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3pobXnoIFcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXROdW1iZXIoKVxuICAgIHNldCB0aHlQYWdlSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uaW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mr4/pobXmmL7npLrmlbDph49cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaAu+mhteaVsFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZVRvdGFsKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnRvdGFsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit5b2T5YmN6KGM5piv5ZCm6Ieq5Yqo6YCJ5LitIENoZWNrYm9477yM5LiN5byA5ZCv5pe25Y+q5pyJ54K55Ye7IENoZWNrYm94IOWIl+aXtuaJjeS8muinpuWPkemAieS4rVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5V2hvbGVSb3dTZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHRhYmxlLWhvdmVyJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndob2xlUm93U2VsZWN0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66KGo5qC85aS0XG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeVNob3dIZWFkZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S65bem5L6nIFRvdGFsXG4gICAgICovXG4gICAgQElucHV0KCd0aHlTaG93VG90YWwnKSBASW5wdXRCb29sZWFuKCkgc2hvd1RvdGFsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrosIPmlbTmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYZcbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVNob3dTaXplQ2hhbmdlcicpIEBJbnB1dEJvb2xlYW4oKSBzaG93U2l6ZUNoYW5nZXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOavj+mhteaYvuekuuadoeaVsOS4i+aLieahhuWPr+mAiemhuVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCd0aHlQYWdlU2l6ZU9wdGlvbnMnKVxuICAgIHNldCBwYWdlU2l6ZU9wdGlvbnModmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplT3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGUg5Li6IHRyZWUg5pe277yM6K6+572uIFRyZWUg5qCR54q25pWw5o2u5bGV56S65pe255qE57yp6L+bXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgdGh5SW5kZW50ID0gMjA7XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWvueixoeS4reeahOWtkOiKgueCuSBLZXlcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDaGlsZHJlbktleSA9ICdjaGlsZHJlbic7XG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK8gSG92ZXIg5ZCO5pi+56S65pON5L2c77yM6buY6K6k5LiN5pi+56S65pON5L2c5Yy65YaF5a6577yM6byg5qCHIEhvdmVyIOaXtuWxleekulxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdGFibGUtaG92ZXItZGlzcGxheS1vcGVyYXRpb24nKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgdGh5SG92ZXJEaXNwbGF5T3BlcmF0aW9uOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlOiAoaXRlbTogU2FmZUFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5YiH5o2i57uE5Lu25Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU3dpdGNoQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIhumhteWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIhumhteW9k+WJjemhteaUueWPmOWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICog5aSa6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uTXVsdGlTZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWNlemAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblJhZGlvU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmi5bliqjkv67mlLnkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25EcmFnZ2FibGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOihjOeCueWHu+inpuWPkeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDliJfmjpLluo/kv67mlLnkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5VGFibGVDb2x1bW5Db21wb25lbnQpXG4gICAgc2V0IGxpc3RPZkNvbHVtbkNvbXBvbmVudHMoY29tcG9uZW50czogUXVlcnlMaXN0PFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50Pikge1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gY29tcG9uZW50cy50b0FycmF5KCk7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpeGVkID0gISF0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5sZWZ0IHx8IGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmlbDmja7nmoTmipjlj6DlsZXlvIDnirbmgIFcbiAgICBwdWJsaWMgZXhwYW5kU3RhdHVzTWFwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwdWJsaWMgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHJpdmF0ZSBleHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZzogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgZHJhZ1ByZXZpZXdDbGFzcyA9ICd0aHktdGFibGUtZHJhZy1wcmV2aWV3JztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIHByaXZhdGUgdXBkYXRlSG9zdENsYXNzU2VydmljZTogVXBkYXRlSG9zdENsYXNzU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogU2FmZUFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2JpbmRUcmFja0ZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLnNvbWUoaXRlbSA9PiBpdGVtLmV4cGFuZCA9PT0gdHJ1ZSkgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1swXS5leHBhbmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbGVmdEZpeGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpeGVkID09PSBUaHlGaXhlZERpcmVjdGlvbi5sZWZ0KTtcbiAgICAgICAgbGVmdEZpeGVkQ29sdW1ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBsZWZ0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLmxlZnQgPSBwcmV2aW91cyA/IHByZXZpb3VzLmxlZnQgKyBwYXJzZUludChwcmV2aW91cy53aWR0aC50b1N0cmluZygpLCAxMCkgOiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmlnaHRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ucmlnaHQpLnJldmVyc2UoKTtcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcmlnaHRGaXhlZENvbHVtbnNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGl0ZW0ucmlnaHQgPSBwcmV2aW91cyA/IHByZXZpb3VzLnJpZ2h0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURhdGFNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNlbGVjdGlvbnMocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zLmluY2x1ZGVzKHJvd1t0aGlzLnJvd0tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3c6IG9iamVjdCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBnZXQocm93LCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPFNhZmVBbnk+KSB7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8U2FmZUFueT4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VzdG9tTW9kZWxWYWx1ZShyZWNvcmQuaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRUcmFja0ZuKCkge1xuICAgICAgICB0aGlzLnRyYWNrQnlGbiA9IGZ1bmN0aW9uICh0aGlzOiBTYWZlQW55LCBpbmRleDogbnVtYmVyLCByb3c6IFNhZmVBbnkpOiBTYWZlQW55IHtcbiAgICAgICAgICAgIHJldHVybiByb3cgJiYgdGhpcy5yb3dLZXkgPyByb3dbdGhpcy5yb3dLZXldIDogaW5kZXg7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdbJCRjb2x1bW5dJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q2xhc3MoZmlyc3QgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWZpcnN0ICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGB0YWJsZS0ke3RoaXMuc2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVUaGVtZU1hcFt0aGlzLnRoZW1lXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb2x1bW5TZWxlY3Rpb25zKGtleTogc3RyaW5nLCBzZWxlY3Rpb25zOiBTYWZlQW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbnMocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUZW1wbGF0ZVJlZihyZWY6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RlbFZhbHVlKHJvdzogU2FmZUFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBnZXQocm93LCBwYXRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyUm93Q2xhc3NOYW1lKHJvdzogU2FmZUFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucm93Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5yb3dDbGFzc05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzc05hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucm93Q2xhc3NOYW1lIGFzIEZ1bmN0aW9uKShyb3csIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLm1vZGVsKSB7XG4gICAgICAgICAgICBzZXQocm93LCBjb2x1bW4ubW9kZWwsIHJvd1tjb2x1bW4ua2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZUluZGV4Q2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VJbmRleENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlU2l6ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKG51bGwsIHJvdywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NdWx0aVNlbGVjdENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5tb2RlbC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVtjb2x1bW4ua2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG11bHRpU2VsZWN0RXZlbnQ6IFRoeU11bHRpU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPbk11bHRpU2VsZWN0Q2hhbmdlLmVtaXQobXVsdGlTZWxlY3RFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgcmFkaW9TZWxlY3RFdmVudDogVGh5UmFkaW9TZWxlY3RFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25SYWRpb1NlbGVjdENoYW5nZS5lbWl0KHJhZGlvU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHN3aXRjaEV2ZW50OiBUaHlTd2l0Y2hFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgcmVmcmVzaDogKHZhbHVlOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCByb3c7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5rZXldID0gZ2V0KHZhbHVlLCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uU3dpdGNoQ2hhbmdlLmVtaXQoc3dpdGNoRXZlbnQpO1xuICAgIH1cblxuICAgIHNob3dFeHBhbmQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByb3dbdGhpcy50aHlDaGlsZHJlbktleV0gJiYgcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNFeHBhbmRlZChyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dO1xuICAgIH1cblxuICAgIGljb25JbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGxldmVsICogdGhpcy50aHlJbmRlbnQgLSA1O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGRJbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBgJHsobGV2ZWwgKyAxKSAqIHRoaXMudGh5SW5kZW50IC0gNX1weGBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZChyb3cpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnR3JvdXBTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZyA9IHsgLi4udGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwIH07XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5leHBhbmQpO1xuICAgICAgICB0aGlzLmZvbGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5vbkRyYWdTdGFydGVkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwRW5kKGV2ZW50OiBDZGtEcmFnRW5kPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnW2dyb3VwLmlkXSk7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJhZ0dyb3VwRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGEuaWQgPT09IGdyb3VwLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwXG4gICAgICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICAgICAgbW9kZWxzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwIGNoaWxkcmVuXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGFbdGhpcy5ncm91cEJ5XSA9PT0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPVxuICAgICAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpLmZpbmRJbmRleChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5pZCA9PT0gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV07XG4gICAgICAgICAgICAgICAgfSkgKyAxO1xuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogZ3JvdXAuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXggLSBncm91cEluZGV4LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXggLSBncm91cEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGdyb3VwLmNoaWxkcmVuLCBkcmFnRXZlbnQub2xkSW5kZXgsIGRyYWdFdmVudC5uZXdJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDx1bmtub3duPikge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdQcmV2aWV3Q2xhc3MpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGRzOiBIVE1MQ29sbGVjdGlvbiA9IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwcmV2aWV3Py5jaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtvcmlnaW5hbFRkc1tpbmRleF0/LmNsaWVudFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkcm9wTGlzdEVudGVyUHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGRyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRhdGEuZ3JvdXBfaWQgPT09IGRyYWcuZGF0YS5ncm91cF9pZDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkRyYWdNb2RlbERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgbW9kZWxzOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgIH07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1vZGVsLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ0dyb3VwRHJvcHBlZChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc29ydERpcmVjdGlvbiwgbW9kZWwsIHNvcnRDaGFuZ2UgfSA9IGNvbHVtbjtcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb247XG4gICAgICAgICAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0RGlyZWN0aW9uID09PSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uLnNvcnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBjb25zdCBzb3J0RXZlbnQgPSB7IGV2ZW50LCBrZXk6IG1vZGVsLCBkaXJlY3Rpb24gfTtcbiAgICAgICAgICAgIHNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICAgICAgdGhpcy50aHlTb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudCwgcm93KTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3ggfHwgaXRlbS50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4ua2V5XSA9ICFyb3dbY29sdW1uLmtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3dFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRoeU9uUm93Q2xpY2suZW1pdChyb3dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCcudHJlZS1leHBhbmQtaWNvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZENoaWxkcmVuKHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q29udGV4dE1lbnUoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVFdmVudDogVGh5VGFibGVFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25Sb3dDb250ZXh0TWVudS5lbWl0KGNvbnRleHRNZW51RXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5jb2x1bW5zIHx8IFtdO1xuICAgICAgICBjb25zdCBfY29sdW1ucyA9IGNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb21wb25lbnQud2lkdGgsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb21wb25lbnQuY2xhc3NOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobiwgaSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuLCBfY29sdW1uc1tpXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRHcm91cHMob3JpZ2luR3JvdXBzOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkdyb3Vwc01hcCA9IGhlbHBlcnMua2V5Qnkob3JpZ2luR3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgb3JpZ2luR3JvdXBzLmZvckVhY2goKG9yaWdpbjogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXA6IFRoeVRhYmxlR3JvdXAgPSB7IGlkOiBvcmlnaW5bdGhpcy5yb3dLZXldLCBjaGlsZHJlbjogW10sIG9yaWdpbiB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwLmhhc093blByb3BlcnR5KGdyb3VwLmlkKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9IHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9ICEhKG9yaWdpbkdyb3Vwc01hcFtncm91cC5pZF0gYXMgU2FmZUFueSkuZXhwYW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1vZGVsKCkge1xuICAgICAgICBjb25zdCBncm91cHNNYXAgPSBrZXlCeSh0aGlzLmdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNNYXBbcm93W3RoaXMuZ3JvdXBCeV1dO1xuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4ucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kR3JvdXAoZ3JvdXA6IFRoeVRhYmxlR3JvdXApIHtcbiAgICAgICAgZ3JvdXAuZXhwYW5kID0gIWdyb3VwLmV4cGFuZDtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXSA9IGdyb3VwLmV4cGFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2xkR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjcm9sbENsYXNzKCkge1xuICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy50YWJsZVNjcm9sbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbExlZnQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoIC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgY29uc3QgbGFzdFNjcm9sbENsYXNzTmFtZSA9IHRoaXMuc2Nyb2xsQ2xhc3NOYW1lO1xuICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9ICcnO1xuICAgICAgICBpZiAoc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCA+IHNjcm9sbEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChzY3JvbGxYID49IG1heFNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbFJpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbE1pZGRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgbGFzdFNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCB0aGlzLnNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLmluaXRpYWxpemVFbGVtZW50KHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcyh0cnVlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgbWVyZ2UodGhpcy52aWV3cG9ydFJ1bGVyLmNoYW5nZSgyMDApLCBvZihudWxsKS5waXBlKGRlbGF5KDIwMCkpKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93cy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5yb3dzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5yb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRvdWNoLCBwb2ludGVyIGFuZCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG9nZXRoZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJvd3MsIHdoaWNoIHdpbGwgbGVhZCB0byBhZGRpbmcgTiAqIDMgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNleGFtcGxlcyksIHdlIGNhbiB1c2UgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUuIElmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUsIHdlIGhhdmUgdG8gbGlzdGVuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGBwb2ludGVyZG93bmAgZXZlbnQuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgb24gYSB0b3VjaCBkZXZpY2Ugb3Igbm90LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCBldmVudHMgYXJlIGhhbmRsZWQgZWFybGllciB0aGFuIG1vdXNlIGV2ZW50cywgdGhvIG5vdCBhbGwgdXNlciBhZ2VudHMgZGlzcGF0Y2ggbW91c2UgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRvdWNoIGV2ZW50cy4gU2VlIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5Qb2ludGVyRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BvaW50ZXJkb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnb250b3VjaHN0YXJ0JyBpbiByb3cubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndG91Y2hzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHNpbmNlIENocm9tZSA1NiBkZWZhdWx0cyBkb2N1bWVudCBsZXZlbCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgdG8gcGFzc2l2ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIGlzIG5vdCBwYXNzaXZlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmV2ZXIgY2FsbCBgcHJldmVudERlZmF1bHQoKWAgb24gaXQsIHNvIHdlJ3JlIHNhZmUgbWFraW5nIGl0IHBhc3NpdmUgdG9vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+cGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeU1vZGU7XG4gICAgICAgIGNvbnN0IHRoeUdyb3Vwc0NoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5R3JvdXBzO1xuICAgICAgICBjb25zdCBpc0dyb3VwTW9kZSA9IG1vZGVDaGFuZ2UgJiYgbW9kZUNoYW5nZS5jdXJyZW50VmFsdWUgPT09ICdncm91cCc7XG4gICAgICAgIGlmIChpc0dyb3VwTW9kZSAmJiB0aHlHcm91cHNDaGFuZ2UgJiYgdGh5R3JvdXBzQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHRoeUdyb3Vwc0NoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGlmZikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmYuZGlmZih0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGh5LXRhYmxlLWJvZHlcIlxuICBjZGtTY3JvbGxhYmxlXG4gIFtuZ0NsYXNzXT1cInsgJ3RoeS10YWJsZS1maXhlZCc6IGhhc0ZpeGVkLCAndGh5LXRhYmxlLWJvcmRlcmVkLXRoZW1lJzogdGhlbWUgPT09ICdib3JkZXJlZCcgJiYgaGFzRml4ZWQgfVwiXG4+XG4gIDx0YWJsZVxuICAgICN0YWJsZVxuICAgIGNsYXNzPVwidGFibGVcIlxuICAgIFtuZ0NsYXNzXT1cIltjbGFzc05hbWVdXCJcbiAgICBbY2xhc3MudGFibGUtZml4ZWRdPVwidGh5TGF5b3V0Rml4ZWRcIlxuICAgIFtjbGFzcy50YWJsZS1kcmFnZ2FibGVdPVwiZHJhZ2dhYmxlXCJcbiAgICBbY2xhc3MudGFibGUtZ3JvdXBdPVwibW9kZSA9PT0gJ2dyb3VwJ1wiXG4gICAgW3N0eWxlLm1pbi13aWR0aF09XCJ0aHlNaW5XaWR0aFwiXG4gID5cbiAgICA8Y29sZ3JvdXA+XG4gICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFt3aWR0aF09XCJjb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwiaGFzRml4ZWQgPyBjb2x1bW4ud2lkdGggOiBjb2x1bW4ubWluV2lkdGhcIiAvPlxuICAgIDwvY29sZ3JvdXA+XG5cbiAgICA8dGhlYWQgKm5nSWY9XCJ0aHlTaG93SGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbkhlYWRlckNsaWNrKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbHVtbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gW25nQ2xhc3NdPVwiWyd0aHktdGFibGUtY29sdW1uLXNvcnRhYmxlLWljb24nLCAncHgtMScsIGNvbHVtbi5zb3J0RGlyZWN0aW9uXVwiIHRoeUljb25OYW1lPVwic29ydC12ZXJ0aWNhbC10dFwiPlxuICAgICAgICAgICAgPC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keVxuICAgICAgKm5nSWY9XCJsb2FkaW5nRG9uZVwiXG4gICAgICB0aHlEcmFnRHJvcFxuICAgICAgY2RrRHJvcExpc3RcbiAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnZ2FibGVcIlxuICAgICAgW2Nka0Ryb3BMaXN0U29ydFByZWRpY2F0ZV09XCJkcm9wTGlzdEVudGVyUHJlZGljYXRlXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25EcmFnRHJvcHBlZCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8IS0tIGdyb3VwIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdncm91cCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInRoeS10YWJsZS1ncm91cFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kR3JvdXAoZ3JvdXApXCJcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdyb3VwXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdHcm91cFN0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0dyb3VwRW5kKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyYWdnYWJsZSAmJiAhKGdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQ6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFt0aHlJY29uTmFtZV09XCJncm91cC5leHBhbmQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGdyb3VwLm9yaWdpbiwgZ3JvdXA6IGdyb3VwLm9yaWdpbiB9XCJcbiAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuY2hpbGRyZW4/Lmxlbmd0aCAmJiBncm91cC5leHBhbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBncm91cC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBsaXN05qih5byP5LiL5rKh5pyJ55u05o6l5L2/55SoaXRlbeaooeadv++8jOaYr+WboOS4uuS9v+eUqOS6huaooeadv+W9seWTjeS6hkFuZ3VsYXLnmoTkvp3otZbmoJHvvIzlr7zoh7RDZGtEcmFnRHJvcOaOkuW6j+WkseaViO+8jOebruWJjei/meagt+S/ruaUueWPr+S7peaaguaXtuino+WGs+e6v+S4iuS4jeiDveaOkuW6j+eahOmXrumimO+8jFRyZWXmqKHlvI/nmoTmjpLluo/mmoLml7bkuI3mlK/mjIEgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2xpc3QnXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgaW5kZXg6IGksIGxldmVsOiAwIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RyVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbmRlclJvd0NsYXNzTmFtZShyb3csIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICh0aHlDb250ZXh0TWVudSk9XCJvblJvd0NvbnRleHRNZW51KCRldmVudCwgcm93KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3dbdGh5Q2hpbGRyZW5LZXldOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IGNoaWxkLCBpbmRleDogaiwgbGV2ZWw6IGxldmVsICsgMSB9XCJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Rkc1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LW9wZXJhdGlvbi1saW5rc109XCIhIWNvbHVtbi5vcGVyYXRpb25hbFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc2Vjb25kYXJ5XT1cIiEhY29sdW1uLnNlY29uZGFyeVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jaGVja2JveC1jb2x1bW5dPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmQgPyB0ZEluZGVudENvbXB1dGVkKGxldmVsKSA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImogPT09IDAgJiYgZHJhZ2dhYmxlICYmICEocm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQ6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS10ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCJcbiAgICAgICAgICAgID48L3RoeS1pY29uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS1ub3QgdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoY29sdW1uLmNlbGxUZW1wbGF0ZVJlZilcIj5cbiAgICAgICAgICAgIDwhLS0gZGVmYXVsdCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubW9kZWwgJiYgIWNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cImlzRXhwYW5kZWQocm93KSA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCJcbiAgICAgICAgICAgICAgPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB8IGlzVmFsaWRNb2RlbFZhbHVlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGVmYXVsdFRleHRcIiBjbGFzcz1cInRleHQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmRlZmF1bHRUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBpbmRleCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5pbmRleFwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHJhZGlvIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFJhZGlvUm93XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvU2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBzd2l0Y2ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoXCI+XG4gICAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAodGh5Q2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgPjwvdGh5LXN3aXRjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nRG9uZSAmJiBtb2RlbC5sZW5ndGggPT09IDAgJiYgZ3JvdXBzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGh5LXRhYmxlLWVtcHR5IGNsZWFyLWhvdmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVtcHR5XCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHk+XG4gICAgICA8dGh5LWVtcHR5XG4gICAgICAgIFt0aHlNZXNzYWdlXT1cImVtcHR5T3B0aW9ucy5tZXNzYWdlXCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uS2V5XT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvbktleVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvblZhbHVlc109XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25WYWx1ZXNcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVwiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lVHJhbnNsYXRlS2V5XT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lVHJhbnNsYXRlS2V5XCJcbiAgICAgICAgW3RoeUljb25OYW1lXT1cImVtcHR5T3B0aW9ucy5pY29uTmFtZVwiXG4gICAgICAgIFt0aHlTaXplXT1cImVtcHR5T3B0aW9ucy5zaXplXCJcbiAgICAgICAgW3RoeU1hcmdpblRvcF09XCJlbXB0eU9wdGlvbnMubWFyZ2luVG9wXCJcbiAgICAgICAgW3RoeVRvcEF1dG9dPVwiZW1wdHlPcHRpb25zLnRvcEF1dG9cIlxuICAgICAgICBbdGh5Q29udGFpbmVyXT1cImVtcHR5T3B0aW9ucy5jb250YWluZXJcIlxuICAgICAgPjwvdGh5LWVtcHR5PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDx0aHktbG9hZGluZyBbdGh5RG9uZV09XCJsb2FkaW5nRG9uZVwiIFt0aHlUaXBdPVwibG9hZGluZ1RleHRcIj48L3RoeS1sb2FkaW5nPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsID4gcGFnaW5hdGlvbi5zaXplXCIgW2NsYXNzLnRoeS10YWJsZS1mb290ZXItaGFzLXBhZGRpbmddPVwidGhlbWUgPT09ICdkZWZhdWx0J1wiPlxuICAgIDx0aHktcGFnaW5hdGlvblxuICAgICAgW3RoeVBhZ2VJbmRleF09XCJwYWdpbmF0aW9uLmluZGV4XCJcbiAgICAgIFt0aHlUb3RhbF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgIFt0aHlQYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgW3RoeVBhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnNpemVPcHRpb25zXCJcbiAgICAgIFt0aHlTaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFt0aHlTaG93VG90YWxdPVwic2hvd1RvdGFsXCJcbiAgICAgICh0aHlQYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgID48L3RoeS1wYWdpbmF0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=